[gthumb] added the bookmarks to the headerbar



commit 02d51b8c46a5c3c3a8f50aef57c3decf0db7cab4
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sat Oct 19 13:32:19 2013 +0200

    added the bookmarks to the headerbar

 data/icons/hicolor/scalable/actions/Makefile.am    |    1 +
 .../scalable/actions/bookmarks-symbolic.svg        |   80 ++++++++
 extensions/bookmarks/Makefile.am                   |   12 +-
 extensions/bookmarks/actions.c                     |   32 +++
 extensions/bookmarks/actions.h                     |    3 +
 extensions/bookmarks/callbacks.c                   |  202 ++++++++------------
 extensions/bookmarks/data/ui/Makefile.am           |    6 +-
 extensions/bookmarks/data/ui/bookmarks-menu.ui     |   25 +++
 extensions/bookmarks/data/ui/bookmarks.ui          |  177 +++++++++++-------
 extensions/bookmarks/dlg-bookmarks.c               |    2 +-
 extensions/bookmarks/gresource.xml                 |    7 +
 gthumb/gth-browser-actions-callbacks.c             |  131 ++-----------
 gthumb/gth-browser-actions-callbacks.h             |   13 +--
 gthumb/gth-browser-actions-entries.h               |   50 +-----
 gthumb/gth-browser-ui.h                            |    9 -
 gthumb/gth-browser.c                               |   60 ++++--
 gthumb/gth-browser.h                               |    5 +
 gthumb/resources/gears-menu.ui                     |    5 +
 18 files changed, 418 insertions(+), 402 deletions(-)
---
diff --git a/data/icons/hicolor/scalable/actions/Makefile.am b/data/icons/hicolor/scalable/actions/Makefile.am
index 807533f..b1dd19d 100644
--- a/data/icons/hicolor/scalable/actions/Makefile.am
+++ b/data/icons/hicolor/scalable/actions/Makefile.am
@@ -5,6 +5,7 @@ context = actions
 iconsdir = $(themedir)/$(size)/$(context)
 
 icons_DATA =                           \
+       bookmarks-symbolic.svg          \
        browser-mode.svg                \
        file-catalog.svg                \
        file-library.svg                \
diff --git a/data/icons/hicolor/scalable/actions/bookmarks-symbolic.svg 
b/data/icons/hicolor/scalable/actions/bookmarks-symbolic.svg
new file mode 100644
index 0000000..8856b79
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/bookmarks-symbolic.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="16"
+   height="16"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="bookmarks-symbolic.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#555753"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="32"
+     inkscape:cx="4.1967014"
+     inkscape:cy="10.284634"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="false"
+     inkscape:window-width="1483"
+     inkscape:window-height="933"
+     inkscape:window-x="390"
+     inkscape:window-y="156"
+     inkscape:window-maximized="0"
+     showborder="true"
+     fit-margin-top="0"
+     fit-margin-right="0"
+     fit-margin-left="0"
+     fit-margin-bottom="0"
+     showguides="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid7044"
+       empspacing="8"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-31.97559px"
+       originy="-816.00002px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Livello 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-31.97559,-220.36218)">
+    <path
+       style="fill:#bebebe;fill-opacity:1;stroke:none"
+       d="m 4.02441,0.96879 0.00684,13.96871 4.0625,-3.96875 3.9375,4.0625 0.03125,-14.03123 z"
+       id="path2996"
+       inkscape:connector-curvature="0"
+       transform="translate(31.97559,220.36218)"
+       sodipodi:nodetypes="cccccc" />
+  </g>
+</svg>
diff --git a/extensions/bookmarks/Makefile.am b/extensions/bookmarks/Makefile.am
index e5291f5..3de25c7 100644
--- a/extensions/bookmarks/Makefile.am
+++ b/extensions/bookmarks/Makefile.am
@@ -10,8 +10,16 @@ libbookmarks_la_SOURCES =            \
        callbacks.h                     \
        dlg-bookmarks.c                 \
        dlg-bookmarks.h                 \
+       resources.c                     \
+       resources.h                     \
        main.c
 
+RESOURCES_DEP = $(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies --sourcedir=$(srcdir) 
$(srcdir)/gresource.xml)
+resources.c: gresource.xml $(RESOURCES_DEP)
+       $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate --c-name gth 
$(srcdir)/gresource.xml
+resources.h: gresource.xml $(RESOURCES_DEP)
+       $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate --c-name gth 
$(srcdir)/gresource.xml
+
 libbookmarks_la_CFLAGS = $(GTHUMB_CFLAGS) -I$(top_srcdir) -I$(top_builddir)/gthumb 
 libbookmarks_la_LDFLAGS = $(EXTENSION_LIBTOOL_FLAGS)
 libbookmarks_la_LIBADD = $(GTHUMB_LIBS)
@@ -24,7 +32,9 @@ extensionini_DATA = $(extensionini_in_files:.extension.in.in=.extension)
 @GTHUMB_EXTENSION_IN_RULE@
 @GTHUMB_EXTENSION_RULE@
 
-EXTRA_DIST = $(extensionini_in_files) 
+EXTRA_DIST =                           \
+        $(extensionini_in_files)       \
+        gresource.xml 
 
 DISTCLEANFILES = $(extensionini_DATA)
 
diff --git a/extensions/bookmarks/actions.c b/extensions/bookmarks/actions.c
index 94990dd..38582a5 100644
--- a/extensions/bookmarks/actions.c
+++ b/extensions/bookmarks/actions.c
@@ -52,3 +52,35 @@ gth_browser_activate_action_bookmarks_edit (GtkAction  *action,
 {
        dlg_bookmarks (browser);
 }
+
+
+void
+gth_browser_activate_bookmarks_add (GSimpleAction *action,
+                                   GVariant      *parameter,
+                                   gpointer       user_data)
+{
+       GthBrowser    *browser = GTH_BROWSER (user_data);
+       GBookmarkFile *bookmarks;
+       GFile         *location;
+       char          *uri;
+
+       location = gth_browser_get_location (browser);
+       if (location == NULL)
+               return;
+
+       bookmarks = gth_main_get_default_bookmarks ();
+       uri = g_file_get_uri (location);
+       _g_bookmark_file_add_uri (bookmarks, uri);
+       gth_main_bookmarks_changed ();
+
+       g_free (uri);
+}
+
+
+void
+gth_browser_activate_bookmarks_edit (GSimpleAction *action,
+                                    GVariant      *parameter,
+                                    gpointer       user_data)
+{
+       dlg_bookmarks (GTH_BROWSER (user_data));
+}
diff --git a/extensions/bookmarks/actions.h b/extensions/bookmarks/actions.h
index 7c91108..a05ffae 100644
--- a/extensions/bookmarks/actions.h
+++ b/extensions/bookmarks/actions.h
@@ -29,4 +29,7 @@
 DEFINE_ACTION(gth_browser_activate_action_bookmarks_add)
 DEFINE_ACTION(gth_browser_activate_action_bookmarks_edit)
 
+DEF_ACTION_CALLBACK (gth_browser_activate_bookmarks_add)
+DEF_ACTION_CALLBACK (gth_browser_activate_bookmarks_edit)
+
 #endif /* ACTIONS_H */
diff --git a/extensions/bookmarks/callbacks.c b/extensions/bookmarks/callbacks.c
index 0dae653..ad1456f 100644
--- a/extensions/bookmarks/callbacks.c
+++ b/extensions/bookmarks/callbacks.c
@@ -30,48 +30,19 @@
 #define BROWSER_DATA_KEY "bookmarks-browser-data"
 
 
-static const char *fixed_ui_info =
-"<ui>"
-"  <menubar name='MenuBar'>"
-"    <placeholder name='OtherMenus'>"
-"      <menu name='Bookmarks' action='BookmarksMenu'>"
-"        <menuitem action='Bookmarks_Add'/>"
-"        <menuitem action='Bookmarks_Edit'/>"
-"        <separator/>"
-"        <menu name='SystemBookmarks' action='SystemBookmarksMenu'>"
-"        </menu>"
-"        <separator name='EntryPointListSeparator'/>"
-"        <placeholder name='EntryPointList'/>"
-"        <separator name='BookmarkListSeparator'/>"
-"        <placeholder name='BookmarkList'/>"
-"      </menu>"
-"    </placeholder>"
-"  </menubar>"
-"</ui>";
-
-
-static GtkActionEntry bookmarks_action_entries[] = {
-       { "BookmarksMenu", NULL, N_("_Bookmarks") },
-       { "SystemBookmarksMenu", NULL, N_("_System Bookmarks") },
-
-       { "Bookmarks_Add", GTK_STOCK_ADD,
-         N_("_Add Bookmark"), "<control>D",
-         N_("Add current location to bookmarks"),
-         G_CALLBACK (gth_browser_activate_action_bookmarks_add) },
-
-       { "Bookmarks_Edit", NULL,
-         N_("_Edit Bookmarks..."), "<control>B",
-         N_("Edit bookmarks"),
-         G_CALLBACK (gth_browser_activate_action_bookmarks_edit) },
+static const GActionEntry actions[] = {
+       { "bookmarks-add", gth_browser_activate_bookmarks_add },
+       { "bookmarks-edit", gth_browser_activate_bookmarks_edit }
 };
-static guint bookmarks_action_entries_size = G_N_ELEMENTS (bookmarks_action_entries);
 
 
 typedef struct {
-       GthBrowser     *browser;
-       GtkActionGroup *actions;
-       guint           bookmarks_changed_id;
-       guint           entry_points_changed_id;
+       GthBrowser *browser;
+       guint       bookmarks_changed_id;
+       guint       entry_points_changed_id;
+       GMenu      *system_bookmarks_menu;
+       GMenu      *entry_points_menu;
+       GMenu      *bookmarks_menu;
 } BrowserData;
 
 
@@ -88,6 +59,9 @@ browser_data_free (BrowserData *data)
                                             data->entry_points_changed_id);
                data->entry_points_changed_id = 0;
        }
+       _g_object_unref (data->system_bookmarks_menu);
+       _g_object_unref (data->entry_points_menu);
+       _g_object_unref (data->bookmarks_menu);
        g_free (data);
 }
 
@@ -118,23 +92,20 @@ static void
 update_system_bookmark_list_from_content (GthBrowser *browser,
                                          const char *content)
 {
-       GtkWidget  *bookmark_list;
-       GtkWidget  *menu;
-       char      **lines;
-       int         i;
+       BrowserData   *data;
+       char        **lines;
+       int           i;
 
-       bookmark_list = gtk_ui_manager_get_widget (gth_browser_get_ui_manager (browser), 
"/MenuBar/OtherMenus/Bookmarks/SystemBookmarks");
-       menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (bookmark_list));
-
-       _gtk_container_remove_children (GTK_CONTAINER (menu), NULL, NULL);
+       data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
+       g_return_if_fail (data != NULL);
 
        lines = g_strsplit (content, "\n", -1);
        for (i = 0; lines[i] != NULL; i++) {
-               char  **line;
-               char   *uri;
-               GFile  *file;
-               GIcon  *icon;
-               char   *name;
+               char      **line;
+               char       *uri;
+               GFile      *file;
+               char       *name;
+               GMenuItem  *item;
 
                line = g_strsplit (lines[i], " ", 2);
                uri = line[0];
@@ -144,31 +115,21 @@ update_system_bookmark_list_from_content (GthBrowser *browser,
                }
 
                file = g_file_new_for_uri (uri);
-               icon = _g_file_get_icon (file);
                name = g_strdup (strchr (lines[i], ' '));
                if (name == NULL)
                        name = _g_file_get_display_name (file);
                if (name == NULL)
                        name = g_file_get_parse_name (file);
-
-               _gth_browser_add_file_menu_item_full (browser,
-                                                     menu,
-                                                     file,
-                                                     icon,
-                                                     name,
-                                                     GTH_ACTION_GO_TO,
-                                                     i,
-                                                     -1);
+               item = _g_menu_item_new_for_file (file, name);
+               g_menu_item_set_action_and_target (item, "win.go-to-location", "s", uri);
+               g_menu_append_item (data->system_bookmarks_menu, item);
 
                g_free (name);
-               _g_object_unref (icon);
                g_object_unref (file);
                g_strfreev (line);
        }
-       g_strfreev (lines);
 
-       if (i > 0)
-               gtk_widget_show (bookmark_list);
+       g_strfreev (lines);
 }
 
 
@@ -208,12 +169,19 @@ update_system_bookmark_list_ready (GObject      *source_object,
 static void
 _gth_browser_update_system_bookmark_list (GthBrowser *browser)
 {
+       BrowserData         *browser_data;
        GFile               *bookmark_file;
        GFileInputStream    *input_stream;
        UpdateBookmarksData *data;
 
+       browser_data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
+       g_return_if_fail (browser_data != NULL);
+
+       g_menu_remove_all (browser_data->system_bookmarks_menu);
+
        /* give priority to XDG_CONFIG_HOME/gtk-3.0/bookmarks if not found
         * try the old ~/.gtk-bookmarks */
+
        bookmark_file = gth_user_dir_get_file_for_read (GTH_DIR_CONFIG, "gtk-3.0", "bookmarks", NULL);
        if (! g_file_query_exists (bookmark_file, NULL)) {
                char *path;
@@ -249,41 +217,31 @@ _gth_browser_update_system_bookmark_list (GthBrowser *browser)
 static void
 _gth_browser_update_bookmark_list (GthBrowser *browser)
 {
-       GtkWidget      *menu;
-       GtkWidget      *bookmark_list;
-       GtkWidget      *bookmark_list_separator;
+       BrowserData    *data;
        GBookmarkFile  *bookmarks;
        char          **uris;
-       gsize           length;
        int             i;
 
-       bookmark_list = gtk_ui_manager_get_widget (gth_browser_get_ui_manager (browser), 
"/MenuBar/OtherMenus/Bookmarks/BookmarkList");
-       menu = gtk_widget_get_parent (bookmark_list);
+       data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
+       g_return_if_fail (data != NULL);
 
-       _gtk_container_remove_children (GTK_CONTAINER (menu), bookmark_list, NULL);
+       g_menu_remove_all (data->bookmarks_menu);
 
        bookmarks = gth_main_get_default_bookmarks ();
-       uris = g_bookmark_file_get_uris (bookmarks, &length);
-
-       bookmark_list_separator = gtk_ui_manager_get_widget (gth_browser_get_ui_manager (browser), 
"/MenuBar/OtherMenus/Bookmarks/BookmarkListSeparator");
-       if (length > 0)
-               gtk_widget_show (bookmark_list_separator);
-       else
-               gtk_widget_hide (bookmark_list_separator);
+       uris = g_bookmark_file_get_uris (bookmarks, NULL);
 
        for (i = 0; uris[i] != NULL; i++) {
-               GFile *file;
-               char  *name;
+               GFile     *file;
+               char      *name;
+               GMenuItem *item;
 
                file = g_file_new_for_uri (uris[i]);
                name = g_bookmark_file_get_title (bookmarks, uris[i], NULL);
-               _gth_browser_add_file_menu_item (browser,
-                                                menu,
-                                                file,
-                                                name,
-                                                GTH_ACTION_GO_TO,
-                                                i);
+               item = _g_menu_item_new_for_file (file, name);
+               g_menu_item_set_action_and_target (item, "win.go-to-location", "s", uris[i]);
+               g_menu_append_item (data->bookmarks_menu, item);
 
+               _g_object_unref (item);
                g_free (name);
                g_object_unref (file);
        }
@@ -306,33 +264,28 @@ bookmarks_changed_cb (GthMonitor *monitor,
 static void
 _gth_browser_update_entry_point_list (GthBrowser *browser)
 {
-       GtkUIManager *ui;
-       GtkWidget    *separator1;
-       GtkWidget    *separator2;
-       GtkWidget    *menu;
+       BrowserData  *data;
        GList        *entry_points;
        GList        *scan;
-       int           position;
 
-       ui = gth_browser_get_ui_manager (browser);
-       separator1 = gtk_ui_manager_get_widget (ui, "/MenuBar/OtherMenus/Bookmarks/EntryPointListSeparator");
-       separator2 = gtk_ui_manager_get_widget (ui, "/MenuBar/OtherMenus/Bookmarks/BookmarkListSeparator");
-       menu = gtk_widget_get_parent (separator1);
-       _gtk_container_remove_children (GTK_CONTAINER (menu), separator1, separator2);
+       data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
+       g_return_if_fail (data != NULL);
+
+       g_menu_remove_all (data->entry_points_menu);
 
-       position = 6;
        entry_points = gth_main_get_all_entry_points ();
        for (scan = entry_points; scan; scan = scan->next) {
                GthFileData *file_data = scan->data;
+               GMenuItem   *item;
+               char        *uri;
 
-               _gth_browser_add_file_menu_item_full (browser,
-                                                     menu,
-                                                     file_data->file,
-                                                     g_file_info_get_icon (file_data->info),
-                                                     g_file_info_get_display_name (file_data->info),
-                                                     GTH_ACTION_GO_TO,
-                                                     0,
-                                                     position++);
+               item = _g_menu_item_new_for_file (file_data->file, NULL);
+               uri = g_file_get_uri (file_data->file);
+               g_menu_item_set_action_and_target (item, "win.go-to-location", "s", uri);
+               g_menu_append_item (data->entry_points_menu, item);
+
+               g_free (uri);
+               g_object_unref (item);
        }
 
        _g_object_list_unref (entry_points);
@@ -352,28 +305,39 @@ void
 bookmarks__gth_browser_construct_cb (GthBrowser *browser)
 {
        BrowserData *data;
-       GError      *error = NULL;
 
        g_return_if_fail (GTH_IS_BROWSER (browser));
 
        data = g_new0 (BrowserData, 1);
        g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify) 
browser_data_free);
 
-       data->browser = browser;
+       g_action_map_add_action_entries (G_ACTION_MAP (browser),
+                                        actions,
+                                        G_N_ELEMENTS (actions),
+                                        browser);
+
+       {
+               GtkWidget  *button;
+               GtkBuilder *builder;
+
+               button = _gtk_menu_button_new_for_header_bar ();
+               gtk_widget_set_tooltip_text (button, _("Bookmarks"));
+               gtk_container_add (GTK_CONTAINER (button), gtk_image_new_from_icon_name 
("bookmarks-symbolic", GTK_ICON_SIZE_MENU));
 
-       data->actions = gtk_action_group_new ("Bookmarks Actions");
-       gtk_action_group_set_translation_domain (data->actions, NULL);
-       gtk_action_group_add_actions (data->actions,
-                                     bookmarks_action_entries,
-                                     bookmarks_action_entries_size,
-                                     browser);
-       gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), data->actions, 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_error_free (error);
+               builder = gtk_builder_new_from_resource 
("/org/gnome/gThumb/bookmarks/data/ui/bookmarks-menu.ui");
+               data->system_bookmarks_menu = G_MENU (gtk_builder_get_object (builder, "system-bookmarks"));
+               data->entry_points_menu = G_MENU (gtk_builder_get_object (builder, "entry-points"));
+               data->bookmarks_menu = G_MENU (gtk_builder_get_object (builder, "bookmarks"));
+
+               gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), G_MENU_MODEL 
(gtk_builder_get_object (builder, "bookmarks-menu")));
+
+               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);
+
+               g_object_unref (builder);
        }
 
+       data->browser = browser;
        data->bookmarks_changed_id = g_signal_connect (gth_main_get_default_monitor (),
                                                       "bookmarks-changed",
                                                       G_CALLBACK (bookmarks_changed_cb),
diff --git a/extensions/bookmarks/data/ui/Makefile.am b/extensions/bookmarks/data/ui/Makefile.am
index 7c46184..18df1fd 100644
--- a/extensions/bookmarks/data/ui/Makefile.am
+++ b/extensions/bookmarks/data/ui/Makefile.am
@@ -1,5 +1,5 @@
-uidir = $(pkgdatadir)/ui
-ui_DATA = bookmarks.ui
-EXTRA_DIST = $(ui_DATA)
+EXTRA_DIST =                   \
+       bookmarks.ui            \
+       bookmarks-menu.ui
 
 -include $(top_srcdir)/git.mk
diff --git a/extensions/bookmarks/data/ui/bookmarks-menu.ui b/extensions/bookmarks/data/ui/bookmarks-menu.ui
new file mode 100644
index 0000000..3511bb5
--- /dev/null
+++ b/extensions/bookmarks/data/ui/bookmarks-menu.ui
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <menu id="bookmarks-menu">
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Add Bookmark</attribute>
+        <attribute name="action">win.bookmarks-add</attribute>
+        <attribute name="accel"><![CDATA[<Ctrl>D]]></attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">_Edit Bookmarks…</attribute>
+        <attribute name="action">win.bookmarks-edit</attribute>
+        <attribute name="accel"><![CDATA[<Ctrl>B]]></attribute>
+      </item>
+    </section>
+    <submenu id="system-bookmarks">
+      <attribute name="label" translatable="yes">_System Bookmarks</attribute>
+    </submenu>
+    <section id="entry-points">
+    </section>
+    <section id="bookmarks">
+    </section>
+  </menu>
+</interface>
diff --git a/extensions/bookmarks/data/ui/bookmarks.ui b/extensions/bookmarks/data/ui/bookmarks.ui
index 9d6e1c2..ef9b6dd 100644
--- a/extensions/bookmarks/data/ui/bookmarks.ui
+++ b/extensions/bookmarks/data/ui/bookmarks.ui
@@ -1,29 +1,60 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.0 on Sat Oct 19 11:45:32 2013 -->
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy project-wide -->
+  <!-- interface-requires gtk+ 3.10 -->
   <object class="GtkDialog" id="bookmarks_dialog">
-    <property name="height_request">300</property>
+    <property name="height_request">400</property>
+    <property name="can_focus">False</property>
     <property name="border_width">5</property>
     <property name="title" translatable="yes">Bookmarks</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox7">
+      <object class="GtkBox" id="dialog-vbox7">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area7">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="bm_close_button">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkHBox" id="hbox57">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="border_width">6</property>
             <property name="spacing">24</property>
             <child>
               <object class="GtkVBox" id="vbox47">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkLabel" id="bm_bookmarks_label">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">_Bookmarks:</property>
                     <property name="use_underline">True</property>
@@ -35,48 +66,99 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkHBox" id="hbox90">
+                  <object class="GtkBox" id="box1">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
                     <child>
                       <object class="GtkScrolledWindow" id="bm_list_container">
                         <property name="width_request">250</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="hscrollbar_policy">automatic</property>
-                        <property name="vscrollbar_policy">automatic</property>
-                        <property name="window_placement">bottom-right</property>
+                        <property name="vexpand">True</property>
+                        <property name="window_placement">bottom-left</property>
                         <property name="shadow_type">etched-in</property>
                         <child>
                           <placeholder/>
                         </child>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <child>
+                      <object class="GtkToolbar" id="toolbar1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <style>
+                          <class name="inline-toolbar"/>
+                        </style>
+                        <property name="icon_size">2</property>
+                        <child>
+                          <object class="GtkToolButton" id="bm_go_to_button">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="tooltip_text" translatable="yes">Go to this location</property>
+                            <property name="label" translatable="yes">toolbutton1</property>
+                            <property name="use_underline">True</property>
+                            <property name="icon_name">go-jump-symbolic</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="homogeneous">True</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkToolButton" id="bm_remove_button">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="tooltip_text" translatable="yes">Remove</property>
+                            <property name="label" translatable="yes">toolbutton2</property>
+                            <property name="use_underline">True</property>
+                            <property name="icon_name">edit-delete-symbolic</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="homogeneous">True</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
             <child>
               <object class="GtkVBox" id="vbox1">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkVBox" id="vbox2">
                     <property name="visible">True</property>
-                    <property name="orientation">vertical</property>
+                    <property name="can_focus">False</property>
                     <property name="spacing">6</property>
                     <child>
                       <object class="GtkLabel" id="label1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="xalign">0</property>
                         <property name="label" translatable="yes">_Name</property>
                         <property name="use_underline">True</property>
@@ -87,18 +169,20 @@
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkAlignment" id="alignment1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkEntry" id="entry_name">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="invisible_char">&#x25CF;</property>
+                            <property name="invisible_char">●</property>
                             <property name="width_chars">30</property>
                           </object>
                         </child>
@@ -112,17 +196,19 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkVBox" id="vbox3">
                     <property name="visible">True</property>
-                    <property name="orientation">vertical</property>
+                    <property name="can_focus">False</property>
                     <property name="spacing">6</property>
                     <child>
                       <object class="GtkLabel" id="label2">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="xalign">0</property>
                         <property name="label" translatable="yes">_Location</property>
                         <property name="use_underline">True</property>
@@ -140,12 +226,13 @@
                     <child>
                       <object class="GtkAlignment" id="alignment2">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkEntry" id="entry_location">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="invisible_char">&#x25CF;</property>
+                            <property name="invisible_char">●</property>
                             <property name="width_chars">30</property>
                           </object>
                         </child>
@@ -159,77 +246,27 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
           </object>
           <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area7">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="bm_go_to_button">
-                <property name="label">gtk-jump-to</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="bm_remove_button">
-                <property name="label">gtk-remove</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="bm_close_button">
-                <property name="label">gtk-close</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">2</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
             <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>
     </child>
     <action-widgets>
-      <action-widget response="0">bm_go_to_button</action-widget>
-      <action-widget response="0">bm_remove_button</action-widget>
       <action-widget response="0">bm_close_button</action-widget>
     </action-widgets>
   </object>
diff --git a/extensions/bookmarks/dlg-bookmarks.c b/extensions/bookmarks/dlg-bookmarks.c
index 143f52e..a628ccf 100644
--- a/extensions/bookmarks/dlg-bookmarks.c
+++ b/extensions/bookmarks/dlg-bookmarks.c
@@ -340,7 +340,7 @@ dlg_bookmarks (GthBrowser *browser)
 
        data = g_new0 (DialogData, 1);
        data->browser = browser;
-       data->builder = _gtk_builder_new_from_file ("bookmarks.ui", "bookmarks");
+       data->builder = gtk_builder_new_from_resource ("/org/gnome/gThumb/bookmarks/data/ui/bookmarks.ui");
        data->last_selected_uri = NULL;
        data->entry_changed = FALSE;
 
diff --git a/extensions/bookmarks/gresource.xml b/extensions/bookmarks/gresource.xml
new file mode 100644
index 0000000..f1f9bc9
--- /dev/null
+++ b/extensions/bookmarks/gresource.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/gnome/gThumb/bookmarks">
+    <file compressed="true">data/ui/bookmarks.ui</file>
+    <file compressed="true">data/ui/bookmarks-menu.ui</file>
+  </gresource>
+</gresources>
diff --git a/gthumb/gth-browser-actions-callbacks.c b/gthumb/gth-browser-actions-callbacks.c
index 2673f9c..003f03a 100644
--- a/gthumb/gth-browser-actions-callbacks.c
+++ b/gthumb/gth-browser-actions-callbacks.c
@@ -57,99 +57,6 @@ gth_browser_activate_action_file_open (GtkAction  *action,
 
 
 void
-gth_browser_activate_action_file_revert (GtkAction  *action,
-                                        GthBrowser *browser)
-{
-       GthFileData *file_data;
-
-       file_data = gth_browser_get_current_file (browser);
-       if (file_data == NULL)
-               return;
-       g_file_info_set_attribute_boolean (file_data->info, "gth::file::is-modified", FALSE);
-       gth_browser_load_file (browser, file_data, TRUE);
-}
-
-
-void
-gth_browser_activate_action_file_save (GtkAction  *action,
-                                      GthBrowser *browser)
-{
-       GtkWidget *viewer_page;
-
-       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_action_file_save_as (GtkAction  *action,
-                                         GthBrowser *browser)
-{
-       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_action_file_new_window (GtkAction  *action,
-                                            GthBrowser *browser)
-{
-       GtkWidget *window;
-
-       window = gth_browser_new (gth_browser_get_location (browser), NULL);
-       gtk_window_present (GTK_WINDOW (window));
-}
-
-
-void
-gth_browser_activate_action_edit_preferences (GtkAction  *action,
-                                             GthBrowser *browser)
-{
-       dlg_preferences (browser);
-}
-
-
-void
-gth_browser_activate_action_go_up (GtkAction  *action,
-                                  GthBrowser *browser)
-{
-       gth_browser_go_up (browser, 1);
-}
-
-
-void
-gth_browser_activate_action_go_location (GtkAction  *action,
-                                        GthBrowser *browser)
-{
-       dlg_location (browser);
-}
-
-
-void
-gth_browser_activate_action_go_home (GtkAction  *action,
-                                    GthBrowser *browser)
-{
-       gth_browser_go_home (browser);
-}
-
-
-void
-gth_browser_activate_action_go_clear_history (GtkAction  *action,
-                                             GthBrowser *browser)
-{
-       gth_browser_clear_history (browser);
-}
-
-
-void
 gth_browser_activate_action_view_filter (GtkAction  *action,
                                         GthBrowser *browser)
 {
@@ -366,30 +273,6 @@ gth_browser_activate_action_edit_select_all (GtkAction  *action,
 }
 
 
-void
-gth_browser_activate_action_help_about (GtkAction *action,
-                                       gpointer   data)
-{
-
-}
-
-
-void
-gth_browser_activate_action_help_help (GtkAction *action,
-                                      gpointer   data)
-{
-       show_help_dialog (GTK_WINDOW (data), NULL);
-}
-
-
-void
-gth_browser_activate_action_help_shortcuts (GtkAction *action,
-                                           gpointer   data)
-{
-       show_help_dialog (GTK_WINDOW (data), "gthumb-shortcuts");
-}
-
-
 /* -- GAction callbacks -- */
 
 
@@ -608,6 +491,20 @@ gth_browser_activate_go_to_history_pos (GSimpleAction *action,
 
 
 void
+gth_browser_activate_go_to_location (GSimpleAction *action,
+                                    GVariant      *parameter,
+                                    gpointer       user_data)
+{
+       GFile *file;
+
+       file = g_file_new_for_uri (g_variant_get_string (parameter, NULL));
+       gth_browser_go_to (GTH_BROWSER (user_data), file, NULL);
+
+       g_object_unref (file);
+}
+
+
+void
 gth_browser_activate_go_home (GSimpleAction *action,
                              GVariant      *parameter,
                              gpointer       user_data)
diff --git a/gthumb/gth-browser-actions-callbacks.h b/gthumb/gth-browser-actions-callbacks.h
index fc56f1a..04c8290 100644
--- a/gthumb/gth-browser-actions-callbacks.h
+++ b/gthumb/gth-browser-actions-callbacks.h
@@ -26,23 +26,11 @@
 
 #define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
 
-DEFINE_ACTION(gth_browser_activate_action_bookmarks_add)
-DEFINE_ACTION(gth_browser_activate_action_bookmarks_edit)
-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)
 DEFINE_ACTION(gth_browser_activate_action_file_open)
-DEFINE_ACTION(gth_browser_activate_action_file_new_window)
-DEFINE_ACTION(gth_browser_activate_action_file_revert)
-DEFINE_ACTION(gth_browser_activate_action_file_save)
-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_up)
-DEFINE_ACTION(gth_browser_activate_action_go_location)
-DEFINE_ACTION(gth_browser_activate_action_go_clear_history)
-DEFINE_ACTION(gth_browser_activate_action_go_home)
 DEFINE_ACTION(gth_browser_activate_action_view_sort_by)
 DEFINE_ACTION(gth_browser_activate_action_view_filter)
 DEFINE_ACTION(gth_browser_activate_action_view_filterbar)
@@ -75,6 +63,7 @@ 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_go_to_location)
 DEF_ACTION_CALLBACK (gth_browser_activate_go_home)
 DEF_ACTION_CALLBACK (gth_browser_activate_go_up)
 DEF_ACTION_CALLBACK (gth_browser_activate_open_location)
diff --git a/gthumb/gth-browser-actions-entries.h b/gthumb/gth-browser-actions-entries.h
index 28510a1..0cb01fd 100644
--- a/gthumb/gth-browser-actions-entries.h
+++ b/gthumb/gth-browser-actions-entries.h
@@ -36,6 +36,7 @@ static const GActionEntry gth_browser_actions[] = {
        { "go-forward", gth_browser_activate_go_forward },
        { "go-home", gth_browser_activate_go_home },
        { "go-to-history-position", gth_browser_activate_go_to_history_pos, "s", "''", NULL },
+       { "go-to-location", gth_browser_activate_go_to_location, "s", "''", NULL },
        { "go-up", gth_browser_activate_go_up },
        { "open-location", gth_browser_activate_open_location },
        { "revert-to-saved", gth_browser_activate_revert_to_saved },
@@ -49,41 +50,16 @@ static GthActionEntryExt gth_browser_action_entries[] = {
        { "FileMenu", NULL, N_("_File") },
        { "EditMenu", NULL, N_("_Edit") },
        { "ViewMenu", NULL, N_("_View") },
-       { "HelpMenu", NULL, N_("_Help") },
        { "OpenWithMenu", NULL, N_("Open _With") },
        { "ImportMenu", NULL, N_("I_mport From") },
        { "ExportMenu", NULL, N_("E_xport To") },
 
-       { "File_NewWindow", "window-new",
-         N_("New _Window"), "<control>N",
-         N_("Open another window"),
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_file_new_window) },
-
        { "File_Open", GTK_STOCK_OPEN,
          NULL, NULL,
          NULL,
          GTH_ACTION_FLAG_NONE,
          G_CALLBACK (gth_browser_activate_action_file_open) },
 
-       { "File_Save", GTK_STOCK_SAVE,
-         NULL, "<control>S",
-         NULL,
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_file_save) },
-
-       { "File_SaveAs", GTK_STOCK_SAVE_AS,
-         NULL, NULL,
-         NULL,
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_file_save_as) },
-
-       { "File_Revert", GTK_STOCK_REVERT_TO_SAVED,
-         NULL, "F4",
-         NULL,
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_file_revert) },
-
        { "Folder_Open", GTK_STOCK_OPEN,
          N_("Open"), "",
          NULL,
@@ -96,12 +72,6 @@ static GthActionEntryExt gth_browser_action_entries[] = {
          GTH_ACTION_FLAG_NONE,
          G_CALLBACK (gth_browser_activate_action_folder_open_in_new_window) },
 
-       { "Edit_Preferences", GTK_STOCK_PREFERENCES,
-         NULL, NULL,
-         N_("Edit various preferences"),
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_edit_preferences) },
-
        { "Edit_SelectAll", GTK_STOCK_SELECT_ALL,
          NULL, "<control>A",
          NULL,
@@ -150,24 +120,6 @@ static GthActionEntryExt gth_browser_action_entries[] = {
          GTH_ACTION_FLAG_NONE,
          G_CALLBACK (gth_browser_activate_action_view_fullscreen) },
 
-       { "Go_Location", NULL,
-         N_("_Location..."), "<control>L",
-         N_("Specify a location to open"),
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_go_location) },
-
-       { "Go_Home", NULL,
-         NULL, "<alt>Home",
-         NULL,
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_go_home) },
-
-       { "Go_Clear_History", GTK_STOCK_CLEAR,
-         N_("_Delete History"), NULL,
-         N_("Delete the list of visited locations"),
-         GTH_ACTION_FLAG_NONE,
-         G_CALLBACK (gth_browser_activate_action_go_clear_history) },
-
        { "Browser_Tools", "palette",
          N_("Edit"), NULL,
          N_("Edit file"),
diff --git a/gthumb/gth-browser-ui.h b/gthumb/gth-browser-ui.h
index d056efa..37fef24 100644
--- a/gthumb/gth-browser-ui.h
+++ b/gthumb/gth-browser-ui.h
@@ -28,11 +28,6 @@ static const char *fixed_ui_info =
 "<ui>"
 "  <menubar name='MenuBar'>"
 "    <menu name='File' action='FileMenu'>"
-"      <menuitem action='File_NewWindow'/>"
-"      <separator/>"
-"      <menuitem action='File_Save'/>"
-"      <menuitem action='File_SaveAs'/>"
-"      <menuitem action='File_Revert'/>"
 "      <placeholder name='File_Actions'/>"
 "      <placeholder name='File_Actions_2'/>"
 "      <separator/>"
@@ -61,8 +56,6 @@ static const char *fixed_ui_info =
 "      <placeholder name='Folder_Actions_2'/>"
 "      <separator/>"
 "      <placeholder name='Edit_Actions'/>"
-"      <separator/>"
-"      <menuitem action='Edit_Preferences'/>"
 "    </menu>"
 "    <menu name='View' action='ViewMenu'>"
 "      <menuitem action='View_Stop'/>"
@@ -135,7 +128,6 @@ static const char *fixed_ui_info =
 "    <separator/>"
 "    <menu name='OpenWith' action='OpenWithMenu'>"
 "    </menu>"
-"    <menuitem action='File_SaveAs'/>"
 "    <placeholder name='Open_Actions'/>"
 "    <separator/>"
 "    <placeholder name='File_Actions'/>"
@@ -152,7 +144,6 @@ static const char *fixed_ui_info =
 "    <separator/>"
 "    <menu name='OpenWith' action='OpenWithMenu'>"
 "    </menu>"
-"    <menuitem action='File_SaveAs'/>"
 "    <placeholder name='Open_Actions'/>"
 "    <separator/>"
 "    <placeholder name='File_Actions'/>"
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 11693e2..cfca951 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -594,9 +594,6 @@ gth_browser_update_sensitivity (GthBrowser *browser)
        n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view 
(browser)));
 
        _gth_browser_set_action_sensitive (browser, "File_Open", n_selected == 1);
-       _gth_browser_set_action_sensitive (browser, "File_Save", viewer_can_save && modified);
-       _gth_browser_set_action_sensitive (browser, "File_SaveAs", viewer_can_save);
-       _gth_browser_set_action_sensitive (browser, "File_Revert", viewer_can_save && modified);
        _gth_browser_set_action_sensitive (browser, "View_Stop", browser->priv->fullscreen || 
(browser->priv->activity_ref > 0));
        _gth_browser_set_action_sensitive (browser, "View_Prev", current_file_pos > 0);
        _gth_browser_set_action_sensitive (browser, "View_Next", (current_file_pos != -1) && 
(current_file_pos < n_files - 1));
@@ -721,23 +718,11 @@ _gth_browser_history_menu (GthBrowser *browser)
                     scan;
                     scan = scan->next, i++)
                {
-                       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);
+                       GFile     *file = scan->data;
+                       GMenuItem *item;
+                       char      *target;
 
-                       item = g_menu_item_new (label, NULL);
+                       item = _g_menu_item_new_for_file (file, 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);
@@ -748,8 +733,7 @@ _gth_browser_history_menu (GthBrowser *browser)
                        }
 
                        g_free (target);
-                       g_free (label);
-                       g_object_unref (file_source);
+                       g_object_unref (item);
                }
        }
 }
@@ -6816,3 +6800,37 @@ gth_browser_restore_state (GthBrowser *browser)
 
        return TRUE;
 }
+
+
+GMenuItem *
+_g_menu_item_new_for_file (GFile      *file,
+                          const char *custom_label)
+{
+       GMenuItem     *item;
+       GthFileSource *file_source;
+       GFileInfo     *info;
+
+       item = g_menu_item_new (NULL, NULL);
+       file_source = gth_main_get_file_source (file);
+       info = gth_file_source_get_file_info (file_source, file, GFILE_DISPLAY_ATTRIBUTES);
+       if (info != NULL) {
+               g_menu_item_set_label (item, (custom_label != NULL) ? custom_label : 
g_file_info_get_display_name (info));
+               g_menu_item_set_icon (item, g_file_info_get_icon (info));
+       }
+       else {
+               char  *label;
+               GIcon *icon;
+
+               label = _g_file_get_display_name (file);
+               icon = _g_file_get_icon (file);
+               g_menu_item_set_label (item, (custom_label != NULL) ? custom_label : label);
+               g_menu_item_set_icon (item, icon);
+
+               g_object_unref (icon);
+               g_free (label);
+       }
+
+       _g_object_unref (info);
+
+       return item;
+}
diff --git a/gthumb/gth-browser.h b/gthumb/gth-browser.h
index 9692ec2..5578cbc 100644
--- a/gthumb/gth-browser.h
+++ b/gthumb/gth-browser.h
@@ -246,6 +246,11 @@ void             _gth_browser_add_file_menu_item_full (GthBrowser *browser,
                                                       int         steps,
                                                       int         position);
 
+/* utilities */
+
+GMenuItem *    _g_menu_item_new_for_file               (GFile      *file,
+                                                        const char *custom_label);
+
 G_END_DECLS
 
 #endif /* GTH_BROWSER_H */
diff --git a/gthumb/resources/gears-menu.ui b/gthumb/resources/gears-menu.ui
index eff1b3c..6873acd 100644
--- a/gthumb/resources/gears-menu.ui
+++ b/gthumb/resources/gears-menu.ui
@@ -4,6 +4,11 @@
   <menu id="menu">
     <section>
       <item>
+        <attribute name="label" translatable="yes">New _Window</attribute>
+        <attribute name="action">app.new-window</attribute>
+        <attribute name="accel"><![CDATA[<Ctrl>N]]></attribute>
+      </item>
+      <item>
         <attribute name="label" translatable="yes">_Open…</attribute>
         <attribute name="action">win.open-location</attribute>
         <attribute name="accel"><![CDATA[<Ctrl>O]]></attribute>


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