From 00155154a75745e395d8d97c2764c0a8e85c149e Mon Sep 17 00:00:00 2001 From: Colin Clark Date: Sun, 9 Apr 2023 17:02:16 +0100 Subject: [PATCH] Fix #1077: allow split view with user specified layout https://github.com/BestImageViewer/geeqie/issues/1077 Additional layout - 3 horizontal panes --- doc/docbook/GuideMainWindowMenus.xml | 11 ++++++ src/layout-image.cc | 51 ++++++++++++++++++++++++++++ src/layout-util.cc | 2 ++ src/typedefs.h | 1 + 4 files changed, 65 insertions(+) diff --git a/doc/docbook/GuideMainWindowMenus.xml b/doc/docbook/GuideMainWindowMenus.xml index 68da9cc7..326fcc12 100644 --- a/doc/docbook/GuideMainWindowMenus.xml +++ b/doc/docbook/GuideMainWindowMenus.xml @@ -1371,6 +1371,17 @@ Splits main image view in two vertical panes. + + + + Split + Triple + + + + Splits main image view in three horizontal panes. + + diff --git a/src/layout-image.cc b/src/layout-image.cc index 7d79f494..5d22101e 100644 --- a/src/layout-image.cc +++ b/src/layout-image.cc @@ -2354,6 +2354,55 @@ GtkWidget *layout_image_setup_split_hv(LayoutWindow *lw, gboolean horizontal) } +static GtkWidget *layout_image_setup_split_triple(LayoutWindow *lw) +{ + GtkWidget *hpaned1; + GtkWidget *hpaned2; + GtkAllocation allocation; + gint i; + gint pane_pos; + + lw->split_mode = SPLIT_TRIPLE; + + layout_image_setup_split_common(lw, 3); + + gtk_widget_get_allocation(lw->utility_paned, &allocation); + + hpaned1 = gtk_hpaned_new(); + DEBUG_NAME(hpaned1); + hpaned2 = gtk_hpaned_new(); + DEBUG_NAME(hpaned2); + + if (lw->bar && gtk_widget_get_visible(lw->bar)) + { + pane_pos = (gtk_paned_get_position(GTK_PANED(lw->utility_paned))) / 3; + } + else + { + pane_pos = allocation.width / 3; + } + + gtk_paned_set_position(GTK_PANED(hpaned1), pane_pos); + gtk_paned_set_position(GTK_PANED(hpaned2), pane_pos); + + gtk_paned_pack1(GTK_PANED(hpaned1), lw->split_images[0]->widget, TRUE, TRUE); + gtk_paned_pack1(GTK_PANED(hpaned2), lw->split_images[1]->widget, TRUE, TRUE); + gtk_paned_pack2(GTK_PANED(hpaned2), lw->split_images[2]->widget, TRUE, TRUE); + gtk_paned_pack2(GTK_PANED(hpaned1), hpaned2, TRUE, TRUE); + + for (i = 0; i < 3; i++) + { + gtk_widget_show(lw->split_images[i]->widget); + } + + gtk_widget_show(hpaned1); + gtk_widget_show(hpaned2); + + lw->split_image_widget = hpaned1; + + return lw->split_image_widget; +} + GtkWidget *layout_image_setup_split_quad(LayoutWindow *lw) { GtkWidget *hpaned; @@ -2401,6 +2450,8 @@ GtkWidget *layout_image_setup_split(LayoutWindow *lw, ImageSplitMode mode) return layout_image_setup_split_hv(lw, TRUE); case SPLIT_VERT: return layout_image_setup_split_hv(lw, FALSE); + case SPLIT_TRIPLE: + return layout_image_setup_split_triple(lw); case SPLIT_QUAD: return layout_image_setup_split_quad(lw); case SPLIT_NONE: diff --git a/src/layout-util.cc b/src/layout-util.cc index 53549d68..94451a93 100644 --- a/src/layout-util.cc +++ b/src/layout-util.cc @@ -2652,6 +2652,7 @@ static GtkToggleActionEntry menu_view_dir_toggle_entries[] = { static GtkRadioActionEntry menu_split_radio_entries[] = { { "SplitHorizontal", NULL, N_("_Horizontal"), "E", N_("Split panes horizontal."), SPLIT_HOR }, { "SplitVertical", NULL, N_("_Vertical"), "U", N_("Split panes vertical"), SPLIT_VERT }, + { "SplitTriple", NULL, N_("_Triple"), NULL, N_("Split panes triple"), SPLIT_TRIPLE }, { "SplitQuad", NULL, N_("_Quad"), NULL, N_("Split panes quad"), SPLIT_QUAD }, { "SplitSingle", NULL, N_("_Single"), "Y", N_("Single pane"), SPLIT_NONE } }; @@ -2849,6 +2850,7 @@ static const gchar *menu_ui_description = " " " " " " +" " " " " " " " diff --git a/src/typedefs.h b/src/typedefs.h index 2c7e6b3c..191d437d 100644 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -132,6 +132,7 @@ typedef enum { SPLIT_NONE = 0, SPLIT_VERT, SPLIT_HOR, + SPLIT_TRIPLE, SPLIT_QUAD, } ImageSplitMode; -- 2.20.1