[gnome-shell] st-theme-node: Recalculate properties on stylesheet changes
- From: Florian MÃllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] st-theme-node: Recalculate properties on stylesheet changes
- Date: Fri, 1 Feb 2013 16:29:06 +0000 (UTC)
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]