evolution r36001 - branches/kill-bonobo/shell



Author: mbarnes
Date: Sat Aug 16 04:19:38 2008
New Revision: 36001
URL: http://svn.gnome.org/viewvc/evolution?rev=36001&view=rev

Log:
Have the sidebar update itself when the "gtk-toolbar-style" global GtkSetting
changes, without using GConf.


Modified:
   branches/kill-bonobo/shell/e-sidebar.c

Modified: branches/kill-bonobo/shell/e-sidebar.c
==============================================================================
--- branches/kill-bonobo/shell/e-sidebar.c	(original)
+++ branches/kill-bonobo/shell/e-sidebar.c	Sat Aug 16 04:19:38 2008
@@ -34,6 +34,8 @@
 	gboolean actions_visible;
 	gboolean style_set;
 	GtkToolbarStyle style;
+	GtkSettings *settings;
+	gulong settings_handler_id;
 };
 
 enum {
@@ -151,6 +153,15 @@
 }
 
 static void
+sidebar_toolbar_style_changed_cb (ESidebar *sidebar)
+{
+	if (!sidebar->priv->style_set) {
+		sidebar->priv->style_set = TRUE;
+		e_sidebar_unset_style (sidebar);
+	}
+}
+
+static void
 sidebar_set_property (GObject *object,
                       guint property_id,
                       const GValue *value,
@@ -278,6 +289,40 @@
 }
 
 static void
+sidebar_screen_changed (GtkWidget *widget,
+                        GdkScreen *previous_screen)
+{
+	ESidebarPrivate *priv;
+	GtkSettings *settings;
+
+	priv = E_SIDEBAR_GET_PRIVATE (widget);
+
+	if (gtk_widget_has_screen (widget))
+		settings = gtk_widget_get_settings (widget);
+	else
+		settings = NULL;
+
+	if (settings == priv->settings)
+		return;
+
+	if (priv->settings != NULL) {
+		g_signal_handler_disconnect (
+			priv->settings, priv->settings_handler_id);
+		g_object_unref (priv->settings);
+	}
+
+	if (settings != NULL) {
+		priv->settings = g_object_ref (settings);
+		priv->settings_handler_id = g_signal_connect_swapped (
+			settings, "notify::gtk-toolbar-style",
+			G_CALLBACK (sidebar_toolbar_style_changed_cb), widget);
+	} else
+		priv->settings = NULL;
+
+	sidebar_toolbar_style_changed_cb (E_SIDEBAR (widget));
+}
+
+static void
 sidebar_remove (GtkContainer *container,
                 GtkWidget *widget)
 {
@@ -379,6 +424,7 @@
 	widget_class = GTK_WIDGET_CLASS (class);
 	widget_class->size_request = sidebar_size_request;
 	widget_class->size_allocate = sidebar_size_allocate;
+	widget_class->screen_changed = sidebar_screen_changed;
 
 	container_class = GTK_CONTAINER_CLASS (class);
 	container_class->remove = sidebar_remove;
@@ -555,8 +601,11 @@
 	if (!sidebar->priv->style_set)
 		return;
 
-	settings = gtk_widget_get_settings (GTK_WIDGET (sidebar));
-	g_object_get (settings, "gtk-toolbar-style", &style, NULL);
+	settings = sidebar->priv->settings;
+	if (settings != NULL)
+		g_object_get (settings, "gtk-toolbar-style", &style, NULL);
+	else
+		style = DEFAULT_TOOLBAR_STYLE;
 
 	if (style == GTK_TOOLBAR_BOTH)
 		style = GTK_TOOLBAR_BOTH_HORIZ;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]