Move menu/toolbar to top of window
authorColin Clark <colin.clark@cclark.uk>
Sun, 12 Aug 2018 16:29:35 +0000 (17:29 +0100)
committerColin Clark <colin.clark@cclark.uk>
Sun, 12 Aug 2018 16:29:35 +0000 (17:29 +0100)
Moving the menu/toolbar to the top of the window eliminates the problem
of these items being partially obscured when the tools pane is reduced
to a small width.

src/layout.c
src/layout_util.c
src/layout_util.h
src/typedefs.h

index f1e27e1..14ae251 100644 (file)
@@ -310,18 +310,15 @@ static GtkWidget *layout_tool_setup(LayoutWindow *lw)
        GtkWidget *box;
        GtkWidget *box_folders;
        GtkWidget *scd;
-       GtkWidget *menu_bar;
+       GtkWidget *menu_tool_bar;
        GtkWidget *tabcomp;
-       GtkWidget *toolbar;
 
        box = gtk_vbox_new(FALSE, 0);
 
-       menu_bar = layout_actions_menu_bar(lw);
-       gtk_box_pack_start(GTK_BOX(box), menu_bar, FALSE, FALSE, 0);
-
-       toolbar = layout_actions_toolbar(lw, TOOLBAR_MAIN);
-       gtk_box_pack_start(GTK_BOX(box), toolbar, FALSE, FALSE, 0);
-       if (lw->options.toolbar_hidden) gtk_widget_hide(toolbar);
+       menu_tool_bar = layout_actions_menu_tool_bar(lw);
+       gtk_widget_show(menu_tool_bar);
+       gtk_box_pack_start(GTK_BOX(lw->main_box), lw->menu_tool_bar, FALSE, FALSE, 0);
+       if (lw->options.toolbar_hidden) gtk_widget_hide(lw->toolbar[TOOLBAR_MAIN]);
 
        tabcomp = tab_completion_new_with_history(&lw->path_entry, NULL, "path_list", -1,
                                                  layout_path_entry_cb, lw);
@@ -1499,6 +1496,7 @@ static void layout_tools_setup(LayoutWindow *lw, GtkWidget *tools, GtkWidget *fi
 
                gtk_window_set_resizable(GTK_WINDOW(lw->tools), TRUE);
                gtk_container_set_border_width(GTK_CONTAINER(lw->tools), 0);
+               gtk_container_remove(GTK_CONTAINER(lw->main_box), lw->menu_tool_bar);
 
                new_window = TRUE;
                }
@@ -1513,6 +1511,7 @@ static void layout_tools_setup(LayoutWindow *lw, GtkWidget *tools, GtkWidget *fi
 
        vbox = gtk_vbox_new(FALSE, 0);
        gtk_container_add(GTK_CONTAINER(lw->tools), vbox);
+       gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(lw->menu_tool_bar), FALSE, FALSE, 0);
        gtk_widget_show(vbox);
 
        layout_status_setup(lw, vbox, TRUE);
@@ -1662,7 +1661,7 @@ static void layout_grid_setup(LayoutWindow *lw)
        layout_actions_setup(lw);
 
        lw->group_box = gtk_vbox_new(FALSE, 0);
-       gtk_box_pack_start(GTK_BOX(lw->main_box), lw->group_box, TRUE, TRUE, 0);
+       gtk_box_pack_end(GTK_BOX(lw->main_box), lw->group_box, TRUE, TRUE, 0);
        gtk_widget_show(lw->group_box);
 
        priority_location = layout_grid_compass(lw);
@@ -1796,9 +1795,10 @@ void layout_style_set(LayoutWindow *lw, gint style, const gchar *order)
        /* preserve utility_box (image + sidebars), menu_bar and toolbars to be reused later in layout_grid_setup */
        /* lw->image is preserved together with lw->utility_box */
        if (lw->utility_box) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->utility_box)), lw->utility_box);
-       if (lw->menu_bar) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->menu_bar)), lw->menu_bar);
-       for (i = 0; i < TOOLBAR_COUNT; i++)
-               if (lw->toolbar[i]) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->toolbar[i])), lw->toolbar[i]);
+
+       if (lw->toolbar[TOOLBAR_STATUS]) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->toolbar[TOOLBAR_STATUS])), lw->toolbar[TOOLBAR_STATUS]);
+
+       if (lw->menu_tool_bar) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->menu_tool_bar)), lw->menu_tool_bar);
 
        /* clear it all */
 
index ba20794..ca78abc 100644 (file)
@@ -2703,6 +2703,24 @@ GtkWidget *layout_actions_toolbar(LayoutWindow *lw, ToolbarType type)
        return lw->toolbar[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);
+       toolbar = layout_actions_toolbar(lw, TOOLBAR_MAIN);
+       lw->menu_tool_bar = gtk_vbox_new(FALSE, 0);
+
+       gtk_box_pack_start(GTK_BOX(lw->menu_tool_bar), menu_bar, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(lw->menu_tool_bar), toolbar, FALSE, FALSE, 0);
+
+       g_object_ref(lw->menu_tool_bar);
+       return lw->menu_tool_bar;
+}
+
 void layout_toolbar_clear(LayoutWindow *lw, ToolbarType type)
 {
        if (lw->toolbar_merge_id[type])
index e80e8e4..49f3642 100644 (file)
@@ -74,5 +74,6 @@ void layout_exif_window_new(LayoutWindow *lw);
 gboolean is_help_key(GdkEventKey *event);
 LayoutWindow *layout_menu_new_window(GtkAction *action, gpointer data);
 void layout_menu_close_cb(GtkAction *action, gpointer data);
+GtkWidget *layout_actions_menu_tool_bar(LayoutWindow *lw);
 #endif
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 844a53d..9d9d985 100644 (file)
@@ -731,7 +731,7 @@ struct _LayoutWindow
 
 //     gint tools_float;
 //     gint tools_hidden;
-
+       GtkWidget *menu_tool_bar; /*Combined menu and toolbar box */
        GtkWidget *menu_bar; /* referenced by lw, exist during whole lw lifetime */
        /* toolbar */