[gthumb] moved all the list tools to the header bar



commit d76dec31935b7af756b35cfaa6ca607cc97b8d45
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Mon Oct 21 21:55:26 2013 +0200

    moved all the list tools to the header bar

 extensions/change_date/actions.c      |   10 +-
 extensions/change_date/actions.h      |    6 +-
 extensions/change_date/callbacks.c    |   69 ++------
 extensions/comments/actions.c         |   12 +-
 extensions/comments/actions.h         |    6 +-
 extensions/comments/callbacks.c       |   63 ++------
 extensions/convert_format/actions.c   |   11 +-
 extensions/convert_format/actions.h   |    6 +-
 extensions/convert_format/callbacks.c |   73 ++-------
 extensions/edit_metadata/callbacks.c  |   54 +++----
 extensions/image_rotation/callbacks.c |    1 -
 extensions/list_tools/actions.c       |    8 -
 extensions/list_tools/actions.h       |    5 +-
 extensions/list_tools/callbacks.c     |  296 +++++----------------------------
 extensions/resize_images/actions.c    |   10 +-
 extensions/resize_images/actions.h    |    6 +-
 extensions/resize_images/callbacks.c  |   73 ++-------
 17 files changed, 166 insertions(+), 543 deletions(-)
---
diff --git a/extensions/change_date/actions.c b/extensions/change_date/actions.c
index 8500c67..429c4a5 100644
--- a/extensions/change_date/actions.c
+++ b/extensions/change_date/actions.c
@@ -27,11 +27,13 @@
 
 
 void
-gth_browser_activate_action_tool_change_date (GtkAction  *action,
-                                             GthBrowser *browser)
+gth_browser_activate_change_date (GSimpleAction        *action,
+                                 GVariant      *parameter,
+                                 gpointer       user_data)
 {
-       GList *items;
-       GList *file_list;
+       GthBrowser      *browser = GTH_BROWSER (user_data);
+       GList           *items;
+       GList           *file_list;
 
        items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view 
(browser)));
        file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
diff --git a/extensions/change_date/actions.h b/extensions/change_date/actions.h
index fa22b42..fbc730f 100644
--- a/extensions/change_date/actions.h
+++ b/extensions/change_date/actions.h
@@ -22,10 +22,8 @@
 #ifndef ACTIONS_H
 #define ACTIONS_H
 
-#include <gtk/gtk.h>
+#include <gthumb.h>
 
-#define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
-
-DEFINE_ACTION(gth_browser_activate_action_tool_change_date)
+DEF_ACTION_CALLBACK (gth_browser_activate_change_date)
 
 #endif /* ACTIONS_H */
diff --git a/extensions/change_date/callbacks.c b/extensions/change_date/callbacks.c
index 9c2bcf7..b43c622 100644
--- a/extensions/change_date/callbacks.c
+++ b/extensions/change_date/callbacks.c
@@ -24,81 +24,44 @@
 #include <glib/gi18n.h>
 #include <glib-object.h>
 #include <gthumb.h>
+#include <extensions/list_tools/list-tools.h>
 #include "actions.h"
 
 #define BROWSER_DATA_KEY "change-date-browser-data"
 
 
-static const char *fixed_ui_info =
-"<ui>"
-"  <popup name='ListToolsPopup'>"
-"    <placeholder name='Tools'>"
-"      <menuitem name='ChangeDate' action='Tool_ChangeDate'/>"
-"    </placeholder>"
-"  </popup>"
-"</ui>";
-
-
-static GtkActionEntry action_entries[] = {
-       { "Tool_ChangeDate", NULL,
-         N_("Change _Date..."), NULL,
-         N_("Change images last modified date"),
-         G_CALLBACK (gth_browser_activate_action_tool_change_date) },
+static const GActionEntry actions[] = {
+       { "change-date", gth_browser_activate_change_date }
 };
 
 
-typedef struct {
-       GtkActionGroup *action_group;
-} BrowserData;
-
-
-static void
-browser_data_free (BrowserData *data)
-{
-       g_free (data);
-}
+static const GthMenuEntry action_entries[] = {
+       { N_("Change _Date..."), "win.change-date" }
+};
 
 
 void
 cd__gth_browser_construct_cb (GthBrowser *browser)
 {
-       BrowserData *data;
-       GError      *error = NULL;
-
        g_return_if_fail (GTH_IS_BROWSER (browser));
 
-       data = g_new0 (BrowserData, 1);
-       data->action_group = gtk_action_group_new ("Change Date Actions");
-       gtk_action_group_set_translation_domain (data->action_group, NULL);
-       gtk_action_group_add_actions (data->action_group,
-                                     action_entries,
-                                     G_N_ELEMENTS (action_entries),
-                                     browser);
-       gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), data->action_group, 0);
-
-       if (! gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (browser), fixed_ui_info, -1, 
&error)) {
-               g_message ("building menus failed: %s", error->message);
-               g_clear_error (&error);
-       }
-
-       g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify) 
browser_data_free);
+       g_action_map_add_action_entries (G_ACTION_MAP (browser),
+                                        actions,
+                                        G_N_ELEMENTS (actions),
+                                        browser);
+       gth_menu_manager_append_entries (gth_browser_get_menu_manager (browser, 
GTH_BROWSER_MENU_MANAGER_TOOLS2),
+                                        action_entries,
+                                        G_N_ELEMENTS (action_entries));
 }
 
 
 void
 cd__gth_browser_update_sensitivity_cb (GthBrowser *browser)
 {
-       BrowserData *data;
-       GtkAction   *action;
-       int          n_selected;
-       gboolean     sensitive;
-
-       data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
-       g_return_if_fail (data != NULL);
+       int      n_selected;
+       gboolean sensitive;
 
        n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view 
(browser)));
        sensitive = n_selected > 0;
-
-       action = gtk_action_group_get_action (data->action_group, "Tool_ChangeDate");
-       g_object_set (action, "sensitive", sensitive, NULL);
+       gth_window_enable_action (GTH_WINDOW (browser), "change-date", sensitive);
 }
diff --git a/extensions/comments/actions.c b/extensions/comments/actions.c
index ccc7a8d..fafcecf 100644
--- a/extensions/comments/actions.c
+++ b/extensions/comments/actions.c
@@ -26,12 +26,14 @@
 
 
 void
-gth_browser_activate_action_tool_import_embedded_metadata (GtkAction  *action,
-                                                          GthBrowser *browser)
+gth_browser_activate_import_embedded_metadata (GSimpleAction   *action,
+                                              GVariant         *parameter,
+                                              gpointer          user_data)
 {
-       GList   *items;
-       GList   *file_data_list;
-       GthTask *task;
+       GthBrowser      *browser = GTH_BROWSER (user_data);
+       GList           *items;
+       GList           *file_data_list;
+       GthTask         *task;
 
        items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view 
(browser)));
        file_data_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
diff --git a/extensions/comments/actions.h b/extensions/comments/actions.h
index 7451f35..f12509b 100644
--- a/extensions/comments/actions.h
+++ b/extensions/comments/actions.h
@@ -22,10 +22,8 @@
 #ifndef ACTIONS_H
 #define ACTIONS_H
 
-#include <gtk/gtk.h>
+#include <gthumb.h>
 
-#define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
-
-DEFINE_ACTION(gth_browser_activate_action_tool_import_embedded_metadata)
+DEF_ACTION_CALLBACK (gth_browser_activate_import_embedded_metadata)
 
 #endif /* ACTIONS_H */
diff --git a/extensions/comments/callbacks.c b/extensions/comments/callbacks.c
index 3e20852..e0893b8 100644
--- a/extensions/comments/callbacks.c
+++ b/extensions/comments/callbacks.c
@@ -25,67 +25,32 @@
 #include <glib-object.h>
 #include <gdk/gdkkeysyms.h>
 #include <gthumb.h>
+#include <extensions/list_tools/list-tools.h>
 #include "actions.h"
 
 
-#define BROWSER_DATA_KEY "comments-data"
-
-
-static const char *fixed_ui_file_tools_info =
-"<ui>"
-"  <popup name='ListToolsPopup'>"
-"    <placeholder name='Tools_2'>"
-"      <menuitem name='ImportEmbeddedMetadata' action='Tool_ImportEmbeddedMetadata'/>"
-"    </placeholder>"
-"  </popup>"
-"</ui>";
-
-
-static GthActionEntryExt comments_action_entries[] = {
-       { "Tool_ImportEmbeddedMetadata", NULL,
-         N_("Import Embedded Metadata"), NULL,
-         N_("Import the metadata stored inside files into the gThumb comment system"),
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_tool_import_embedded_metadata) }
+static const GActionEntry actions[] = {
+       { "import-embedded-metadata", gth_browser_activate_import_embedded_metadata }
 };
 
 
-typedef struct {
-       GthBrowser     *browser;
-       GtkActionGroup *actions;
-} BrowserData;
-
-
-static void
-browser_data_free (BrowserData *data)
-{
-       g_free (data);
-}
+static const GthMenuEntry action_entries[] = {
+       { N_("Import Embedded Metadata"), "win.import-embedded-metadata" }
+};
 
 
 void
 comments__gth_browser_construct_cb (GthBrowser *browser)
 {
-       BrowserData *data;
-       GError      *error = NULL;
-
        g_return_if_fail (GTH_IS_BROWSER (browser));
 
-       data = g_new0 (BrowserData, 1);
-       data->browser = browser;
-
-       data->actions = gtk_action_group_new ("Comments Actions");
-       gtk_action_group_set_translation_domain (data->actions, NULL);
-       _gtk_action_group_add_actions_with_flags (data->actions,
-                                                 comments_action_entries,
-                                                 G_N_ELEMENTS (comments_action_entries),
-                                                 browser);
-       gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), data->actions, 0);
-
-       if (gth_main_extension_is_active ("list_tools") && ! gtk_ui_manager_add_ui_from_string 
(gth_browser_get_ui_manager (browser), fixed_ui_file_tools_info, -1, &error)) {
-               g_message ("building menus failed: %s", error->message);
-               g_error_free (error);
+       if (gth_main_extension_is_active ("list_tools")) {
+               g_action_map_add_action_entries (G_ACTION_MAP (browser),
+                                                actions,
+                                                G_N_ELEMENTS (actions),
+                                                browser);
+               gth_menu_manager_append_entries (gth_browser_get_menu_manager (browser, 
GTH_BROWSER_MENU_MANAGER_TOOLS2),
+                                                action_entries,
+                                                G_N_ELEMENTS (action_entries));
        }
-
-       g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify) 
browser_data_free);
 }
diff --git a/extensions/convert_format/actions.c b/extensions/convert_format/actions.c
index 7e6e95b..346607b 100644
--- a/extensions/convert_format/actions.c
+++ b/extensions/convert_format/actions.c
@@ -21,17 +21,18 @@
 
 
 #include <config.h>
-#include <glib/gi18n.h>
 #include <gthumb.h>
 #include "dlg-convert-format.h"
 
 
 void
-gth_browser_activate_action_tool_convert_format (GtkAction  *action,
-                                                GthBrowser *browser)
+gth_browser_activate_convert_format (GSimpleAction     *action,
+                                    GVariant           *parameter,
+                                    gpointer            user_data)
 {
-       GList *items;
-       GList *file_list;
+       GthBrowser      *browser = GTH_BROWSER (user_data);
+       GList           *items;
+       GList           *file_list;
 
        items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view 
(browser)));
        file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
diff --git a/extensions/convert_format/actions.h b/extensions/convert_format/actions.h
index 8e4b6d5..8e997f6 100644
--- a/extensions/convert_format/actions.h
+++ b/extensions/convert_format/actions.h
@@ -22,10 +22,8 @@
 #ifndef ACTIONS_H
 #define ACTIONS_H
 
-#include <gtk/gtk.h>
+#include <gthumb.h>
 
-#define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
-
-DEFINE_ACTION(gth_browser_activate_action_tool_convert_format)
+DEF_ACTION_CALLBACK (gth_browser_activate_convert_format)
 
 #endif /* ACTIONS_H */
diff --git a/extensions/convert_format/callbacks.c b/extensions/convert_format/callbacks.c
index 869d79f..5c54fd3 100644
--- a/extensions/convert_format/callbacks.c
+++ b/extensions/convert_format/callbacks.c
@@ -24,83 +24,42 @@
 #include <glib/gi18n.h>
 #include <glib-object.h>
 #include <gthumb.h>
+#include <extensions/list_tools/list-tools.h>
 #include "actions.h"
 
 
-#define BROWSER_DATA_KEY "convert-format-browser-data"
-
-
-static const char *fixed_ui_info =
-"<ui>"
-"  <popup name='ListToolsPopup'>"
-"    <placeholder name='Tools'>"
-"      <menuitem name='ConvertFormat' action='Tool_ConvertFormat'/>"
-"    </placeholder>"
-"  </popup>"
-"</ui>";
-
-
-static GtkActionEntry action_entries[] = {
-       { "Tool_ConvertFormat", GTK_STOCK_CONVERT,
-         N_("Convert Format..."), NULL,
-         N_("Convert image format"),
-         G_CALLBACK (gth_browser_activate_action_tool_convert_format) },
+static const GActionEntry actions[] = {
+       { "convert-format", gth_browser_activate_convert_format }
 };
 
 
-typedef struct {
-       GtkActionGroup *action_group;
-} BrowserData;
-
-
-static void
-browser_data_free (BrowserData *data)
-{
-       g_free (data);
-}
+static const GthMenuEntry action_entries[] = {
+       { N_("Convert Format..."), "win.convert-format" }
+};
 
 
 void
 cf__gth_browser_construct_cb (GthBrowser *browser)
 {
-       BrowserData *data;
-       GError      *error = NULL;
-
        g_return_if_fail (GTH_IS_BROWSER (browser));
 
-       data = g_new0 (BrowserData, 1);
-
-       data->action_group = gtk_action_group_new ("Convert Format Actions");
-       gtk_action_group_set_translation_domain (data->action_group, NULL);
-       gtk_action_group_add_actions (data->action_group,
-                                     action_entries,
-                                     G_N_ELEMENTS (action_entries),
-                                     browser);
-       gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), data->action_group, 0);
-
-       if (! gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (browser), fixed_ui_info, -1, 
&error)) {
-               g_message ("building menus failed: %s", error->message);
-               g_clear_error (&error);
-       }
-
-       g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify) 
browser_data_free);
+       g_action_map_add_action_entries (G_ACTION_MAP (browser),
+                                        actions,
+                                        G_N_ELEMENTS (actions),
+                                        browser);
+       gth_menu_manager_append_entries (gth_browser_get_menu_manager (browser, 
GTH_BROWSER_MENU_MANAGER_TOOLS2),
+                                        action_entries,
+                                        G_N_ELEMENTS (action_entries));
 }
 
 
 void
 cf__gth_browser_update_sensitivity_cb (GthBrowser *browser)
 {
-       BrowserData *data;
-       GtkAction   *action;
-       int          n_selected;
-       gboolean     sensitive;
-
-       data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
-       g_return_if_fail (data != NULL);
+       int      n_selected;
+       gboolean sensitive;
 
        n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view 
(browser)));
        sensitive = n_selected > 0;
-
-       action = gtk_action_group_get_action (data->action_group, "Tool_ConvertFormat");
-       g_object_set (action, "sensitive", sensitive, NULL);
+       gth_window_enable_action (GTH_WINDOW (browser), "convert-format", sensitive);
 }
diff --git a/extensions/edit_metadata/callbacks.c b/extensions/edit_metadata/callbacks.c
index dcc557d..4ba293c 100644
--- a/extensions/edit_metadata/callbacks.c
+++ b/extensions/edit_metadata/callbacks.c
@@ -25,6 +25,7 @@
 #include <glib-object.h>
 #include <gdk/gdkkeysyms.h>
 #include <gthumb.h>
+#include <extensions/list_tools/list-tools.h>
 #include "actions.h"
 #include "gth-tag-task.h"
 
@@ -32,6 +33,18 @@
 #define BROWSER_DATA_KEY "edit-metadata-data"
 
 
+static const GActionEntry actions[] = {
+       { "edit-metadata", gth_browser_activate_edit_metadata },
+       { "edit-tags", gth_browser_activate_edit_tags },
+       { "delete-metadata", gth_browser_activate_delete_metadata },
+};
+
+
+static const GthMenuEntry action_entries[] = {
+       { N_("Delete Metadata"), "win.delete-metadata" }
+};
+
+
 static const char *fixed_ui_info =
 "<ui>"
 "  <menubar name='MenuBar'>"
@@ -61,16 +74,6 @@ static const char *fixed_ui_info =
 "</ui>";
 
 
-static const char *fixed_ui_file_tools_info =
-"<ui>"
-"  <popup name='ListToolsPopup'>"
-"    <placeholder name='Tools_2'>"
-"      <menuitem name='DeleteMetadata' action='Tool_DeleteMetadata'/>"
-"    </placeholder>"
-"  </popup>"
-"</ui>";
-
-
 static GthActionEntryExt edit_metadata_action_entries[] = {
        { "Edit_QuickTag", "tag", N_("T_ags") },
 
@@ -84,20 +87,7 @@ static GthActionEntryExt edit_metadata_action_entries[] = {
          N_("Tags"), NULL,
          N_("Set the tags of the selected files"),
          GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_edit_tags) },
-
-       { "Tool_DeleteMetadata", NULL,
-         N_("Delete Metadata"), NULL,
-         N_("Delete the comment and the embedded metadata of the selected files"),
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_tool_delete_metadata) }
-};
-
-
-static const GActionEntry actions[] = {
-       { "edit-metadata", gth_browser_activate_edit_metadata },
-       { "edit-tags", gth_browser_activate_edit_tags },
-       { "delete-metadata", gth_browser_activate_delete_metadata },
+         G_CALLBACK (gth_browser_activate_action_edit_tags) }
 };
 
 
@@ -123,6 +113,16 @@ edit_metadata__gth_browser_construct_cb (GthBrowser *browser)
 
        g_return_if_fail (GTH_IS_BROWSER (browser));
 
+       if (gth_main_extension_is_active ("list_tools")) {
+               g_action_map_add_action_entries (G_ACTION_MAP (browser),
+                                                actions,
+                                                G_N_ELEMENTS (actions),
+                                                browser);
+               gth_menu_manager_append_entries (gth_browser_get_menu_manager (browser, 
GTH_BROWSER_MENU_MANAGER_TOOLS2),
+                                                action_entries,
+                                                G_N_ELEMENTS (action_entries));
+       }
+
        data = g_new0 (BrowserData, 1);
        data->browser = browser;
 
@@ -139,11 +139,6 @@ edit_metadata__gth_browser_construct_cb (GthBrowser *browser)
                g_error_free (error);
        }
 
-       if (gth_main_extension_is_active ("list_tools") && ! gtk_ui_manager_add_ui_from_string 
(gth_browser_get_ui_manager (browser), fixed_ui_file_tools_info, -1, &error)) {
-               g_message ("building menus failed: %s", error->message);
-               g_error_free (error);
-       }
-
        g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify) 
browser_data_free);
 
        g_action_map_add_action_entries (G_ACTION_MAP (browser),
@@ -192,7 +187,6 @@ edit_metadata__gth_browser_update_sensitivity_cb (GthBrowser *browser)
 
        sensitive = (n_selected > 0);
        g_object_set (gtk_action_group_get_action (data->actions, "Edit_Metadata"), "sensitive", sensitive, 
NULL);
-       g_object_set (gtk_action_group_get_action (data->actions, "Tool_DeleteMetadata"), "sensitive", 
sensitive, NULL);
 
        g_object_set (g_action_map_lookup_action (G_ACTION_MAP (data->browser), "edit-metadata"), "enabled", 
sensitive, NULL);
        g_object_set (g_action_map_lookup_action (G_ACTION_MAP (data->browser), "edit-tags"), "enabled", 
sensitive, NULL);
diff --git a/extensions/image_rotation/callbacks.c b/extensions/image_rotation/callbacks.c
index e0b36fa..b80f850 100644
--- a/extensions/image_rotation/callbacks.c
+++ b/extensions/image_rotation/callbacks.c
@@ -68,7 +68,6 @@ ir__gth_browser_update_sensitivity_cb (GthBrowser *browser)
 
        n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view 
(browser)));
        sensitive = n_selected > 0;
-
        gth_window_enable_action (GTH_WINDOW (browser), "rotate-right", sensitive);
        gth_window_enable_action (GTH_WINDOW (browser), "rotate-left", sensitive);
        gth_window_enable_action (GTH_WINDOW (browser), "apply-orientation", sensitive);
diff --git a/extensions/list_tools/actions.c b/extensions/list_tools/actions.c
index 1971127..ceff9dc 100644
--- a/extensions/list_tools/actions.c
+++ b/extensions/list_tools/actions.c
@@ -30,14 +30,6 @@
 
 
 void
-gth_browser_action_edit_scripts (GtkAction  *action,
-                                GthBrowser *browser)
-{
-       dlg_personalize_scripts (browser);
-}
-
-
-void
 gth_browser_exec_script (GthBrowser *browser,
                         GthScript  *script)
 {
diff --git a/extensions/list_tools/actions.h b/extensions/list_tools/actions.h
index 408d715..34bff0c 100644
--- a/extensions/list_tools/actions.h
+++ b/extensions/list_tools/actions.h
@@ -26,12 +26,9 @@
 #include <gthumb.h>
 #include "gth-script.h"
 
-#define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
-
-DEFINE_ACTION(gth_browser_action_edit_scripts)
 DEF_ACTION_CALLBACK (gth_browser_activate_exec_script)
 DEF_ACTION_CALLBACK (gth_browser_activate_personalize_tools)
 
-void   gth_browser_exec_script (GthBrowser *browser, GthScript  *script);
+void gth_browser_exec_script (GthBrowser *browser, GthScript  *script);
 
 #endif /* ACTIONS_H */
diff --git a/extensions/list_tools/callbacks.c b/extensions/list_tools/callbacks.c
index 68cd546..3e24db3 100644
--- a/extensions/list_tools/callbacks.c
+++ b/extensions/list_tools/callbacks.c
@@ -40,58 +40,11 @@ static const GActionEntry actions[] = {
 };
 
 
-static const char *fixed_ui_info =
-"<ui>"
-"  <toolbar name='ToolBar'>"
-"    <placeholder name='Edit_Actions_2'>"
-"      <toolitem action='ListTools'/>"
-"    </placeholder>"
-"  </toolbar>"
-"  <toolbar name='ViewerToolBar'>"
-"    <placeholder name='Edit_Actions_2'>"
-"      <toolitem action='ListTools'/>"
-"    </placeholder>"
-"  </toolbar>"
-/*
-"  <popup name='FileListPopup'>"
-"    <placeholder name='Open_Actions'>"
-"      <menu name='ExecWith' action='ExecWithMenu'>"
-"        <placeholder name='Tools'/>"
-"        <placeholder name='Scripts'/>"
-"        <separator name='ScriptsListSeparator'/>"
-"        <menuitem name='EditScripts' action='ListTools_EditScripts'/>"
-"      </menu>"
-"    </placeholder>"
-"  </popup>"
-*/
-"  <popup name='ListToolsPopup'>"
-"    <placeholder name='Tools'/>"
-"    <separator/>"
-"    <placeholder name='Tools_2'/>"
-"    <separator name='ToolsSeparator'/>"
-"    <placeholder name='Scripts'/>"
-"    <separator name='ScriptsListSeparator'/>"
-"    <menuitem name='EditScripts' action='ListTools_EditScripts'/>"
-"  </popup>"
-"</ui>";
-
-
-static GtkActionEntry action_entries[] = {
-       /*{ "ExecWithMenu", GTK_STOCK_EXECUTE, N_("_Tools") },*/
-
-       { "ListTools_EditScripts", GTK_STOCK_EDIT,
-         N_("Personalize..."), NULL,
-         NULL,
-         G_CALLBACK (gth_browser_action_edit_scripts) }
-};
-
-
 typedef struct {
-       GthBrowser     *browser;
-       GtkActionGroup *action_group;
-       gulong          scripts_changed_id;
-       gboolean        menu_initialized;
-       guint           menu_merge_id;
+       GthBrowser *browser;
+       gulong      scripts_changed_id;
+       gboolean    menu_initialized;
+       guint       menu_merge_id;
 } BrowserData;
 
 
@@ -104,33 +57,12 @@ 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)
+list_tools__gth_browser_update_sensitivity_cb (GthBrowser *browser)
 {
        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);
@@ -138,69 +70,16 @@ _update_sensitivity (GthBrowser *browser,
        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
-activate_script_menu_item (GtkMenuItem *menuitem,
-                          gpointer     user_data)
-{
-       BrowserData *data = user_data;
-       GthScript   *script;
-
-       script = gth_script_file_get_script (gth_script_file_get (), g_object_get_data (G_OBJECT (menuitem), 
"script_id"));
-       if (script != NULL)
-               gth_browser_exec_script (data->browser, script);
+       gth_window_enable_action (GTH_WINDOW (browser), "exec-script", sensitive);
 }
 
 
 static void
-_update_scripts_menu (BrowserData *data,
-                     const char  *prefix)
+update_scripts_menu (BrowserData *data)
 {
-       GtkWidget       *separator1;
-       GtkWidget       *separator2;
-       GtkWidget       *menu;
        GthMenuManager  *menu_manager;
        GList           *script_list;
        GList           *scan;
-       int              pos;
-       gboolean         script_present = FALSE;
-
-       separator1 = get_widget_with_prefix (data, prefix, "/ToolsSeparator");
-       separator2 = get_widget_with_prefix (data, prefix, "/Scripts");
-       menu = gtk_widget_get_parent (separator1);
-       _gtk_container_remove_children (GTK_CONTAINER (menu), separator1, separator2);
 
        menu_manager = gth_browser_get_menu_manager (data->browser, GTH_BROWSER_MENU_MANAGER_TOOLS3);
        if (data->menu_merge_id != 0)
@@ -208,29 +87,13 @@ _update_scripts_menu (BrowserData *data,
        data->menu_merge_id = gth_menu_manager_new_merge_id (menu_manager);
 
        script_list = gth_script_file_get_scripts (gth_script_file_get ());
-       pos = _gtk_container_get_pos (GTK_CONTAINER (menu), separator2);
        for (scan = script_list; scan; scan = scan->next) {
                GthScript *script = scan->data;
-               GtkWidget *menu_item;
                char      *detailed_action;
 
                if (! gth_script_is_visible (script))
                        continue;
 
-               menu_item = gtk_image_menu_item_new_with_label (gth_script_get_display_name (script));
-               /*gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), gtk_image_new_from_stock 
(GTK_STOCK_EXECUTE, GTK_ICON_SIZE_MENU));*/
-               gtk_widget_show (menu_item);
-               gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menu_item, pos++);
-
-               g_object_set_data_full (G_OBJECT (menu_item),
-                                       "script_id",
-                                       g_strdup (gth_script_get_id (script)),
-                                       (GDestroyNotify) g_free);
-               g_signal_connect (menu_item,
-                                 "activate",
-                                 G_CALLBACK (activate_script_menu_item),
-                                 data);
-
                detailed_action = g_strdup_printf ("win.exec-script('%s')", gth_script_get_id (script));
                gth_menu_manager_append_entry (menu_manager,
                                               data->menu_merge_id,
@@ -238,17 +101,10 @@ _update_scripts_menu (BrowserData *data,
                                               detailed_action,
                                               NULL,
                                               NULL);
-               script_present = TRUE;
 
                g_free (detailed_action);
        }
 
-       separator1 = get_widget_with_prefix (data, prefix, "/ScriptsListSeparator");
-       if (script_present)
-               gtk_widget_show (separator1);
-       else
-               gtk_widget_hide (separator1);
-
        list_tools__gth_browser_update_sensitivity_cb (data->browser);
 
        _g_object_list_unref (script_list);
@@ -256,14 +112,6 @@ _update_scripts_menu (BrowserData *data,
 
 
 static void
-update_scripts_menu (BrowserData *data)
-{
-       _update_scripts_menu (data, "/ListToolsPopup");
-       /*_update_scripts_menu (data, "/FileListPopup/Open_Actions/ExecWith");*/
-}
-
-
-static void
 scripts_changed_cb (GthScriptFile *script_file,
                     BrowserData   *data)
 {
@@ -272,17 +120,16 @@ scripts_changed_cb (GthScriptFile *script_file,
 
 
 static void
-list_tools_show_menu_func (GtkAction *action,
-                          gpointer   user_data)
+tools_menu_button_toggled_cb (GtkToggleButton *togglebutton,
+                             gpointer         user_data)
 {
        BrowserData *data = user_data;
-       GtkWidget   *menu;
+
+       if (! gtk_toggle_button_get_active (togglebutton))
+               return;
 
        if (! data->menu_initialized) {
                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);
 
                data->scripts_changed_id = g_signal_connect (gth_script_file_get (),
@@ -295,103 +142,52 @@ list_tools_show_menu_func (GtkAction *action,
 }
 
 
-static void
-tools_menu_button_toggled_cb (GtkToggleButton *togglebutton,
-                             gpointer         user_data)
-{
-       BrowserData *data = user_data;
-
-       if (! gtk_toggle_button_get_active (togglebutton))
-               return;
-
-       if (! data->menu_initialized) {
-               data->menu_initialized = TRUE;
-               update_scripts_menu (data);
-       }
-}
-
-
 void
 list_tools__gth_browser_construct_cb (GthBrowser *browser)
 {
        BrowserData *data;
-       GtkAction   *action;
-       GError      *error = NULL;
+       GtkBuilder  *builder;
+       GMenuModel  *menu;
+       GtkWidget   *button;
 
        g_return_if_fail (GTH_IS_BROWSER (browser));
 
+       data = g_new0 (BrowserData, 1);
+       data->browser = browser;
+       g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify) 
browser_data_free);
+
        g_action_map_add_action_entries (G_ACTION_MAP (browser),
                                         actions,
                                         G_N_ELEMENTS (actions),
                                         browser);
 
-       data = g_new0 (BrowserData, 1);
-       data->browser = browser;
-       data->action_group = gtk_action_group_new ("List Tools Manager Actions");
-       gtk_action_group_set_translation_domain (data->action_group, NULL);
-       gtk_action_group_add_actions (data->action_group,
-                                     action_entries,
-                                     G_N_ELEMENTS (action_entries),
-                                     browser);
-
-       /* tools menu action */
-
-       action = g_object_new (GTH_TYPE_TOGGLE_MENU_ACTION,
-                              "name", "ListTools",
-                              "stock-id", GTK_STOCK_EXECUTE,
-                              "label", _("Tools"),
-                              "tooltip",  _("Batch tools for multiple files"),
-                              "is-important", TRUE,
-                              NULL);
-       gth_toggle_menu_action_set_show_menu_func (GTH_TOGGLE_MENU_ACTION (action),
-                                                  list_tools_show_menu_func,
-                                                  data,
-                                                  NULL);
-       gtk_action_group_add_action (data->action_group, action);
-       g_object_unref (action);
-
-       gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), data->action_group, 0);
-
-       if (! gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (browser), fixed_ui_info, -1, 
&error)) {
-               g_message ("building menus failed: %s", error->message);
-               g_clear_error (&error);
-       }
-
-       g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify) 
browser_data_free);
-
-       {
-               GtkWidget  *button;
-               GtkBuilder *builder;
-               GMenuModel *menu;
-
-               builder = gtk_builder_new_from_resource 
("/org/gnome/gThumb/list_tools/data/ui/tools-menu.ui");
-               gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_TOOLS1, G_MENU 
(gtk_builder_get_object (builder, "tools1")));
-               gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_TOOLS2, G_MENU 
(gtk_builder_get_object (builder, "tools2")));
-               gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_TOOLS3, G_MENU 
(gtk_builder_get_object (builder, "tools3")));
-               menu = G_MENU_MODEL (gtk_builder_get_object (builder, "tools-menu"));
-
-               /* browser tools */
-
-               button = _gtk_menu_button_new_for_header_bar ();
-               g_signal_connect (button, "toggled", G_CALLBACK (tools_menu_button_toggled_cb), data);
-               gtk_widget_set_tooltip_text (button, _("Tools"));
-               gtk_container_add (GTK_CONTAINER (button), gtk_image_new_from_icon_name 
("system-run-symbolic", GTK_ICON_SIZE_MENU));
-               gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), menu);
-               gtk_widget_show_all (button);
-               gtk_box_pack_start (GTK_BOX (gth_browser_get_headerbar_section (browser, 
GTH_BROWSER_HEADER_SECTION_BROWSER_TOOLS)), button, FALSE, FALSE, 0);
-
-               /* viewer tools */
-
-               button = _gtk_menu_button_new_for_header_bar ();
-               g_signal_connect (button, "toggled", G_CALLBACK (tools_menu_button_toggled_cb), data);
-               gtk_widget_set_tooltip_text (button, _("Tools"));
-               gtk_container_add (GTK_CONTAINER (button), gtk_image_new_from_icon_name 
("system-run-symbolic", GTK_ICON_SIZE_MENU));
-               gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), menu);
-               gtk_widget_show_all (button);
-               gtk_box_pack_start (GTK_BOX (gth_browser_get_headerbar_section (browser, 
GTH_BROWSER_HEADER_SECTION_VIEWER_TOOLS)), button, FALSE, FALSE, 0);
-
-               g_object_unref (builder);
-       }
+       builder = gtk_builder_new_from_resource ("/org/gnome/gThumb/list_tools/data/ui/tools-menu.ui");
+       gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_TOOLS1, G_MENU 
(gtk_builder_get_object (builder, "tools1")));
+       gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_TOOLS2, G_MENU 
(gtk_builder_get_object (builder, "tools2")));
+       gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_TOOLS3, G_MENU 
(gtk_builder_get_object (builder, "tools3")));
+       menu = G_MENU_MODEL (gtk_builder_get_object (builder, "tools-menu"));
+
+       /* browser tools */
+
+       button = _gtk_menu_button_new_for_header_bar ();
+       g_signal_connect (button, "toggled", G_CALLBACK (tools_menu_button_toggled_cb), data);
+       gtk_widget_set_tooltip_text (button, _("Tools"));
+       gtk_container_add (GTK_CONTAINER (button), gtk_image_new_from_icon_name ("system-run-symbolic", 
GTK_ICON_SIZE_MENU));
+       gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), menu);
+       gtk_widget_show_all (button);
+       gtk_box_pack_start (GTK_BOX (gth_browser_get_headerbar_section (browser, 
GTH_BROWSER_HEADER_SECTION_BROWSER_TOOLS)), button, FALSE, FALSE, 0);
+
+       /* viewer tools */
+
+       button = _gtk_menu_button_new_for_header_bar ();
+       g_signal_connect (button, "toggled", G_CALLBACK (tools_menu_button_toggled_cb), data);
+       gtk_widget_set_tooltip_text (button, _("Tools"));
+       gtk_container_add (GTK_CONTAINER (button), gtk_image_new_from_icon_name ("system-run-symbolic", 
GTK_ICON_SIZE_MENU));
+       gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), menu);
+       gtk_widget_show_all (button);
+       gtk_box_pack_start (GTK_BOX (gth_browser_get_headerbar_section (browser, 
GTH_BROWSER_HEADER_SECTION_VIEWER_TOOLS)), button, FALSE, FALSE, 0);
+
+       g_object_unref (builder);
 }
 
 
diff --git a/extensions/resize_images/actions.c b/extensions/resize_images/actions.c
index abd4262..25d7e41 100644
--- a/extensions/resize_images/actions.c
+++ b/extensions/resize_images/actions.c
@@ -27,11 +27,13 @@
 
 
 void
-gth_browser_activate_action_tool_resize_images (GtkAction  *action,
-                                               GthBrowser *browser)
+gth_browser_activate_resize_images (GSimpleAction      *action,
+                                   GVariant            *parameter,
+                                   gpointer             user_data)
 {
-       GList *items;
-       GList *file_list;
+       GthBrowser      *browser = GTH_BROWSER (user_data);
+       GList           *items;
+       GList           *file_list;
 
        items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view 
(browser)));
        file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
diff --git a/extensions/resize_images/actions.h b/extensions/resize_images/actions.h
index 8f7647b..f2dfd9d 100644
--- a/extensions/resize_images/actions.h
+++ b/extensions/resize_images/actions.h
@@ -22,10 +22,8 @@
 #ifndef ACTIONS_H
 #define ACTIONS_H
 
-#include <gtk/gtk.h>
+#include <gthumb.h>
 
-#define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
-
-DEFINE_ACTION(gth_browser_activate_action_tool_resize_images)
+DEF_ACTION_CALLBACK (gth_browser_activate_resize_images)
 
 #endif /* ACTIONS_H */
diff --git a/extensions/resize_images/callbacks.c b/extensions/resize_images/callbacks.c
index d774788..0bd022c 100644
--- a/extensions/resize_images/callbacks.c
+++ b/extensions/resize_images/callbacks.c
@@ -24,83 +24,42 @@
 #include <glib/gi18n.h>
 #include <glib-object.h>
 #include <gthumb.h>
+#include <extensions/list_tools/list-tools.h>
 #include "actions.h"
 
 
-#define BROWSER_DATA_KEY "resize-images-browser-data"
-
-
-static const char *fixed_ui_info =
-"<ui>"
-"  <popup name='ListToolsPopup'>"
-"    <placeholder name='Tools'>"
-"      <menuitem name='ResizeImages' action='Tool_ResizeImages'/>"
-"    </placeholder>"
-"  </popup>"
-"</ui>";
-
-
-static GtkActionEntry action_entries[] = {
-       { "Tool_ResizeImages", NULL,
-         N_("Resize Images..."), NULL,
-         N_("Resize the selected images"),
-         G_CALLBACK (gth_browser_activate_action_tool_resize_images) },
+static const GActionEntry actions[] = {
+       { "resize-images", gth_browser_activate_resize_images }
 };
 
 
-typedef struct {
-       GtkActionGroup *action_group;
-} BrowserData;
-
-
-static void
-browser_data_free (BrowserData *data)
-{
-       g_free (data);
-}
+static const GthMenuEntry action_entries[] = {
+       { N_("Resize Images..."), "win.resize-images" }
+};
 
 
 void
 ri__gth_browser_construct_cb (GthBrowser *browser)
 {
-       BrowserData *data;
-       GError      *error = NULL;
-
        g_return_if_fail (GTH_IS_BROWSER (browser));
 
-       data = g_new0 (BrowserData, 1);
-
-       data->action_group = gtk_action_group_new ("Resize Images Actions");
-       gtk_action_group_set_translation_domain (data->action_group, NULL);
-       gtk_action_group_add_actions (data->action_group,
-                                     action_entries,
-                                     G_N_ELEMENTS (action_entries),
-                                     browser);
-       gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), data->action_group, 0);
-
-       if (! gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (browser), fixed_ui_info, -1, 
&error)) {
-               g_message ("building menus failed: %s", error->message);
-               g_clear_error (&error);
-       }
-
-       g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify) 
browser_data_free);
+       g_action_map_add_action_entries (G_ACTION_MAP (browser),
+                                        actions,
+                                        G_N_ELEMENTS (actions),
+                                        browser);
+       gth_menu_manager_append_entries (gth_browser_get_menu_manager (browser, 
GTH_BROWSER_MENU_MANAGER_TOOLS2),
+                                        action_entries,
+                                        G_N_ELEMENTS (action_entries));
 }
 
 
 void
 ri__gth_browser_update_sensitivity_cb (GthBrowser *browser)
 {
-       BrowserData *data;
-       GtkAction   *action;
-       int          n_selected;
-       gboolean     sensitive;
-
-       data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
-       g_return_if_fail (data != NULL);
+       int      n_selected;
+       gboolean sensitive;
 
        n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view 
(browser)));
        sensitive = n_selected > 0;
-
-       action = gtk_action_group_get_action (data->action_group, "Tool_ResizeImages");
-       g_object_set (action, "sensitive", sensitive, NULL);
+       gth_window_enable_action (GTH_WINDOW (browser), "resize-images", sensitive);
 }



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