diff src/bar.c @ 2498:a05ba0d6135c

Fix #490: Creating info sidebar panes https://github.com/BestImageViewer/geeqie/issues/490 Additional icon in the sidebar panel to create new panes.
author Colin Clark <colin.clark@cclark.uk>
date Thu, 08 Jun 2017 11:29:16 +0100
parents 95507e596256
children eb2ce489ceea
line wrap: on
line diff
--- a/src/bar.c	Wed Jun 07 17:53:16 2017 +0100
+++ b/src/bar.c	Thu Jun 08 11:29:16 2017 +0100
@@ -196,6 +196,7 @@
 	GtkWidget *vbox;
 	FileData *fd;
 	GtkWidget *label_file_name;
+	GtkWidget *add_button;
 
 	LayoutWindow *lw;
 	gint width;
@@ -322,6 +323,27 @@
 	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 @@
 	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 @@
 	BarData *bd;
 	GtkWidget *box;
 	GtkWidget *scrolled;
+	GtkWidget *tbar;
+	GtkWidget *add_box;
 
 	bd = g_new0(BarData, 1);
 
@@ -646,6 +676,14 @@
 	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