From 22010917d07dc67b51e6c24dfb633fc4a5eed408 Mon Sep 17 00:00:00 2001 From: Colin Clark Date: Thu, 8 Jun 2017 11:29:16 +0100 Subject: [PATCH] Fix #490: Creating info sidebar panes https://github.com/BestImageViewer/geeqie/issues/490 Additional icon in the sidebar panel to create new panes. --- src/bar.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/bar.c b/src/bar.c index 1cd55345..4fda1269 100644 --- a/src/bar.c +++ b/src/bar.c @@ -196,6 +196,7 @@ struct _BarData GtkWidget *vbox; FileData *fd; GtkWidget *label_file_name; + GtkWidget *add_button; LayoutWindow *lw; gint width; @@ -322,6 +323,27 @@ static void bar_menu_popup(GtkWidget *widget) gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, bar, 0, GDK_CURRENT_TIME); } +static void bar_menu_add_popup(GtkWidget *widget) +{ + GtkWidget *menu; + GtkWidget *bar; + const KnownPanes *pane = known_panes; + + bar = widget; + + menu = popup_menu_short_lived(); + + while (pane->id) + { + GtkWidget *item; + item = menu_item_add_stock(menu, _(pane->title), GTK_STOCK_ADD, G_CALLBACK(bar_expander_add_cb), bar); + g_object_set_data(G_OBJECT(item), "pane_add_id", pane->id); + pane++; + } + + gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, bar, 0, GDK_CURRENT_TIME); +} + static gboolean bar_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) { @@ -333,6 +355,12 @@ static gboolean bar_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer return FALSE; } +static gboolean bar_menu_add_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) +{ + bar_menu_add_popup(widget); + return TRUE; +} + static void bar_pane_set_fd_cb(GtkWidget *expander, gpointer data) { @@ -605,6 +633,8 @@ GtkWidget *bar_new(LayoutWindow *lw) BarData *bd; GtkWidget *box; GtkWidget *scrolled; + GtkWidget *tbar; + GtkWidget *add_box; bd = g_new0(BarData, 1); @@ -646,6 +676,14 @@ GtkWidget *bar_new(LayoutWindow *lw) gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled), bd->vbox); gtk_viewport_set_shadow_type(GTK_VIEWPORT(gtk_bin_get_child(GTK_BIN(scrolled))), GTK_SHADOW_NONE); + add_box = gtk_vbox_new(FALSE, 0); + gtk_box_pack_end(GTK_BOX(bd->widget), add_box, FALSE, FALSE, 0); + tbar = pref_toolbar_new(add_box, GTK_TOOLBAR_ICONS); + bd->add_button = pref_toolbar_button(tbar, GTK_STOCK_ADD, NULL, FALSE, + _("Add Pane"), + G_CALLBACK(bar_menu_add_cb), bd); + gtk_widget_show(add_box); + #ifdef HAVE_LIBCHAMPLAIN_GTK g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN(scrolled))), "unrealize", G_CALLBACK(bar_unrealize_clutter_fix_cb), NULL); #endif -- 2.20.1