From c90eebc2d2861539b32483b85040a2cd785d080a Mon Sep 17 00:00:00 2001 From: Colin Clark Date: Sat, 20 Jan 2024 16:02:25 +0000 Subject: [PATCH] Fix #1184: Put main menu items into one hamburger menu https://github.com/BestImageViewer/geeqie/issues/1184 A "hamburger" style menu icon is located to the left of the path entry box. Key F10 activates the menu. --- doc/docbook/GuideOptionsGeneral.xml | 6 +- src/layout-util.cc | 25 +- src/layout.cc | 27 +- src/preferences.cc | 6 +- src/ui/menu.ui | 464 ++++++++++++++-------------- 5 files changed, 266 insertions(+), 262 deletions(-) diff --git a/doc/docbook/GuideOptionsGeneral.xml b/doc/docbook/GuideOptionsGeneral.xml index 9d2a1a6b..d401cc7e 100644 --- a/doc/docbook/GuideOptionsGeneral.xml +++ b/doc/docbook/GuideOptionsGeneral.xml @@ -239,9 +239,9 @@ -
- Expand menu and toolbar - Expand the menu and toolbar to the full width of the window. +
+ Expand toolbar + Expand the toolbar to the full width of the window. Geeqie must be restarted for changes to take effect. diff --git a/src/layout-util.cc b/src/layout-util.cc index 4e0118c8..38a9a036 100644 --- a/src/layout-util.cc +++ b/src/layout-util.cc @@ -2036,7 +2036,7 @@ static void layout_menu_collection_recent_update(LayoutWindow *lw) menu_item_add(menu, _("Empty"), nullptr, nullptr); } - recent = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/FileMenu/OpenRecent"); + recent = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/OpenMenu/FileMenu/OpenRecent"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(recent), menu); gtk_widget_set_sensitive(recent, (n != 0)); } @@ -2092,7 +2092,7 @@ static void layout_menu_collection_open_update(LayoutWindow *lw) menu_item_add(menu, _("Empty"), nullptr, nullptr); } - recent = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/FileMenu/OpenCollection"); + recent = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/OpenMenu/FileMenu/OpenCollection"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(recent), menu); gtk_widget_set_sensitive(recent, (n != 0)); } @@ -2251,7 +2251,7 @@ static void layout_menu_new_window_update(LayoutWindow *lw) list = layout_window_menu_list(list); - menu = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/WindowsMenu/NewWindow"); + menu = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/OpenMenu/WindowsMenu/NewWindow"); sub_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu)); children = gtk_container_get_children(GTK_CONTAINER(sub_menu)); @@ -2396,7 +2396,7 @@ static void layout_menu_windows_menu_cb(GtkWidget *, gpointer data) GList *children, *iter; gint i; - menu = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/WindowsMenu/"); + menu = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/OpenMenu/WindowsMenu/"); sub_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu)); /* disable Delete for temporary windows */ @@ -2427,7 +2427,7 @@ static void layout_menu_view_menu_cb(GtkWidget *, gpointer data) gint i; FileData *fd; - menu = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/ViewMenu/"); + menu = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/OpenMenu/ViewMenu/"); sub_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu)); fd = layout_image_get_fd(lw); @@ -2696,6 +2696,7 @@ static GtkActionEntry menu_entries[] = { { "NextPage", GQ_ICON_FORWARD_PAGE, N_("_Next Page"), nullptr, N_("Next Page of multi-page image"), CB(layout_menu_page_next_cb) }, { "OpenArchive", GQ_ICON_OPEN, N_("Open archive"), nullptr, N_("Open archive"), CB(layout_menu_open_archive_cb) }, { "OpenCollection", GQ_ICON_OPEN, N_("_Open collection..."), "O", N_("Open collection..."), nullptr }, + { "OpenMenu", nullptr, N_("☰"), nullptr, nullptr, nullptr }, { "OpenRecent", nullptr, N_("Open recen_t"), nullptr, N_("Open recent collection"), nullptr }, { "OpenWith", GQ_ICON_OPEN_WITH, N_("Open With..."), nullptr, N_("Open With..."), CB(layout_menu_open_with_cb) }, { "OrientationMenu", nullptr, N_("_Orientation"), nullptr, nullptr, nullptr }, @@ -2881,7 +2882,8 @@ static void layout_actions_setup_marks(LayoutWindow *lw) GString *desc = g_string_new( "" " " - " "); + " " + " "); for (mark = 1; mark <= FILEDATA_MARKS_SIZE; mark++) { @@ -2916,6 +2918,7 @@ static void layout_actions_setup_marks(LayoutWindow *lw) } g_string_append(desc, + " " " " " "); for (mark = 1; mark <= FILEDATA_MARKS_SIZE; mark++) @@ -3045,7 +3048,8 @@ static void layout_actions_setup_editors(LayoutWindow *lw) /* lw->action_group_editors contains translated entries, no translate func is required */ desc = g_string_new( "" - " "); + " " + " "); editors_list = editor_list_get(); @@ -3079,7 +3083,8 @@ static void layout_actions_setup_editors(LayoutWindow *lw) layout_actions_editor_add(desc, nullptr, old_path); g_list_free_full(old_path, g_free); - g_string_append(desc, " " + g_string_append(desc, "" + " " "" ); error = nullptr; @@ -3268,18 +3273,14 @@ GtkWidget *layout_actions_toolbar(LayoutWindow *lw, ToolbarType type) GtkWidget *layout_actions_menu_tool_bar(LayoutWindow *lw) { - GtkWidget *menu_bar; GtkWidget *toolbar; if (lw->menu_tool_bar) return lw->menu_tool_bar; - menu_bar = layout_actions_menu_bar(lw); - DEBUG_NAME(menu_bar); toolbar = layout_actions_toolbar(lw, TOOLBAR_MAIN); DEBUG_NAME(toolbar); lw->menu_tool_bar = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); - gq_gtk_box_pack_start(GTK_BOX(lw->menu_tool_bar), menu_bar, FALSE, FALSE, 0); gq_gtk_box_pack_start(GTK_BOX(lw->menu_tool_bar), toolbar, FALSE, FALSE, 0); g_object_ref(lw->menu_tool_bar); diff --git a/src/layout.cc b/src/layout.cc index 380905c2..2245f94e 100644 --- a/src/layout.cc +++ b/src/layout.cc @@ -323,8 +323,9 @@ static GtkWidget *layout_tool_setup(LayoutWindow *lw) { GtkWidget *box; GtkWidget *box_folders; - GtkWidget *menu_bar; + GtkWidget *box_menu_tabcomp; GtkWidget *menu_tool_bar; + GtkWidget *open_menu; GtkWidget *scd; GtkWidget *tabcomp; GtkWidget *toolbar; @@ -333,12 +334,7 @@ static GtkWidget *layout_tool_setup(LayoutWindow *lw) if (!options->expand_menu_toolbar) { - menu_bar = layout_actions_menu_bar(lw); - toolbar = layout_actions_toolbar(lw, TOOLBAR_MAIN); - gtk_widget_show(menu_bar); - - gq_gtk_box_pack_start(GTK_BOX(box), menu_bar, FALSE, FALSE, 0); gq_gtk_box_pack_start(GTK_BOX(box), toolbar, FALSE, FALSE, 0); } else @@ -349,18 +345,24 @@ static GtkWidget *layout_tool_setup(LayoutWindow *lw) gq_gtk_box_pack_start(GTK_BOX(lw->main_box), lw->menu_tool_bar, FALSE, FALSE, 0); } - tabcomp = tab_completion_new_with_history(&lw->path_entry, nullptr, "path_list", -1, - layout_path_entry_cb, lw); + box_menu_tabcomp = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_widget_show(box_menu_tabcomp); + + open_menu = layout_actions_menu_bar(lw); + gtk_widget_set_tooltip_text(open_menu, "Open application menu"); + + tabcomp = tab_completion_new_with_history(&lw->path_entry, nullptr, "path_list", -1, layout_path_entry_cb, lw); DEBUG_NAME(tabcomp); tab_completion_add_tab_func(lw->path_entry, layout_path_entry_tab_cb, lw); tab_completion_add_append_func(lw->path_entry, layout_path_entry_tab_append_cb, lw); - gq_gtk_box_pack_start(GTK_BOX(box), tabcomp, FALSE, FALSE, 0); + gq_gtk_box_pack_start(GTK_BOX(box_menu_tabcomp), open_menu, FALSE, FALSE, 0); + gq_gtk_box_pack_start(GTK_BOX(box_menu_tabcomp), tabcomp, TRUE, TRUE, 0); + gq_gtk_box_pack_start(GTK_BOX(box), box_menu_tabcomp, FALSE, FALSE, 0); gtk_widget_show(tabcomp); gtk_widget_set_has_tooltip(GTK_WIDGET(tabcomp), TRUE); g_signal_connect(G_OBJECT(tabcomp), "query_tooltip", G_CALLBACK(path_entry_tooltip_cb), lw); - g_signal_connect(G_OBJECT(gtk_widget_get_parent(gtk_widget_get_parent(lw->path_entry))), "changed", - G_CALLBACK(layout_path_entry_changed_cb), lw); + g_signal_connect(G_OBJECT(gtk_widget_get_parent(gtk_widget_get_parent(lw->path_entry))), "changed", G_CALLBACK(layout_path_entry_changed_cb), lw); box_folders = GTK_WIDGET(gtk_paned_new(GTK_ORIENTATION_HORIZONTAL)); DEBUG_NAME(box_folders); @@ -382,8 +384,7 @@ static GtkWidget *layout_tool_setup(LayoutWindow *lw) gtk_widget_show(box_folders); - g_signal_connect(G_OBJECT(box_folders), "notify::position", - G_CALLBACK(layout_box_folders_changed_cb), lw); + g_signal_connect(G_OBJECT(box_folders), "notify::position", G_CALLBACK(layout_box_folders_changed_cb), lw); gtk_widget_show(box); diff --git a/src/preferences.cc b/src/preferences.cc index 080613b8..0ef13c94 100644 --- a/src/preferences.cc +++ b/src/preferences.cc @@ -2143,11 +2143,11 @@ static void config_tab_general(GtkWidget *notebook) pref_spacer(group, PREF_PAD_GROUP); - group = pref_group_new(vbox, FALSE, _("Expand menu and toolbar"), GTK_ORIENTATION_VERTICAL); + group = pref_group_new(vbox, FALSE, _("Expand toolbar"), GTK_ORIENTATION_VERTICAL); - pref_checkbox_new_int(group, _("Expand menu and toolbar (NOTE! Geeqie must be restarted for change to take effect)"), + pref_checkbox_new_int(group, _("Expand toolbar (NOTE! Geeqie must be restarted for change to take effect)"), options->expand_menu_toolbar, &c_options->expand_menu_toolbar); - gtk_widget_set_tooltip_text(group, _("Expand the menu and toolbar to the full width of the window")); + gtk_widget_set_tooltip_text(group, _("Expand the toolbar to the full width of the window")); pref_spacer(group, PREF_PAD_GROUP); diff --git a/src/ui/menu.ui b/src/ui/menu.ui index a0f081ba..b8d1fc99 100644 --- a/src/ui/menu.ui +++ b/src/ui/menu.ui @@ -1,256 +1,258 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - + + - - + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - + - - - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - -- 2.20.1