[gthumb] converted other actions, added an history menu button



commit 352e5e030a25e4a5e6c3f13bc4147b26f60e9757
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Fri Oct 18 18:19:16 2013 +0200

    converted other actions, added an history menu button

 gthumb/gth-browser-actions-callbacks.c |  146 ++++++++++++-------
 gthumb/gth-browser-actions-callbacks.h |   16 ++-
 gthumb/gth-browser-actions-entries.h   |   37 ++----
 gthumb/gth-browser-ui.h                |   12 --
 gthumb/gth-browser.c                   |  253 ++++++++++++++------------------
 gthumb/gth-browser.h                   |    2 +
 6 files changed, 223 insertions(+), 243 deletions(-)
---
diff --git a/gthumb/gth-browser-actions-callbacks.c b/gthumb/gth-browser-actions-callbacks.c
index 2b49afb..a43a6d0 100644
--- a/gthumb/gth-browser-actions-callbacks.c
+++ b/gthumb/gth-browser-actions-callbacks.c
@@ -117,22 +117,6 @@ gth_browser_activate_action_edit_preferences (GtkAction  *action,
 
 
 void
-gth_browser_activate_action_go_back (GtkAction  *action,
-                                    GthBrowser *browser)
-{
-       gth_browser_go_back (browser, 1);
-}
-
-
-void
-gth_browser_activate_action_go_forward (GtkAction  *action,
-                                       GthBrowser *browser)
-{
-       gth_browser_go_forward (browser, 1);
-}
-
-
-void
 gth_browser_activate_action_go_up (GtkAction  *action,
                                   GthBrowser *browser)
 {
@@ -336,20 +320,6 @@ gth_browser_activate_action_folder_open_in_new_window (GtkAction  *action,
 
 
 void
-gth_browser_activate_action_browser_mode (GtkAction  *action,
-                                         GthBrowser *browser)
-{
-       GtkWidget *viewer_sidebar;
-
-       viewer_sidebar = gth_browser_get_viewer_sidebar (browser);
-       if (gth_sidebar_tool_is_active (GTH_SIDEBAR (viewer_sidebar)))
-               gth_sidebar_deactivate_tool (GTH_SIDEBAR (viewer_sidebar));
-       else
-               gth_window_set_current_page (GTH_WINDOW (browser), GTH_BROWSER_PAGE_BROWSER);
-}
-
-
-void
 gth_browser_activate_action_viewer_properties (GtkAction  *action,
                                                GthBrowser *browser)
 {
@@ -473,34 +443,84 @@ gth_browser_activate_action_help_shortcuts (GtkAction *action,
 
 
 void
-gth_browser_activate_save (GSimpleAction *action,
-                          GVariant      *parameter,
-                          gpointer       user_data)
+gth_browser_activate_browser_mode (GSimpleAction *action,
+                                  GVariant      *parameter,
+                                  gpointer       user_data)
 {
        GthBrowser *browser = user_data;
-       GtkWidget  *viewer_page;
+       GtkWidget  *viewer_sidebar;
 
-       viewer_page = gth_browser_get_viewer_page (browser);
-       if (viewer_page == NULL)
-               return;
+       viewer_sidebar = gth_browser_get_viewer_sidebar (browser);
+       if (gth_sidebar_tool_is_active (GTH_SIDEBAR (viewer_sidebar)))
+               gth_sidebar_deactivate_tool (GTH_SIDEBAR (viewer_sidebar));
+       else
+               gth_window_set_current_page (GTH_WINDOW (browser), GTH_BROWSER_PAGE_BROWSER);
+}
 
-       gth_viewer_page_save (GTH_VIEWER_PAGE (viewer_page), NULL, NULL, browser);
+
+void
+gth_browser_activate_clear_history (GSimpleAction *action,
+                                   GVariant      *parameter,
+                                   gpointer       user_data)
+{
+       gth_browser_clear_history (GTH_BROWSER (user_data));
 }
 
 
 void
-gth_browser_activate_save_as (GSimpleAction *action,
+gth_browser_activate_close (GSimpleAction *action,
+                           GVariant      *parameter,
+                           gpointer       user_data)
+{
+       GthBrowser *browser = user_data;
+
+       gth_window_close (GTH_WINDOW (browser));
+}
+
+
+void
+gth_browser_activate_fullscreen (GSimpleAction *action,
+                                GVariant      *parameter,
+                                gpointer       user_data)
+{
+       gth_browser_fullscreen (GTH_BROWSER (user_data));
+}
+
+
+void
+gth_browser_activate_go_back (GSimpleAction *action,
                              GVariant      *parameter,
                              gpointer       user_data)
 {
-       GthBrowser *browser = user_data;
-       GtkWidget  *viewer_page;
+       gth_browser_go_back (GTH_BROWSER (user_data), 1);
+}
 
-       viewer_page = gth_browser_get_viewer_page (browser);
-       if (viewer_page == NULL)
-               return;
 
-       gth_viewer_page_save_as (GTH_VIEWER_PAGE (viewer_page), NULL, NULL);
+void
+gth_browser_activate_go_forward (GSimpleAction *action,
+                                GVariant      *parameter,
+                                gpointer       user_data)
+{
+       gth_browser_go_forward (GTH_BROWSER (user_data), 1);
+}
+
+
+void
+gth_browser_activate_go_to_history_pos (GSimpleAction *action,
+                                       GVariant      *parameter,
+                                       gpointer       user_data)
+{
+       gth_browser_go_to_history_pos (GTH_BROWSER (user_data), atoi (g_variant_get_string (parameter, 
NULL)));
+}
+
+
+void
+gth_browser_activate_quit (GSimpleAction *action,
+                          GVariant      *parameter,
+                          gpointer       user_data)
+{
+       /* FIXME */
+
 }
 
 
@@ -519,21 +539,43 @@ gth_browser_activate_revert_to_saved (GSimpleAction *action,
        gth_viewer_page_revert (GTH_VIEWER_PAGE (viewer_page));
 }
 
+
 void
-gth_browser_activate_close (GSimpleAction *action,
-                           GVariant      *parameter,
-                           gpointer       user_data)
+gth_browser_activate_save (GSimpleAction *action,
+                          GVariant      *parameter,
+                          gpointer       user_data)
 {
        GthBrowser *browser = user_data;
+       GtkWidget  *viewer_page;
 
-       gth_window_close (GTH_WINDOW (browser));
+       viewer_page = gth_browser_get_viewer_page (browser);
+       if (viewer_page == NULL)
+               return;
+
+       gth_viewer_page_save (GTH_VIEWER_PAGE (viewer_page), NULL, NULL, browser);
 }
 
 
 void
-gth_browser_activate_quit (GSimpleAction *action,
-                          GVariant      *parameter,
-                          gpointer       user_data)
+gth_browser_activate_save_as (GSimpleAction *action,
+                             GVariant      *parameter,
+                             gpointer       user_data)
 {
+       GthBrowser *browser = user_data;
+       GtkWidget  *viewer_page;
+
+       viewer_page = gth_browser_get_viewer_page (browser);
+       if (viewer_page == NULL)
+               return;
+
+       gth_viewer_page_save_as (GTH_VIEWER_PAGE (viewer_page), NULL, NULL);
+}
 
+
+void
+gth_browser_activate_unfullscreen (GSimpleAction *action,
+                                  GVariant      *parameter,
+                                  gpointer       user_data)
+{
+       gth_browser_unfullscreen (GTH_BROWSER (user_data));
 }
diff --git a/gthumb/gth-browser-actions-callbacks.h b/gthumb/gth-browser-actions-callbacks.h
index 948b754..93e415d 100644
--- a/gthumb/gth-browser-actions-callbacks.h
+++ b/gthumb/gth-browser-actions-callbacks.h
@@ -28,7 +28,6 @@
 
 DEFINE_ACTION(gth_browser_activate_action_bookmarks_add)
 DEFINE_ACTION(gth_browser_activate_action_bookmarks_edit)
-DEFINE_ACTION(gth_browser_activate_action_browser_mode)
 DEFINE_ACTION(gth_browser_activate_action_edit_comment)
 DEFINE_ACTION(gth_browser_activate_action_edit_preferences)
 DEFINE_ACTION(gth_browser_activate_action_edit_select_all)
@@ -40,8 +39,6 @@ DEFINE_ACTION(gth_browser_activate_action_file_save_as)
 DEFINE_ACTION(gth_browser_activate_action_folder_open)
 DEFINE_ACTION(gth_browser_activate_action_folder_open_in_new_window)
 DEFINE_ACTION(gth_browser_activate_action_folder_open_in_file_manager)
-DEFINE_ACTION(gth_browser_activate_action_go_back)
-DEFINE_ACTION(gth_browser_activate_action_go_forward)
 DEFINE_ACTION(gth_browser_activate_action_go_up)
 DEFINE_ACTION(gth_browser_activate_action_go_location)
 DEFINE_ACTION(gth_browser_activate_action_go_clear_history)
@@ -68,10 +65,17 @@ DEFINE_ACTION(gth_browser_activate_action_browser_tools)
 DEFINE_ACTION(gth_browser_activate_action_viewer_tools)
 DEFINE_ACTION(gth_browser_activate_action_view_shrink_wrap)
 
-DEF_ACTION_CALLBACK (gth_browser_activate_save)
-DEF_ACTION_CALLBACK (gth_browser_activate_save_as)
-DEF_ACTION_CALLBACK (gth_browser_activate_revert_to_saved)
+DEF_ACTION_CALLBACK (gth_browser_activate_browser_mode)
+DEF_ACTION_CALLBACK (gth_browser_activate_clear_history)
 DEF_ACTION_CALLBACK (gth_browser_activate_close)
+DEF_ACTION_CALLBACK (gth_browser_activate_fullscreen)
+DEF_ACTION_CALLBACK (gth_browser_activate_go_back)
+DEF_ACTION_CALLBACK (gth_browser_activate_go_forward)
+DEF_ACTION_CALLBACK (gth_browser_activate_go_to_history_pos)
 DEF_ACTION_CALLBACK (gth_browser_activate_quit)
+DEF_ACTION_CALLBACK (gth_browser_activate_revert_to_saved)
+DEF_ACTION_CALLBACK (gth_browser_activate_save)
+DEF_ACTION_CALLBACK (gth_browser_activate_save_as)
+DEF_ACTION_CALLBACK (gth_browser_activate_unfullscreen)
 
 #endif /* GTH_BROWSER_ACTIONS_CALLBACK_H */
diff --git a/gthumb/gth-browser-actions-entries.h b/gthumb/gth-browser-actions-entries.h
index 7d7db79..8c6cebd 100644
--- a/gthumb/gth-browser-actions-entries.h
+++ b/gthumb/gth-browser-actions-entries.h
@@ -28,11 +28,18 @@
 #include "gtk-utils.h"
 
 static const GActionEntry gth_browser_actions[] = {
-       { "save", gth_browser_activate_save },
-       { "save-as", gth_browser_activate_save_as },
-       { "revert-to-saved", gth_browser_activate_revert_to_saved },
+       { "browser-mode", gth_browser_activate_browser_mode },
+       { "clear-history", gth_browser_activate_clear_history },
        { "close", gth_browser_activate_close },
+       { "fullscreen", gth_browser_activate_fullscreen },
+       { "go-back", gth_browser_activate_go_back },
+       { "go-forward", gth_browser_activate_go_forward },
+       { "go-to-history-position", gth_browser_activate_go_to_history_pos, "s", "''", NULL },
        { "quit", gth_browser_activate_quit },
+       { "revert-to-saved", gth_browser_activate_revert_to_saved },
+       { "save", gth_browser_activate_save },
+       { "save-as", gth_browser_activate_save_as },
+       { "unfullscreen", gth_browser_activate_unfullscreen },
 };
 
 
@@ -136,30 +143,12 @@ static GthActionEntryExt gth_browser_action_entries[] = {
          GTH_ACTION_FLAG_IS_IMPORTANT,
          G_CALLBACK (gth_browser_activate_action_view_next) },
 
-       { "View_Fullscreen", GTK_STOCK_FULLSCREEN,
-         NULL, "F11",
-         N_("Switch to fullscreen"),
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_view_fullscreen) },
-
        { "View_Leave_Fullscreen", GTK_STOCK_LEAVE_FULLSCREEN,
          NULL, NULL,
          N_("Leave Fullscreen"),
          GTH_ACTION_FLAG_NONE,
          G_CALLBACK (gth_browser_activate_action_view_fullscreen) },
 
-       { "Go_Back", GTK_STOCK_GO_BACK,
-         NULL, "<alt>Left",
-         N_("Go to the previous visited location"),
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_go_back) },
-
-       { "Go_Forward", GTK_STOCK_GO_FORWARD,
-         NULL, "<alt>Right",
-         N_("Go to the next visited location"),
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_go_forward) },
-
        { "Go_Up", GTK_STOCK_GO_UP,
          NULL, "<alt>Up",
          N_("Go up one level"),
@@ -184,12 +173,6 @@ static GthActionEntryExt gth_browser_action_entries[] = {
          GTH_ACTION_FLAG_NONE,
          G_CALLBACK (gth_browser_activate_action_go_clear_history) },
 
-       { "View_BrowserMode", GTH_STOCK_BROWSER_MODE,
-         N_("Browser"), "Escape",
-         N_("View the folders"),
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_browser_mode) },
-
        { "Help_About", GTK_STOCK_ABOUT,
          NULL, NULL,
          N_("Show information about gthumb"),
diff --git a/gthumb/gth-browser-ui.h b/gthumb/gth-browser-ui.h
index b601635..a1eedde 100644
--- a/gthumb/gth-browser-ui.h
+++ b/gthumb/gth-browser-ui.h
@@ -75,7 +75,6 @@ static const char *fixed_ui_info =
 "      <menuitem action='View_Statusbar'/>"
 "      <placeholder name='View_Bars'/>"
 "      <separator/>"
-"      <menuitem action='View_Fullscreen'/>"
 "      <placeholder name='View_Actions'/>"
 "      <separator/>"
 "      <placeholder name='File_Actions'/>"
@@ -87,8 +86,6 @@ static const char *fixed_ui_info =
 "      <placeholder name='Folder_Actions'/>"
 "    </menu>"
 "    <menu name='Go' action='GoMenu'>"
-"      <menuitem action='Go_Back'/>"
-"      <menuitem action='Go_Forward'/>"
 "      <menuitem action='Go_Up'/>"
 "      <menuitem action='Go_Location'/>"
 "      <separator name='BeforeEntryPointList'/>"
@@ -108,8 +105,6 @@ static const char *fixed_ui_info =
 "  </menubar>"
 
 "  <toolbar name='ToolBar'>"
-"    <toolitem action='Toolbar_Go_Back'/>"
-"    <toolitem action='Toolbar_Go_Forward'/>"
 "    <toolitem action='Toolbar_Go_Up'/>"
 "    <toolitem action='View_Stop'/>"
 "    <separator/>"
@@ -117,7 +112,6 @@ static const char *fixed_ui_info =
 "    <placeholder name='SourceCommands'/>"
 "    <separator/>"
 "    <placeholder name='BrowserCommands'>"
-"      <toolitem action='View_Fullscreen'/>"
 "    </placeholder>"
 "    <separator/>"
 "    <placeholder name='Edit_Actions'/>"
@@ -129,12 +123,9 @@ static const char *fixed_ui_info =
 "  </toolbar>"
 
 "  <toolbar name='ViewerToolBar'>"
-"    <toolitem action='View_BrowserMode'/>"
-"    <separator/>"
 "    <toolitem action='View_Prev'/>"
 "    <toolitem action='View_Next'/>"
 "    <separator/>"
-"    <toolitem action='View_Fullscreen'/>"
 "    <placeholder name='ViewerCommands'/>"
 "    <separator/>"
 "    <placeholder name='Edit_Actions'/>"
@@ -171,7 +162,6 @@ static const char *fixed_ui_info =
 "  </popup>"
 
 "  <popup name='FileListPopup'>"
-"    <menuitem action='View_Fullscreen'/>"
 "    <placeholder name='Screen_Actions'/>"
 "    <separator/>"
 "    <menu name='OpenWith' action='OpenWithMenu'>"
@@ -189,7 +179,6 @@ static const char *fixed_ui_info =
 "  </popup>"
 
 "  <popup name='FilePopup'>"
-"    <menuitem action='View_Fullscreen'/>"
 "    <placeholder name='Screen_Actions'/>"
 "    <separator/>"
 "    <menu name='OpenWith' action='OpenWithMenu'>"
@@ -255,7 +244,6 @@ static const char *viewer_ui_info =
 "        <menuitem action='View_ShrinkWrap'/>"
 "      </placeholder>"
 "      <placeholder name='Folder_Actions'>"
-"        <menuitem action='View_BrowserMode'/>"
 "      </placeholder>"
 "    </menu>"
 "  </menubar>"
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index b705c66..a9f7e1e 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -213,9 +213,8 @@ struct _GthBrowserPrivate {
 
        GList             *history;
        GList             *history_current;
-       GtkWidget         *back_history_menu;
-       GtkWidget         *forward_history_menu;
        GtkWidget         *go_parent_menu;
+       GMenu             *history_menu;
 };
 
 
@@ -647,6 +646,7 @@ gth_browser_update_sensitivity (GthBrowser *browser)
        _gth_browser_enable_action (browser, "save", viewer_can_save && modified);
        _gth_browser_enable_action (browser, "save-as", viewer_can_save);
        _gth_browser_enable_action (browser, "revert-to-saved", viewer_can_save && modified);
+       _gth_browser_enable_action (browser, "clear-history", browser->priv->history != NULL);
 
        gth_sidebar_update_sensitivity (GTH_SIDEBAR (browser->priv->file_properties));
 
@@ -712,45 +712,14 @@ _gth_browser_set_location_from_file (GthBrowser *browser,
 static void
 _gth_browser_update_go_sensitivity (GthBrowser *browser)
 {
-       gboolean  sensitive;
-
-       sensitive = (browser->priv->history_current != NULL) && (browser->priv->history_current->next != 
NULL);
-       _gth_browser_set_action_sensitive (browser, "Go_Back", sensitive);
-       _gth_browser_set_action_sensitive (browser, "Toolbar_Go_Back", sensitive);
-
-       sensitive = (browser->priv->history_current != NULL) && (browser->priv->history_current->prev != 
NULL);
-       _gth_browser_set_action_sensitive (browser, "Go_Forward", sensitive);
-       _gth_browser_set_action_sensitive (browser, "Toolbar_Go_Forward", sensitive);
-}
-
-
-static void
-activate_clear_history_menu_item (GtkMenuItem *menuitem,
-                                 gpointer     data)
-{
-       gth_browser_clear_history ((GthBrowser *)data);
-}
-
-
-static void
-_gth_browser_add_clear_history_menu_item (GthBrowser *browser,
-                                         GtkWidget  *menu)
-{
-       GtkWidget *menu_item;
-
-       menu_item = gtk_separator_menu_item_new ();
-       gtk_widget_show (menu_item);
-       gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
-
-       menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Delete History"));
-       gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), gtk_image_new_from_stock 
(GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU));
-       gtk_widget_show (menu_item);
-       gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
-
-       g_signal_connect (menu_item,
-                         "activate",
-                         G_CALLBACK (activate_clear_history_menu_item),
-                         browser);
+       g_object_set (g_action_map_lookup_action (G_ACTION_MAP (browser), "go-back"),
+                     "enabled",
+                     (browser->priv->history_current != NULL) && (browser->priv->history_current->next != 
NULL),
+                     NULL);
+       g_object_set (g_action_map_lookup_action (G_ACTION_MAP (browser), "go-forward"),
+                     "enabled",
+                     (browser->priv->history_current != NULL) && (browser->priv->history_current->prev != 
NULL),
+                     NULL);
 }
 
 
@@ -783,54 +752,50 @@ _gth_browser_history_menu (GthBrowser *browser)
 
        _gth_browser_update_go_sensitivity (browser);
 
-       /* Update the back history menu. */
+       /* Update the history menu model for the headerbar button */
 
-       menu = browser->priv->back_history_menu;
-       _gtk_container_remove_children (GTK_CONTAINER (menu), NULL, NULL);
+       g_menu_remove_all (browser->priv->history_menu);
 
-       if ((browser->priv->history != NULL)
-           && (browser->priv->history_current->next != NULL))
-       {
+       if (browser->priv->history != NULL) {
                int i;
 
-               for (i = 0, scan = browser->priv->history_current->next;
-                    scan && (i < MAX_HISTORY_LENGTH);
-                    scan = scan->next)
+               for (i = 0, scan = browser->priv->history;
+                    scan;
+                    scan = scan->next, i++)
                {
-                       _gth_browser_add_file_menu_item (browser,
-                                                        menu,
-                                                        scan->data,
-                                                        NULL,
-                                                        GTH_ACTION_GO_BACK,
-                                                        ++i);
-               }
-               if (i > 0)
-                       _gth_browser_add_clear_history_menu_item (browser, menu);
-       }
-
-       /* Update the forward history menu. */
+                       GFile         *file = scan->data;
+                       GthFileSource *file_source;
+                       GFileInfo     *info;
+                       char          *label;
+                       GMenuItem     *item;
+                       char          *target;
+
+                       file_source = gth_main_get_file_source (file);
+                       info = gth_file_source_get_file_info (file_source, file, GFILE_DISPLAY_ATTRIBUTES);
+                       if (info != NULL) {
+                               label = g_strdup (g_file_info_get_display_name (info));
+                               g_object_unref (info);
+                       }
+                       else
+                               label =  _g_file_get_display_name (file);
 
-       menu = browser->priv->forward_history_menu;
-       _gtk_container_remove_children (GTK_CONTAINER (menu), NULL, NULL);
+                       item = g_menu_item_new (label, NULL);
+                       target = g_strdup_printf ("%d", i);
+                       g_menu_item_set_action_and_target (item, "win.go-to-history-position", "s", target);
+                       g_menu_append_item (browser->priv->history_menu, item);
 
-       if ((browser->priv->history != NULL)
-           && (browser->priv->history_current->prev != NULL))
-       {
-               int i;
+                       if (browser->priv->history_current == scan) {
+                               GAction *action = g_action_map_lookup_action (G_ACTION_MAP (browser), 
"go-to-history-position");
+                               g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_string 
(target));
+                       }
 
-               for (i = 0, scan = browser->priv->history_current->prev;
-                    scan && (i < MAX_HISTORY_LENGTH);
-                    scan = scan->prev)
-               {
-                       _gth_browser_add_file_menu_item (browser,
-                                                        menu,
-                                                        scan->data,
-                                                        NULL,
-                                                        GTH_ACTION_GO_FORWARD,
-                                                        ++i);
+                       g_free (target);
+                       g_free (label);
+                       g_object_unref (file_source);
                }
-               if (i > 0)
-                       _gth_browser_add_clear_history_menu_item (browser, menu);
+
+               /* if (i > 0)
+                       _gth_browser_add_clear_history_menu_item (browser, menu); FIXME */
        }
 
        /* Update the history list in the go menu */
@@ -2753,9 +2718,8 @@ gth_browser_finalize (GObject *object)
        g_hash_table_unref (browser->priv->named_dialogs);
        g_free (browser->priv->list_attributes);
        _g_object_unref (browser->priv->folder_popup_file_data);
-       _g_object_unref (browser->priv->back_history_menu);
-       _g_object_unref (browser->priv->forward_history_menu);
        _g_object_unref (browser->priv->go_parent_menu);
+       _g_object_unref (browser->priv->history_menu);
 
        G_OBJECT_CLASS (gth_browser_parent_class)->finalize (object);
 }
@@ -3884,42 +3848,6 @@ _gth_browser_add_custom_actions (GthBrowser     *browser,
 {
        GtkAction *action;
 
-       /* Go Back */
-
-       browser->priv->back_history_menu = gtk_menu_new ();
-       action = g_object_new (GTH_TYPE_MENU_ACTION,
-                              "name", "Toolbar_Go_Back",
-                              "stock-id", GTK_STOCK_GO_BACK,
-                              "button-tooltip", _("Go to the previous visited location"),
-                              "arrow-tooltip", _("View the list of visited locations"),
-                              "is-important", TRUE,
-                              "menu", browser->priv->back_history_menu,
-                              NULL);
-       g_signal_connect (action,
-                         "activate",
-                         G_CALLBACK (gth_browser_activate_action_go_back),
-                         browser);
-       gtk_action_group_add_action (actions, action);
-       g_object_unref (action);
-
-       /* Go Forward */
-
-       browser->priv->forward_history_menu = gtk_menu_new ();
-       action = g_object_new (GTH_TYPE_MENU_ACTION,
-                              "name", "Toolbar_Go_Forward",
-                              "stock-id", GTK_STOCK_GO_FORWARD,
-                              "button-tooltip", _("Go to the next visited location"),
-                              "arrow-tooltip", _("View the list of visited locations"),
-                              "is-important", TRUE,
-                              "menu", browser->priv->forward_history_menu,
-                              NULL);
-       g_signal_connect (action,
-                         "activate",
-                         G_CALLBACK (gth_browser_activate_action_go_forward),
-                         browser);
-       gtk_action_group_add_action (actions, action);
-       g_object_unref (action);
-
        /* Go Up */
 
        browser->priv->go_parent_menu = gtk_menu_new ();
@@ -4406,8 +4334,6 @@ gth_browser_init (GthBrowser *browser)
        browser->priv->last_mouse_y = 0.0;
        browser->priv->history = NULL;
        browser->priv->history_current = NULL;
-       browser->priv->back_history_menu = NULL;
-       browser->priv->forward_history_menu = NULL;
        browser->priv->go_parent_menu = NULL;
        browser->priv->shrink_wrap_viewer = FALSE;
        browser->priv->browser_settings = g_settings_new (GTHUMB_BROWSER_SCHEMA);
@@ -4601,6 +4527,7 @@ gth_browser_init (GthBrowser *browser)
        {
                GtkWidget *header_bar;
                GtkWidget *button;
+               GMenu     *menu;
 
                header_bar = gth_window_get_header_bar (GTH_WINDOW (browser));
 
@@ -4646,41 +4573,57 @@ gth_browser_init (GthBrowser *browser)
 
                /* browser navigation */
 
-               button = _gtk_image_button_new_for_header_bar ("go-previous-symbolic");
-               gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (button), FALSE);
-               gtk_activatable_set_related_action (GTK_ACTIVATABLE (button), gtk_action_group_get_action 
(browser->priv->actions, "Go_Back"));
-               gtk_widget_show (button);
-               gtk_box_pack_start (GTK_BOX 
(browser->priv->header_sections[GTH_BROWSER_HEADER_SECTION_BROWSER_NAVIGATION]), button, FALSE, FALSE, 0);
-
-               button = _gtk_image_button_new_for_header_bar ("go-next-symbolic");
-               gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (button), FALSE);
-               gtk_activatable_set_related_action (GTK_ACTIVATABLE (button), gtk_action_group_get_action 
(browser->priv->actions, "Go_Forward"));
-               gtk_widget_show (button);
-               gtk_box_pack_start (GTK_BOX 
(browser->priv->header_sections[GTH_BROWSER_HEADER_SECTION_BROWSER_NAVIGATION]), button, FALSE, FALSE, 0);
+               gth_browser_add_header_bar_button (browser,
+                                                  GTH_BROWSER_HEADER_SECTION_BROWSER_NAVIGATION,
+                                                  "go-previous-symbolic",
+                                                  _("Go to the previous visited location"),
+                                                  "win.go-back",
+                                                  "<alt>Left");
+               gth_browser_add_header_bar_button (browser,
+                                                  GTH_BROWSER_HEADER_SECTION_BROWSER_NAVIGATION,
+                                                  "go-next-symbolic",
+                                                  _("Go to the next visited location"),
+                                                  "win.go-forward",
+                                                  "<alt>Right");
+
+               button = _gtk_menu_button_new_for_header_bar ();
+               gtk_widget_set_tooltip_text (button, _("Visited Locations"));
+               gtk_container_add (GTK_CONTAINER (button), gtk_image_new_from_icon_name 
("document-open-recent-symbolic", GTK_ICON_SIZE_MENU));
+               browser->priv->history_menu = g_menu_new ();
+               menu = g_menu_new ();
+               g_menu_append_section (menu, _("Visited Locations"), G_MENU_MODEL 
(browser->priv->history_menu));
+               gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), G_MENU_MODEL (menu));
+               g_object_unref (menu);
+               g_menu_append (menu, _("_Delete History"), "win.clear-history");
+               gtk_widget_show_all (button);
+               gtk_box_pack_start (GTK_BOX (gth_browser_get_headerbar_section (browser, 
GTH_BROWSER_HEADER_SECTION_BROWSER_COMMANDS)), button, FALSE, FALSE, 0);
 
                /* browser commands */
 
-               button = _gtk_image_button_new_for_header_bar ("view-fullscreen-symbolic");
-               gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (button), FALSE);
-               gtk_activatable_set_related_action (GTK_ACTIVATABLE (button), gtk_action_group_get_action 
(browser->priv->actions, "View_Fullscreen"));
-               gtk_widget_show (button);
-               gtk_box_pack_start (GTK_BOX 
(browser->priv->header_sections[GTH_BROWSER_HEADER_SECTION_BROWSER_VIEW]), button, FALSE, FALSE, 0);
+               gth_browser_add_header_bar_button (browser,
+                                                  GTH_BROWSER_HEADER_SECTION_BROWSER_VIEW,
+                                                  "view-fullscreen-symbolic",
+                                                  _("Switch to fullscreen"),
+                                                  "win.fullscreen",
+                                                  "F11");
 
                /* viewer navigation */
 
-               button = _gtk_image_button_new_for_header_bar ("go-previous-symbolic");
-               gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (button), FALSE);
-               gtk_activatable_set_related_action (GTK_ACTIVATABLE (button), gtk_action_group_get_action 
(browser->priv->actions, "View_BrowserMode"));
-               gtk_widget_show (button);
-               gtk_box_pack_start (GTK_BOX 
(browser->priv->header_sections[GTH_BROWSER_HEADER_SECTION_VIEWER_NAVIGATION]), button, FALSE, FALSE, 0);
+               gth_browser_add_header_bar_button (browser,
+                                                  GTH_BROWSER_HEADER_SECTION_VIEWER_NAVIGATION,
+                                                  "go-previous-symbolic",
+                                                  _("View the folders"),
+                                                  "win.browser-mode",
+                                                  "Escape");
 
                /* viewer view */
 
-               button = _gtk_image_button_new_for_header_bar ("view-fullscreen-symbolic");
-               gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (button), FALSE);
-               gtk_activatable_set_related_action (GTK_ACTIVATABLE (button), gtk_action_group_get_action 
(browser->priv->actions, "View_Fullscreen"));
-               gtk_widget_show (button);
-               gtk_box_pack_start (GTK_BOX 
(browser->priv->header_sections[GTH_BROWSER_HEADER_SECTION_VIEWER_VIEW]), button, FALSE, FALSE, 0);
+               gth_browser_add_header_bar_button (browser,
+                                                  GTH_BROWSER_HEADER_SECTION_VIEWER_VIEW,
+                                                  "view-fullscreen-symbolic",
+                                                  _("Switch to fullscreen"),
+                                                  "win.fullscreen",
+                                                  "F11");
        }
 
        /* toolbar */
@@ -5136,6 +5079,24 @@ gth_browser_go_forward (GthBrowser *browser,
 
 
 void
+gth_browser_go_to_history_pos (GthBrowser *browser,
+                              int         pos)
+{
+       GList *new_current;
+
+       new_current = g_list_nth (browser->priv->history, pos);
+       if (new_current == NULL)
+               return;
+
+       if (new_current == browser->priv->history_current)
+               return;
+
+       browser->priv->history_current = new_current;
+       _gth_browser_load (browser, (GFile*) browser->priv->history_current->data, NULL, NULL, 0, 
GTH_ACTION_GO_BACK, FALSE);
+}
+
+
+void
 gth_browser_go_up (GthBrowser *browser,
                   int         steps)
 {
diff --git a/gthumb/gth-browser.h b/gthumb/gth-browser.h
index a21bbc3..9692ec2 100644
--- a/gthumb/gth-browser.h
+++ b/gthumb/gth-browser.h
@@ -110,6 +110,8 @@ void             gth_browser_go_back                (GthBrowser       *browser,
                                                     int               steps);
 void             gth_browser_go_forward             (GthBrowser       *browser,
                                                     int               steps);
+void             gth_browser_go_to_history_pos      (GthBrowser       *browser,
+                                                    int               pos);
 void             gth_browser_go_up                  (GthBrowser       *browser,
                                                     int               steps);
 void             gth_browser_go_home                (GthBrowser       *browser);


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