diff src/layout_util.c @ 1320:055ed09d5a03

improved bar_sort configuration
author nadvornik
date Tue, 24 Feb 2009 22:21:28 +0000
parents fb76c291b00f
children f97450e632a1
line wrap: on
line diff
--- a/src/layout_util.c	Tue Feb 24 21:08:16 2009 +0000
+++ b/src/layout_util.c	Tue Feb 24 22:21:28 2009 +0000
@@ -50,6 +50,7 @@
 #define MENU_EDIT_ACTION_OFFSET 16
 
 static gboolean layout_bar_enabled(LayoutWindow *lw);
+static gboolean layout_bar_sort_enabled(LayoutWindow *lw);
 
 /*
  *-----------------------------------------------------------------------------
@@ -688,7 +689,7 @@
 {
 	LayoutWindow *lw = data;
 
-	if (lw->options.panels.sort.enabled == gtk_toggle_action_get_active(action)) return;
+	if (layout_bar_sort_enabled(lw) == gtk_toggle_action_get_active(action)) return;
 
 	layout_exit_fullscreen(lw);
 	layout_bar_sort_toggle(lw);
@@ -1867,7 +1868,7 @@
 	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), layout_bar_enabled(lw));
 
 	action = gtk_action_group_get_action(lw->action_group, "SBarSort");
-	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.panels.sort.enabled);
+	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), layout_bar_sort_enabled(lw));
 
 	action = gtk_action_group_get_action(lw->action_group, "HideToolbar");
 	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.toolbar_hidden);
@@ -2040,32 +2041,35 @@
 //	bar_info_selection(lw->bar_info, count - 1);
 }
 
+static gboolean layout_bar_sort_enabled(LayoutWindow *lw)
+{
+	return lw->bar_sort && GTK_WIDGET_VISIBLE(lw->bar_sort);
+}
+
+
 static void layout_bar_sort_destroyed(GtkWidget *widget, gpointer data)
 {
 	LayoutWindow *lw = data;
 
 	lw->bar_sort = NULL;
 
-	if (lw->utility_box)
-		{
-		/* destroyed from within itself */
-		lw->options.panels.sort.enabled = FALSE;
+/* 
+    do not call layout_util_sync_views(lw) here
+    this is called either when whole layout is destroyed - no need for update
+    or when the bar is replaced - sync is called by upper function at the end of whole operation
 
-		layout_util_sync_views(lw);
-		}
+*/
 }
 
-static void layout_bar_sort_new(LayoutWindow *lw)
+static void layout_bar_sort_set_default(LayoutWindow *lw)
 {
+	GtkWidget *bar;
+	
 	if (!lw->utility_box) return;
 
-	lw->bar_sort = bar_sort_new(lw);
-	g_signal_connect(G_OBJECT(lw->bar_sort), "destroy",
-			 G_CALLBACK(layout_bar_sort_destroyed), lw);
-	lw->options.panels.sort.enabled = TRUE;
-
-	gtk_box_pack_end(GTK_BOX(lw->utility_box), lw->bar_sort, FALSE, FALSE, 0);
-	gtk_widget_show(lw->bar_sort);
+	bar = bar_sort_new_default(lw);
+	
+	layout_bar_sort_set(lw, bar);
 }
 
 static void layout_bar_sort_close(LayoutWindow *lw)
@@ -2075,19 +2079,38 @@
 		bar_sort_close(lw->bar_sort);
 		lw->bar_sort = NULL;
 		}
-	lw->options.panels.sort.enabled = FALSE;
+}
+
+void layout_bar_sort_set(LayoutWindow *lw, GtkWidget *bar)
+{
+	if (!lw->utility_box) return;
+
+	layout_bar_sort_close(lw); /* if any */
+
+	if (!bar) return;
+	lw->bar_sort = bar;
+
+	g_signal_connect(G_OBJECT(lw->bar_sort), "destroy",
+			 G_CALLBACK(layout_bar_sort_destroyed), lw);
+
+	gtk_box_pack_end(GTK_BOX(lw->utility_box), lw->bar_sort, FALSE, FALSE, 0);
 }
 
 void layout_bar_sort_toggle(LayoutWindow *lw)
 {
-	if (lw->options.panels.sort.enabled)
+	if (layout_bar_sort_enabled(lw))
 		{
-		layout_bar_sort_close(lw);
+		gtk_widget_hide(lw->bar_sort);
 		}
 	else
 		{
-		layout_bar_sort_new(lw);
+		if (!lw->bar_sort)
+			{
+			layout_bar_sort_set_default(lw);
+			}
+		gtk_widget_show(lw->bar_sort);
 		}
+	layout_util_sync_views(lw);
 }
 
 void layout_bars_new_image(LayoutWindow *lw)
@@ -2112,11 +2135,6 @@
 	gtk_box_pack_start(GTK_BOX(lw->utility_box), image, TRUE, TRUE, 0);
 	gtk_widget_show(image);
 
-	if (lw->options.panels.sort.enabled)
-		{
-		layout_bar_sort_new(lw);
-		}
-
 	return lw->utility_box;
 }