[gnome-shell] st-theme-node: Recalculate properties on stylesheet changes



commit 655dce6a4b2d5ad02a3e108b6fbc118f4a3ae2d2
Author: Florian MÃllner <fmuellner gnome org>
Date:   Mon Jan 28 20:38:36 2013 +0100

    st-theme-node: Recalculate properties on stylesheet changes
    
    As theme nodes keep a cache of matched properties, we need to make
    sure to update it when the list of stylesheets changes. In particular
    this fixes a regression from commit dc2ec0a8f95baa, which caused
    extensions with stylesheets to crash the shell when re-enabled (for
    instances when coming back from the lock screen).
    
    https://bugzilla.gnome.org/show_bug.cgi?id=692994

 src/st/st-theme-node.c |   21 +++++++++++++++++----
 1 files changed, 17 insertions(+), 4 deletions(-)
---
diff --git a/src/st/st-theme-node.c b/src/st/st-theme-node.c
index dc3fcc2..549090d 100644
--- a/src/st/st-theme-node.c
+++ b/src/st/st-theme-node.c
@@ -61,6 +61,14 @@ st_theme_node_class_init (StThemeNodeClass *klass)
   object_class->finalize = st_theme_node_finalize;
 }
 
+static void
+on_custom_stylesheets_changed (StTheme *theme,
+                               gpointer data)
+{
+  StThemeNode *node = data;
+  node->properties_computed = FALSE;
+}
+
 
 static void
 st_theme_node_dispose (GObject *gobject)
@@ -85,6 +93,10 @@ st_theme_node_dispose (GObject *gobject)
       node->icon_colors = NULL;
     }
 
+  if (node->theme)
+    g_signal_handlers_disconnect_by_func (node->theme,
+                                          on_custom_stylesheets_changed, node);
+
   g_clear_object (&node->theme);
 
   G_OBJECT_CLASS (st_theme_node_parent_class)->dispose (gobject);
@@ -221,10 +233,11 @@ st_theme_node_new (StThemeContext    *context,
     theme = parent_node->theme;
 
   if (theme != NULL)
-    node->theme = theme;
-
-  if (node->theme != NULL)
-    g_object_ref (node->theme);
+    {
+      node->theme = g_object_ref (theme);
+      g_signal_connect (node->theme, "custom-stylesheets-changed",
+                        G_CALLBACK (on_custom_stylesheets_changed), node);
+    }
 
   node->element_type = element_type;
   node->element_id = g_strdup (element_id);



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