Hi

Attached is a patch for two minor FIXMEs in the preferences page.

In the Files tab: when Add is pressed scroll to the new entry and set focus to the file-type field
In the Files tab: when Defaults is selected scroll to column 0, row 0
In the Keyboard tab: when Defaults is pressed scroll to column 0, row 0

These are just cosmetic changes, so are not really of interest until the next release happens.


Colin Clark

diff --git a/src/preferences.c b/src/preferences.c
index bedc10b..d088bc2 100644
--- a/src/preferences.c
+++ b/src/preferences.c
@@ -712,12 +712,48 @@ static void filter_set_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cel
 		}
 }
 
+static gboolean filter_add_scroll(gpointer data)
+{
+	GtkTreePath *path;
+	GList *list_cells;
+	GtkCellRenderer *cell;
+	GtkTreeViewColumn *column;
+	GList *list_columns;
+	const gchar *title;
+	guint i = 0;
+	gint rows;
+
+	rows = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(filter_store), NULL);
+	path = gtk_tree_path_new_from_indices(rows-1, -1);
+	
+	list_columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(data));
+	do {
+		column = g_list_nth(list_columns,i)->data;
+		title = gtk_tree_view_column_get_title(GTK_TREE_VIEW_COLUMN(column));
+		i++;
+		} while (strcmp(title, "Filter") !=0 );
+
+	list_cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
+	cell = g_list_last(list_cells)->data;
+
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(data),
+								path, column, FALSE, 0.0, 0.0 ); 
+	gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW(data),
+								path, column, cell, TRUE);            
+
+	gtk_tree_path_free(path);
+	g_list_free(list_cells);
+	g_list_free(list_columns);
+                          
+	return(FALSE); 
+}
+
 static void filter_add_cb(GtkWidget *widget, gpointer data)
 {
 	filter_add_unique("description", ".new", FORMAT_CLASS_IMAGE, TRUE, FALSE, TRUE);
 	filter_store_populate();
 
-	/* FIXME: implement the scroll to/select row stuff for tree view */
+	g_idle_add((GSourceFunc)filter_add_scroll, data);
 }
 
 static void filter_remove_cb(GtkWidget *widget, gpointer data)
@@ -738,12 +774,33 @@ static void filter_remove_cb(GtkWidget *widget, gpointer data)
 	filter_store_populate();
 }
 
+static gboolean filter_default_ok_scroll(GtkTreeView *data)
+{
+	GtkTreeIter iter;
+	GtkTreePath *path;
+	GtkTreeViewColumn *column;
+	
+	gtk_tree_model_get_iter_first(GTK_TREE_MODEL(filter_store), &iter);
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(filter_store), &iter);
+	column = gtk_tree_view_get_column(GTK_TREE_VIEW(data),0);
+	
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(data),
+                                 path, column,
+                                 FALSE, 0.0, 0.0); 
+                                  
+    gtk_tree_path_free(path);
+    
+	return(FALSE); 
+}
+
 static void filter_default_ok_cb(GenericDialog *gd, gpointer data)
 {
 	filter_reset();
 	filter_add_defaults();
 	filter_rebuild();
 	filter_store_populate();
+
+	g_idle_add((GSourceFunc)filter_default_ok_scroll, gd->data);
 }
 
 static void dummy_cancel_cb(GenericDialog *gd, gpointer data)
@@ -757,7 +814,7 @@ static void filter_default_cb(GtkWidget *widget, gpointer data)
 
 	gd = generic_dialog_new(_("Reset filters"),
 				"reset_filter", widget, TRUE,
-				dummy_cancel_cb, NULL);
+				dummy_cancel_cb, data);
 	generic_dialog_add_message(gd, GTK_STOCK_DIALOG_QUESTION, _("Reset filters"),
 				   _("This will reset the file filters to the defaults.\nContinue?"));
 	generic_dialog_add_button(gd, GTK_STOCK_OK, NULL, filter_default_ok_cb, TRUE);
@@ -969,11 +1026,30 @@ static void accel_store_edited_cb(GtkCellRendererAccel *accel, gchar *path_strin
 	g_free(acc);
 }
 
+static gboolean accel_default_scroll(GtkTreeView *data)
+{
+	GtkTreeIter iter;
+	GtkTreePath *path;
+	GtkTreeViewColumn *column;
+	
+	gtk_tree_model_get_iter_first(GTK_TREE_MODEL(accel_store), &iter);
+	path = gtk_tree_model_get_path(GTK_TREE_MODEL(accel_store), &iter);
+	column = gtk_tree_view_get_column(GTK_TREE_VIEW(data),0);
+	
+	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(data),
+                                 path, column,
+                                 FALSE, 0.0, 0.0); 
+                                  
+    gtk_tree_path_free(path);
+    
+	return(FALSE); 
+}
+
 static void accel_default_cb(GtkWidget *widget, gpointer data)
 {
 	accel_store_populate();
 
-	/* FIXME: implement the scroll to/select row stuff for tree view */
+	g_idle_add((GSourceFunc)accel_default_scroll, data);
 }
 
 void accel_remove_selection(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
@@ -1571,7 +1647,7 @@ static void config_tab_files(GtkWidget *notebook)
 	hbox = pref_box_new(group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_BUTTON_GAP);
 
 	button = pref_button_new(NULL, NULL, _("Defaults"), FALSE,
-				 G_CALLBACK(filter_default_cb), NULL);
+				 G_CALLBACK(filter_default_cb), filter_view);
 	gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
 	gtk_widget_show(button);
 
@@ -1581,7 +1657,7 @@ static void config_tab_files(GtkWidget *notebook)
 	gtk_widget_show(button);
 
 	button = pref_button_new(NULL, GTK_STOCK_ADD, NULL, FALSE,
-				 G_CALLBACK(filter_add_cb), NULL);
+				 G_CALLBACK(filter_add_cb), filter_view);
 	gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
 	gtk_widget_show(button);
 }
@@ -1943,7 +2019,7 @@ static void config_tab_accelerators(GtkWidget *notebook)
 	hbox = pref_box_new(group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_BUTTON_GAP);
 
 	button = pref_button_new(NULL, NULL, _("Defaults"), FALSE,
-				 G_CALLBACK(accel_default_cb), NULL);
+				 G_CALLBACK(accel_default_cb), accel_view);
 	gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
 	gtk_widget_show(button);
 
------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Geeqie-devel mailing list
Geeqie-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geeqie-devel

Reply via email to