</varlistentry>
</variablelist>
</section>
+ <section id="MenuStyle">
+ <title>Menu style</title>
+ <para>Use a ☰ "hamburger" style menu button instead of the standard menu across the top of the frame.</para>
+ <note>
+ <para>Geeqie must be restarted for changes to take effect.</para>
+ </note>
+ </section>
<section id="ExpandToolbar">
- <title>Expand toolbar</title>
- <para>Expand the toolbar to the full width of the window.</para>
+ <title>Expand menu/toolbar</title>
+ <para>Expand the menu/toolbar to the full width of the window.</para>
<note>
<para>Geeqie must be restarted for changes to take effect.</para>
</note>
menu_item_add(menu, _("Empty"), nullptr, nullptr);
}
- recent = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/OpenMenu/FileMenu/OpenRecent");
+ recent = gtk_ui_manager_get_widget(lw->ui_manager, options->hamburger_menu ? "/MainMenu/OpenMenu/FileMenu/OpenRecent" : "/MainMenu/FileMenu/OpenRecent");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(recent), menu);
gtk_widget_set_sensitive(recent, (n != 0));
}
menu_item_add(menu, _("Empty"), nullptr, nullptr);
}
- recent = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/OpenMenu/FileMenu/OpenCollection");
+ recent = gtk_ui_manager_get_widget(lw->ui_manager, options->hamburger_menu ? "/MainMenu/OpenMenu/FileMenu/OpenCollection" : "/MainMenu/FileMenu/OpenCollection");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(recent), menu);
gtk_widget_set_sensitive(recent, (n != 0));
}
list = layout_window_menu_list(list);
- menu = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/OpenMenu/WindowsMenu/NewWindow");
+ menu = gtk_ui_manager_get_widget(lw->ui_manager, options->hamburger_menu ? "/MainMenu/OpenMenu/WindowsMenu/NewWindow" : "/MainMenu/WindowsMenu/NewWindow");
sub_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu));
children = gtk_container_get_children(GTK_CONTAINER(sub_menu));
GList *children, *iter;
gint i;
- menu = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/OpenMenu/WindowsMenu/");
+ menu = gtk_ui_manager_get_widget(lw->ui_manager, options->hamburger_menu ? "/MainMenu/OpenMenu/WindowsMenu/" : "/MainMenu/WindowsMenu/");
+
sub_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu));
/* disable Delete for temporary windows */
gint i;
FileData *fd;
- menu = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu/OpenMenu/ViewMenu/");
+ menu = gtk_ui_manager_get_widget(lw->ui_manager, options->hamburger_menu ? "/MainMenu/OpenMenu/ViewMenu/" : "/MainMenu/ViewMenu/");
sub_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu));
fd = layout_image_get_fd(lw);
GError *error;
GString *desc = g_string_new(
"<ui>"
- " <menubar name='MainMenu'>"
- " <menu action='OpenMenu'>"
- " <menu action='SelectMenu'>");
+ " <menubar name='MainMenu'>");
+
+ if (options->hamburger_menu)
+ {
+ g_string_append(desc, " <menu action='OpenMenu'>");
+ }
+ g_string_append(desc, " <menu action='SelectMenu'>");
for (mark = 1; mark <= FILEDATA_MARKS_SIZE; mark++)
{
}
g_string_append(desc,
- " </menu>"
- " </menu>"
- " </menubar>");
+ " </menu>");
+ if (options->hamburger_menu)
+ {
+ g_string_append(desc, " </menu>");
+ }
+ g_string_append(desc, " </menubar>");
+
for (mark = 1; mark <= FILEDATA_MARKS_SIZE; mark++)
{
gint i = (mark < 10 ? mark : 0);
/* lw->action_group_editors contains translated entries, no translate func is required */
desc = g_string_new(
"<ui>"
- " <menubar name='MainMenu'>"
- " <menu action='OpenMenu'>");
+ " <menubar name='MainMenu'>");
+
+ if (options->hamburger_menu)
+ {
+ g_string_append(desc, " <menu action='OpenMenu'>");
+ }
editors_list = editor_list_get();
layout_actions_editor_add(desc, nullptr, old_path);
g_list_free_full(old_path, g_free);
- g_string_append(desc, "</menu>"
- " </menubar>"
+ if (options->hamburger_menu)
+ {
+ g_string_append(desc, "</menu>");
+ }
+
+ g_string_append(desc," </menubar>"
"</ui>" );
error = nullptr;
DEBUG_1("%s layout_actions_setup: add menu", get_exec_time());
error = nullptr;
- if (!gtk_ui_manager_add_ui_from_resource(lw->ui_manager, GQ_RESOURCE_PATH_UI "/menu.ui", &error))
+
+ if (!gtk_ui_manager_add_ui_from_resource(lw->ui_manager, options->hamburger_menu ? GQ_RESOURCE_PATH_UI "/menu-hamburger.ui" : GQ_RESOURCE_PATH_UI "/menu-classic.ui" , &error))
{
g_message("building menus failed: %s", error->message);
g_error_free(error);
GtkWidget *layout_actions_menu_tool_bar(LayoutWindow *lw)
{
+ GtkWidget *menu_bar;
GtkWidget *toolbar;
if (lw->menu_tool_bar) return lw->menu_tool_bar;
DEBUG_NAME(toolbar);
lw->menu_tool_bar = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+ if (!options->hamburger_menu)
+ {
+ menu_bar = layout_actions_menu_bar(lw);
+ DEBUG_NAME(menu_bar);
+ 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);
GtkWidget *box;
GtkWidget *box_folders;
GtkWidget *box_menu_tabcomp;
+ GtkWidget *menu_bar;
GtkWidget *menu_tool_bar;
GtkWidget *open_menu;
GtkWidget *scd;
if (!options->expand_menu_toolbar)
{
+ if (!options->hamburger_menu)
+ {
+ menu_bar = layout_actions_menu_bar(lw);
+
+ gtk_widget_show(menu_bar);
+
+ gq_gtk_box_pack_start(GTK_BOX(box), menu_bar, FALSE, FALSE, 0);
+ }
+
toolbar = layout_actions_toolbar(lw, TOOLBAR_MAIN);
gq_gtk_box_pack_start(GTK_BOX(box), toolbar, FALSE, FALSE, 0);
}
gq_gtk_box_pack_start(GTK_BOX(lw->main_box), lw->menu_tool_bar, FALSE, FALSE, 0);
}
- 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_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);
+
+ if (options->hamburger_menu)
+ {
+ 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");
+ 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);
+ }
+ else
+ {
+ gq_gtk_box_pack_start(GTK_BOX(box), 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);
options->show_star_rating = FALSE;
options->show_predefined_keyword_tree = TRUE;
options->expand_menu_toolbar = FALSE;
+ options->hamburger_menu = FALSE;
options->slideshow.delay = 50;
options->slideshow.random = FALSE;
gboolean show_predefined_keyword_tree;
gboolean overunderexposed;
gboolean expand_menu_toolbar;
+ gboolean hamburger_menu;
/* various */
gboolean tree_descend_subdirs;
options->show_predefined_keyword_tree = c_options->show_predefined_keyword_tree;
options->expand_menu_toolbar = c_options->expand_menu_toolbar;
+ options->hamburger_menu = c_options->hamburger_menu;
options->selectable_bars.menu_bar = c_options->selectable_bars.menu_bar;
options->selectable_bars.tool_bar = c_options->selectable_bars.tool_bar;
options->update_on_time_change, &c_options->update_on_time_change);
+ pref_spacer(group, PREF_PAD_GROUP);
+
+ group = pref_group_new(vbox, FALSE, _("Menu style"), GTK_ORIENTATION_VERTICAL);
+
+ pref_checkbox_new_int(group, _("☰ style menu button (NOTE! Geeqie must be restarted for change to take effect)"),
+ options->hamburger_menu, &c_options->hamburger_menu);
+ gtk_widget_set_tooltip_text(group, _("Use a ☰ style menu button instead of the classic style across the top of the frame"));
+
pref_spacer(group, PREF_PAD_GROUP);
group = pref_group_new(vbox, FALSE, _("Expand toolbar"), GTK_ORIENTATION_VERTICAL);
- pref_checkbox_new_int(group, _("Expand toolbar (NOTE! Geeqie must be restarted for change to take effect)"),
+ pref_checkbox_new_int(group, _("Expand menu/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 toolbar to the full width of the window"));
+ gtk_widget_set_tooltip_text(group, _("Expand the menu/toolbar to the full width of the window"));
pref_spacer(group, PREF_PAD_GROUP);
WRITE_NL(); WRITE_BOOL(*options, save_dialog_window_positions);
WRITE_NL(); WRITE_BOOL(*options, show_window_ids);
WRITE_NL(); WRITE_BOOL(*options, expand_menu_toolbar);
+ WRITE_NL(); WRITE_BOOL(*options, hamburger_menu);
WRITE_NL(); WRITE_UINT(*options, log_window_lines);
WRITE_NL(); WRITE_BOOL(*options, log_window.timer_data);
if (READ_BOOL(*options, save_dialog_window_positions)) continue;
if (READ_BOOL(*options, show_window_ids)) continue;
if (READ_BOOL(*options, expand_menu_toolbar)) continue;
+ if (READ_BOOL(*options, hamburger_menu)) continue;
if (READ_INT(*options, log_window_lines)) continue;
if (READ_BOOL(*options, log_window.timer_data)) continue;
--- /dev/null
+<ui>
+ <menubar name="MainMenu">
+ <menu action="FileMenu">
+ <menuitem action="NewCollection"/>
+ <menuitem action="OpenCollection"/>
+ <menuitem action="OpenRecent"/>
+ <placeholder name="OpenSection"/>
+ <separator/>
+ <menuitem action="Search"/>
+ <menuitem action="FindDupes"/>
+ <placeholder name="SearchSection"/>
+ <separator/>
+ <menuitem action="Print"/>
+ <placeholder name="PrintSection"/>
+ <separator/>
+ <menuitem action="NewFolder"/>
+ <menuitem action="Copy"/>
+ <menuitem action="Move"/>
+ <menuitem action="Rename"/>
+ <menuitem action="OpenWith"/>
+ <separator/>
+ <menuitem action="Delete"/>
+ <menuitem action="PermanentDelete"/>
+ <separator/>
+ <placeholder name="FileOpsSection"/>
+ <separator/>
+ <placeholder name="QuitSection"/>
+ <menuitem action="Quit"/>
+ <separator/>
+ </menu>
+ <menu action="GoMenu">
+ <menuitem action="FirstImage"/>
+ <menuitem action="PrevImage"/>
+ <menuitem action="NextImage"/>
+ <menuitem action="LastImage"/>
+ <menuitem action="ImageBack"/>
+ <menuitem action="ImageForward"/>
+ <separator/>
+ <menuitem action="Back"/>
+ <menuitem action="Forward"/>
+ <menuitem action="Up"/>
+ <menuitem action="Home"/>
+ <separator/>
+ <menuitem action="FirstPage"/>
+ <menuitem action="LastPage"/>
+ <menuitem action="NextPage"/>
+ <menuitem action="PrevPage"/>
+ </menu>
+ <menu action="SelectMenu">
+ <menuitem action="SelectAll"/>
+ <menuitem action="SelectNone"/>
+ <menuitem action="SelectInvert"/>
+ <menuitem action="RectangularSelection"/>
+ <menuitem action="ShowFileFilter"/>
+ <placeholder name="SelectSection"/>
+ <separator/>
+ <menuitem action="CopyPath"/>
+ <menuitem action="CopyPathUnquoted"/>
+ <placeholder name="ClipboardSection"/>
+ <separator/>
+ <menuitem action="ShowMarks"/>
+ <menuitem action="ClearMarks"/>
+ <placeholder name="MarksSection"/>
+ <separator/>
+ </menu>
+ <menu action="EditMenu">
+ <placeholder name="EditSection"/>
+ <separator/>
+ <menu action="OrientationMenu">
+ <menuitem action="RotateCW"/>
+ <menuitem action="RotateCCW"/>
+ <menuitem action="Rotate180"/>
+ <menuitem action="Mirror"/>
+ <menuitem action="Flip"/>
+ <menuitem action="AlterNone"/>
+ <separator/>
+ <menuitem action="ExifRotate"/>
+ <separator/>
+ <menuitem action="WriteRotation"/>
+ <menuitem action="WriteRotationKeepDate"/>
+ <separator/>
+ </menu>
+ <menu action="RatingMenu">
+ <menuitem action="Rating0"/>
+ <menuitem action="Rating1"/>
+ <menuitem action="Rating2"/>
+ <menuitem action="Rating3"/>
+ <menuitem action="Rating4"/>
+ <menuitem action="Rating5"/>
+ <menuitem action="RatingM1"/>
+ <separator/>
+ </menu>
+ <menuitem action="SaveMetadata"/>
+ <menuitem action="KeywordAutocomplete"/>
+ <placeholder name="PropertiesSection"/>
+ <separator/>
+ <menuitem action="DrawRectangle"/>
+ <separator/>
+ <menuitem action="Preferences"/>
+ <menuitem action="Plugins"/>
+ <menuitem action="LayoutConfig"/>
+ <menuitem action="Maintenance"/>
+ <placeholder name="PreferencesSection"/>
+ <separator/>
+ <separator/>
+ </menu>
+ <menu action="PluginsMenu"/>
+ <menu action="ViewMenu">
+ <menuitem action="ViewInNewWindow"/>
+ <menuitem action="PanView"/>
+ <menuitem action="ExifWin"/>
+ <menuitem action="OpenArchive"/>
+ <placeholder name="WindowSection"/>
+ <separator/>
+ <menu action="FileDirMenu">
+ <menuitem action="FolderTree"/>
+ <placeholder name="FolderSection"/>
+ <separator/>
+ <menuitem action="ViewList"/>
+ <menuitem action="ViewIcons"/>
+ <menuitem action="Thumbnails"/>
+ <placeholder name="ListSection"/>
+ <separator/>
+ <menuitem action="FloatTools"/>
+ <menuitem action="HideTools"/>
+ </menu>
+ <placeholder name="DirSection"/>
+ <separator/>
+ <menu action="ZoomMenu">
+ <menu action="ConnectZoomMenu">
+ <menuitem action="ConnectZoomIn"/>
+ <menuitem action="ConnectZoomOut"/>
+ <menuitem action="ConnectZoomFit"/>
+ <menuitem action="ConnectZoomFillHor"/>
+ <menuitem action="ConnectZoomFillVert"/>
+ <menuitem action="ConnectZoom100"/>
+ <menuitem action="ConnectZoom200"/>
+ <menuitem action="ConnectZoom300"/>
+ <menuitem action="ConnectZoom400"/>
+ <menuitem action="ConnectZoom50"/>
+ <menuitem action="ConnectZoom33"/>
+ <menuitem action="ConnectZoom25"/>
+ </menu>
+ <menuitem action="ZoomIn"/>
+ <menuitem action="ZoomOut"/>
+ <menuitem action="ZoomFit"/>
+ <menuitem action="ZoomFillHor"/>
+ <menuitem action="ZoomFillVert"/>
+ <menuitem action="Zoom100"/>
+ <menuitem action="Zoom200"/>
+ <menuitem action="Zoom300"/>
+ <menuitem action="Zoom400"/>
+ <menuitem action="Zoom50"/>
+ <menuitem action="Zoom33"/>
+ <menuitem action="Zoom25"/>
+ </menu>
+ <menu action="SplitMenu">
+ <menuitem action="SplitHorizontal"/>
+ <menuitem action="SplitVertical"/>
+ <menuitem action="SplitTriple"/>
+ <menuitem action="SplitQuad"/>
+ <menuitem action="SplitSingle"/>
+ <separator/>
+ <menuitem action="SplitNextPane"/>
+ <menuitem action="SplitPreviousPane"/>
+ <menuitem action="SplitUpPane"/>
+ <menuitem action="SplitDownPane"/>
+ <separator/>
+ <menuitem action="SplitPaneSync"/>
+ </menu>
+ <menu action="StereoMenu">
+ <menuitem action="StereoAuto"/>
+ <menuitem action="StereoSBS"/>
+ <menuitem action="StereoCross"/>
+ <menuitem action="StereoOff"/>
+ <separator/>
+ <menuitem action="StereoCycle"/>
+ </menu>
+ <menu action="ColorMenu">
+ <menuitem action="UseColorProfiles"/>
+ <menuitem action="UseImageProfile"/>
+ <menuitem action="ColorProfile0"/>
+ <menuitem action="ColorProfile1"/>
+ <menuitem action="ColorProfile2"/>
+ <menuitem action="ColorProfile3"/>
+ <menuitem action="ColorProfile4"/>
+ <menuitem action="ColorProfile5"/>
+ <separator/>
+ <menuitem action="Grayscale"/>
+ </menu>
+ <menu action="OverlayMenu">
+ <menuitem action="ImageOverlay"/>
+ <menuitem action="ImageHistogram"/>
+ <menuitem action="ImageOverlayCycle"/>
+ <separator/>
+ <menuitem action="HistogramChanR"/>
+ <menuitem action="HistogramChanG"/>
+ <menuitem action="HistogramChanB"/>
+ <menuitem action="HistogramChanRGB"/>
+ <menuitem action="HistogramChanV"/>
+ <menuitem action="HistogramChanCycle"/>
+ <separator/>
+ <menuitem action="HistogramModeLin"/>
+ <menuitem action="HistogramModeLog"/>
+ <menuitem action="HistogramModeCycle"/>
+ </menu>
+ <menuitem action="OverUnderExposed"/>
+ <menuitem action="FullScreen"/>
+ <placeholder name="ViewSection"/>
+ <separator/>
+ <menuitem action="SBar"/>
+ <menuitem action="SBarSort"/>
+ <menuitem action="HideBars"/>
+ <menuitem action="HideSelectableToolbars"/>
+ <menuitem action="ShowInfoPixel"/>
+ <menuitem action="IgnoreAlpha"/>
+ <placeholder name="ToolsSection"/>
+ <separator/>
+ <menuitem action="Animate"/>
+ <menuitem action="SlideShow"/>
+ <menuitem action="SlideShowPause"/>
+ <menuitem action="SlideShowFaster"/>
+ <menuitem action="SlideShowSlower"/>
+ <separator/>
+ <menuitem action="Refresh"/>
+ <placeholder name="SlideShowSection"/>
+ <separator/>
+ </menu>
+ <menu action="WindowsMenu">
+ <menu action="NewWindow">
+ <menuitem action="NewWindowDefault"/>
+ <menuitem action="NewWindowFromCurrent"/>
+ <separator/>
+ </menu>
+ <menuitem action="RenameWindow"/>
+ <menuitem action="DeleteWindow"/>
+ <menuitem action="CloseWindow"/>
+ </menu>
+ <menu action="HelpMenu">
+ <separator/>
+ <menuitem action="HelpContents"/>
+ <menuitem action="SearchAndRunCommand"/>
+ <menuitem action="HelpSearch"/>
+ <menuitem action="HelpShortcuts"/>
+ <menuitem action="HelpKbd"/>
+ <menuitem action="HelpNotes"/>
+ <menuitem action="HelpChangeLog"/>
+ <placeholder name="HelpSection"/>
+ <separator/>
+ <menuitem action="About"/>
+ <separator/>
+ <menuitem action="LogWindow"/>
+ <separator/>
+ </menu>
+ </menubar>
+
+ <toolbar name="ToolBar"/>
+ <toolbar name="StatusBar"/>
+
+ <accelerator action="PrevImageAlt1"/>
+ <accelerator action="PrevImageAlt2"/>
+ <accelerator action="NextImageAlt1"/>
+ <accelerator action="NextImageAlt2"/>
+ <accelerator action="DeleteAlt1"/>
+ <accelerator action="DeleteAlt2"/>
+ <accelerator action="FullScreenAlt1"/>
+ <accelerator action="FullScreenAlt2"/>
+ <accelerator action="Escape"/>
+ <accelerator action="EscapeAlt1"/>
+
+ <accelerator action="ZoomInAlt1"/>
+ <accelerator action="ZoomOutAlt1"/>
+ <accelerator action="Zoom100Alt1"/>
+ <accelerator action="ZoomFitAlt1"/>
+
+ <accelerator action="ConnectZoomInAlt1"/>
+ <accelerator action="ConnectZoomOutAlt1"/>
+ <accelerator action="ConnectZoom100Alt1"/>
+ <accelerator action="ConnectZoomFitAlt1"/>
+</ui>
<gresource prefix="/org/geeqie/ui">
<file>appimage-notification.ui</file>
<file>custom.css</file>
- <file>menu.ui</file>
+ <file>menu-classic.ui</file>
+ <file>menu-hamburger.ui</file>
<file>search-and-run.ui</file>
</gresource>
</gresources>