[gthumb] list_tools: update the menu items sensitivity just before showing the menu



commit c19171a19d1362c752a49e64ca78d1f08ac6d4bd
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Tue Oct 25 15:21:56 2011 +0200

    list_tools: update the menu items sensitivity just before showing the menu

 extensions/list_tools/callbacks.c |  155 +++++++++++++++++++------------------
 extensions/list_tools/callbacks.h |    1 -
 extensions/list_tools/main.c      |    1 -
 3 files changed, 78 insertions(+), 79 deletions(-)
---
diff --git a/extensions/list_tools/callbacks.c b/extensions/list_tools/callbacks.c
index 368ac79..942baa8 100644
--- a/extensions/list_tools/callbacks.c
+++ b/extensions/list_tools/callbacks.c
@@ -94,6 +94,73 @@ browser_data_free (BrowserData *data)
 }
 
 
+static GtkWidget *
+get_widget_with_prefix (BrowserData *data,
+			const char  *prefix,
+			const char  *path)
+{
+	char      *full_path;
+	GtkWidget *widget;
+
+	full_path = g_strconcat (prefix, path, NULL);
+	widget = gtk_ui_manager_get_widget (gth_browser_get_ui_manager (data->browser), full_path);
+
+	g_free (full_path);
+
+	return widget;
+}
+
+
+static void
+_update_sensitivity (GthBrowser *browser,
+		     const char *prefix)
+{
+	BrowserData *data;
+	int          n_selected;
+	gboolean     sensitive;
+	GtkWidget   *separator1;
+	GtkWidget   *separator2;
+	GtkWidget   *menu;
+
+	data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
+	g_return_if_fail (data != NULL);
+
+	n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view (browser)));
+	sensitive = (n_selected > 0);
+
+	separator1 = get_widget_with_prefix (data, prefix, "/ToolsSeparator");
+	separator2 = get_widget_with_prefix (data, prefix, "/Scripts");
+	menu = gtk_widget_get_parent (separator1);
+	{
+		GList *children;
+		GList *scan;
+
+		children = gtk_container_get_children (GTK_CONTAINER (menu));
+
+		if (separator1 != NULL) {
+			for (scan = children; scan; scan = scan->next)
+				if (scan->data == separator1) {
+					scan = scan->next;
+					break;
+				}
+		}
+		else
+			scan = children;
+
+		for (/* void */; scan && (scan->data != separator2); scan = scan->next)
+			gtk_widget_set_sensitive (scan->data, sensitive);
+	}
+}
+
+
+static void
+list_tools__gth_browser_update_sensitivity_cb (GthBrowser *browser)
+{
+	_update_sensitivity (browser, "/ListToolsPopup");
+	/*_update_sensitivity (browser, "/FileListPopup/Open_Actions/ExecWith");*/
+}
+
+
 static void
 exec_script (GthBrowser *browser,
 	     GthScript  *script)
@@ -130,23 +197,6 @@ activate_script_menu_item (GtkMenuItem *menuitem,
 }
 
 
-static GtkWidget *
-get_widget_with_prefix (BrowserData *data,
-			const char  *prefix,
-			const char  *path)
-{
-	char      *full_path;
-	GtkWidget *widget;
-
-	full_path = g_strconcat (prefix, path, NULL);
-	widget = gtk_ui_manager_get_widget (gth_browser_get_ui_manager (data->browser), full_path);
-
-	g_free (full_path);
-
-	return widget;
-}
-
-
 static void
 _update_scripts_menu (BrowserData *data,
 		      const char  *prefix)
@@ -225,19 +275,20 @@ list_tools_show_menu_func (GtkAction *action,
 	BrowserData *data = user_data;
 	GtkWidget   *menu;
 
-	if (data->menu_initialized)
-		return;
+	if (! data->menu_initialized) {
+		data->menu_initialized = TRUE;
 
-	data->menu_initialized = TRUE;
+		menu = gtk_ui_manager_get_widget (gth_browser_get_ui_manager (data->browser), "/ListToolsPopup");
+		g_object_set (action, "menu", menu, NULL);
+		update_scripts_menu (data);
 
-	menu = gtk_ui_manager_get_widget (gth_browser_get_ui_manager (data->browser), "/ListToolsPopup");
-	g_object_set (action, "menu", menu, NULL);
-	update_scripts_menu (data);
+		data->scripts_changed_id = g_signal_connect (gth_script_file_get (),
+							     "changed",
+							     G_CALLBACK (scripts_changed_cb),
+							     data);
+	}
 
-	data->scripts_changed_id = g_signal_connect (gth_script_file_get (),
-				                     "changed",
-				                     G_CALLBACK (scripts_changed_cb),
-				                     data);
+	list_tools__gth_browser_update_sensitivity_cb (data->browser);
 }
 
 
@@ -286,56 +337,6 @@ list_tools__gth_browser_construct_cb (GthBrowser *browser)
 }
 
 
-static void
-_update_sensitivity (GthBrowser *browser,
-		     const char *prefix)
-{
-	BrowserData *data;
-	int          n_selected;
-	gboolean     sensitive;
-	GtkWidget   *separator1;
-	GtkWidget   *separator2;
-	GtkWidget   *menu;
-
-	data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
-	g_return_if_fail (data != NULL);
-
-	n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view (browser)));
-	sensitive = (n_selected > 0);
-
-	separator1 = get_widget_with_prefix (data, prefix, "/ToolsSeparator");
-	separator2 = get_widget_with_prefix (data, prefix, "/Scripts");
-	menu = gtk_widget_get_parent (separator1);
-	{
-		GList *children;
-		GList *scan;
-
-		children = gtk_container_get_children (GTK_CONTAINER (menu));
-
-		if (separator1 != NULL) {
-			for (scan = children; scan; scan = scan->next)
-				if (scan->data == separator1) {
-					scan = scan->next;
-					break;
-				}
-		}
-		else
-			scan = children;
-
-		for (/* void */; scan && (scan->data != separator2); scan = scan->next)
-			gtk_widget_set_sensitive (scan->data, sensitive);
-	}
-}
-
-
-void
-list_tools__gth_browser_update_sensitivity_cb (GthBrowser *browser)
-{
-	_update_sensitivity (browser, "/ListToolsPopup");
-	/*_update_sensitivity (browser, "/FileListPopup/Open_Actions/ExecWith");*/
-}
-
-
 gpointer
 list_tools__gth_browser_file_list_key_press_cb (GthBrowser  *browser,
 						GdkEventKey *event)
diff --git a/extensions/list_tools/callbacks.h b/extensions/list_tools/callbacks.h
index 1a297f5..897d8ab 100644
--- a/extensions/list_tools/callbacks.h
+++ b/extensions/list_tools/callbacks.h
@@ -25,7 +25,6 @@
 #include <gthumb.h>
 
 void      list_tools__gth_browser_construct_cb           (GthBrowser  *browser);
-void      list_tools__gth_browser_update_sensitivity_cb  (GthBrowser  *browser);
 gpointer  list_tools__gth_browser_file_list_key_press_cb (GthBrowser  *browser,
 							  GdkEventKey *event);
 
diff --git a/extensions/list_tools/main.c b/extensions/list_tools/main.c
index 3c3195f..1c5011d 100644
--- a/extensions/list_tools/main.c
+++ b/extensions/list_tools/main.c
@@ -30,7 +30,6 @@ G_MODULE_EXPORT void
 gthumb_extension_activate (void)
 {
 	gth_hook_add_callback ("gth-browser-construct", 5, G_CALLBACK (list_tools__gth_browser_construct_cb), NULL);
-	gth_hook_add_callback ("gth-browser-update-sensitivity", 10, G_CALLBACK (list_tools__gth_browser_update_sensitivity_cb), NULL);
 	gth_hook_add_callback ("gth-browser-file-list-key-press", 10, G_CALLBACK (list_tools__gth_browser_file_list_key_press_cb), NULL);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]