[Xfce4-commits] r26576 - xarchiver/trunk/src

Giuseppe Torelli colossus at xfce.org
Tue Jan 15 21:21:54 CET 2008


Author: colossus
Date: 2008-01-15 20:21:53 +0000 (Tue, 15 Jan 2008)
New Revision: 26576

Modified:
   xarchiver/trunk/src/extract_dialog.c
   xarchiver/trunk/src/extract_dialog.h
Log:
Fixed a scroll problem in the extract dialog when creating a new dir.


Modified: xarchiver/trunk/src/extract_dialog.c
===================================================================
--- xarchiver/trunk/src/extract_dialog.c	2008-01-15 19:09:47 UTC (rev 26575)
+++ xarchiver/trunk/src/extract_dialog.c	2008-01-15 20:21:53 UTC (rev 26576)
@@ -186,6 +186,7 @@
 	gtk_container_add (GTK_CONTAINER (scrolledwindow1), dialog_data->treeview3);
 	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (dialog_data->treeview3), FALSE);
 	gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),1,GTK_SORT_ASCENDING);
+
 	g_signal_connect (G_OBJECT (dialog_data->treeview3),"row-expanded",G_CALLBACK(xa_expand_dir),dialog_data->destination_path_entry);
 	g_signal_connect (G_OBJECT (dialog_data->treeview3),"row-activated",G_CALLBACK(xa_row_activated),dialog_data->destination_path_entry);
 	GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW (dialog_data->treeview3));
@@ -263,25 +264,25 @@
 	Extract_dialog_data *dialog = data;
 	GtkTreeModel *model;
 	GtkTreeSelection *selection;
-	GtkTreeIter iter,new_iter;
-	GtkTreePath *path = NULL;
+	GtkTreeIter child,iter;
+	GtkTreePath *path;
 	GtkTreeViewColumn *column;
 
 	g_object_set(dialog->renderer,"editable",TRUE,NULL);
 	model = gtk_tree_view_get_model (GTK_TREE_VIEW(dialog->treeview3));
 	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview3));
 
-	if (gtk_tree_selection_get_selected (selection,NULL,&iter))
+	if (selection)
 	{
-		gtk_widget_set_sensitive(dialog->create_dir,FALSE);	
-		gtk_tree_store_append(GTK_TREE_STORE(model),&new_iter,&iter);
-		gtk_tree_view_get_cursor(GTK_TREE_VIEW(dialog->treeview3),&path,NULL);
+		gtk_tree_selection_get_selected(selection,NULL,&iter);
+		gtk_widget_set_sensitive(dialog->create_dir,FALSE);
+		gtk_tree_store_append(GTK_TREE_STORE(model),&child,&iter);
+		gtk_tree_view_get_cursor(GTK_TREE_VIEW(dialog->treeview3),&path,&column);
 		gtk_tree_view_expand_to_path(GTK_TREE_VIEW(dialog->treeview3),path);
 
-		column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->treeview3),0);
 		gtk_tree_path_down(path);
+		gtk_tree_selection_select_iter(selection,&child);
 		gtk_tree_view_set_cursor(GTK_TREE_VIEW(dialog->treeview3),path,column,TRUE);
-		gtk_tree_selection_select_iter(selection,&new_iter);
 		gtk_tree_path_free (path);
 	}
 }
@@ -297,10 +298,10 @@
 	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview3));
 	if (selection)
 	{
+		g_object_set(dialog->renderer,"editable",FALSE,NULL);
 		gtk_tree_selection_get_selected(selection,&model,&iter);
 		gtk_tree_store_remove(GTK_TREE_STORE(model),&iter);
 		gtk_widget_set_sensitive(dialog->create_dir,TRUE);
-		g_object_set(dialog->renderer,"editable",FALSE,NULL);
 	}
 }
 
@@ -309,7 +310,6 @@
 	Extract_dialog_data *dialog = data;
 	GtkTreeModel *model;
 	GtkTreeIter iter;
-	GtkTreeIter prev_iter;
 	gchar *previous_dir;
 	gchar *fullname;
 	gint result;
@@ -317,12 +317,11 @@
 	model = gtk_tree_view_get_model (GTK_TREE_VIEW(dialog->treeview3));
 	GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
 	gtk_tree_model_get_iter (model, &iter,path);
-	gtk_tree_path_up(path);
-	gtk_tree_model_get_iter (model, &prev_iter,path);
-	gtk_tree_model_get(model,&prev_iter,2,&previous_dir,-1);
-
+	
+	previous_dir = g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog->destination_path_entry)));
 	fullname = g_strconcat(previous_dir,"/",new_text,NULL);
 	g_free(previous_dir);
+
 	gtk_tree_store_set(GTK_TREE_STORE(model),&iter,0,"gtk-directory",1,new_text,2,fullname,-1);
 
 	result = mkdir (fullname,S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXGRP);
@@ -335,7 +334,8 @@
 	}
 	else
 	{
-		gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(dialog->treeview3),path,NULL,FALSE,0,0);
+		dialog->string = gtk_tree_path_to_string (gtk_tree_model_get_path (model, &iter));
+		dialog->signal_id = g_signal_connect_after(G_OBJECT(GTK_TREE_VIEW(dialog->treeview3)),"expose-event",G_CALLBACK(xa_treeview_exposed),dialog);
 		gtk_entry_set_text(GTK_ENTRY(dialog->destination_path_entry),fullname);
 	}
 	g_free(fullname);
@@ -344,25 +344,24 @@
 	g_object_set(dialog->renderer,"editable",FALSE,NULL);
 }
 
-
 void xa_activate_entry(GtkToggleButton *button,gpointer data)
 {
 	Extract_dialog_data *dialog = data;
 
-	if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->files_radio)))
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->files_radio)))
 	{
-		gtk_widget_set_sensitive (dialog->entry2, TRUE);
+		gtk_widget_set_sensitive (dialog->entry2,TRUE);
 		gtk_widget_grab_focus (dialog->entry2);
 	}
 	else
 		gtk_widget_set_sensitive (dialog->entry2,FALSE);
 }
 
-void fresh_update_toggled_cb (GtkToggleButton *button, Extract_dialog_data *data)
+void fresh_update_toggled_cb (GtkToggleButton *button,Extract_dialog_data *data)
 {
-	gboolean active = gtk_toggle_button_get_active (button);
+	gboolean active = gtk_toggle_button_get_active(button);
 	if (active)
-		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->update), FALSE);
+		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->update),FALSE);
 }
 
 void update_fresh_toggled_cb (GtkToggleButton *button, Extract_dialog_data *data)
@@ -977,7 +976,7 @@
 	GtkTreeIter iter;
 	GtkTreeModel *model;
 
-	if (gtk_tree_selection_get_selected (selection, &model, &iter))
+	if (gtk_tree_selection_get_selected (selection,&model,&iter))
 	{
 		gtk_tree_model_get (model,&iter,2,&dir,-1);
 		if (dir != NULL)
@@ -1019,3 +1018,13 @@
 	gtk_entry_set_text(entry,dir);
 	g_free(dir);
 }
+
+void xa_treeview_exposed (GtkWidget *widget,GdkEventExpose *event,gpointer data)
+{
+	Extract_dialog_data *dialog = data;
+
+	GtkTreePath *path = gtk_tree_path_new_from_string (dialog->string);
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(widget),path,NULL,FALSE,0,0);
+	gtk_tree_path_free (path);
+	g_signal_handler_disconnect (G_OBJECT(widget),dialog->signal_id);
+}

Modified: xarchiver/trunk/src/extract_dialog.h
===================================================================
--- xarchiver/trunk/src/extract_dialog.h	2008-01-15 19:09:47 UTC (rev 26575)
+++ xarchiver/trunk/src/extract_dialog.h	2008-01-15 20:21:53 UTC (rev 26576)
@@ -40,6 +40,8 @@
 	GtkWidget *create_dir;
 	GtkWidget *treeview3;
 	GtkCellRenderer *renderer;
+	gchar *string;
+	gulong signal_id;
 } Extract_dialog_data;
 
 GtkWidget *label1,*label2,*label3,*label4,*label_password;
@@ -66,5 +68,6 @@
 void xa_tree_view_row_selected(GtkTreeSelection *selection, gpointer data);
 void xa_row_activated(GtkTreeView *tree_view,GtkTreePath *path,GtkTreeViewColumn *column,gpointer user_data);
 void xa_expand_dir(GtkTreeView *tree_view,GtkTreeIter *iter,GtkTreePath *path,gpointer data);
+void xa_treeview_exposed (GtkWidget *widget,GdkEventExpose *event,gpointer data);
 #endif
 



More information about the Xfce4-commits mailing list