diff --git a/src/st/st-theme-context.c b/src/st/st-theme-context.c index 6bc3cadd1..743190ac7 100644 --- a/src/st/st-theme-context.c +++ b/src/st/st-theme-context.c @@ -43,6 +43,8 @@ struct _StThemeContext { GObject parent; + ClutterBackend *clutter_backend; + PangoFontDescription *font; CoglColor accent_color; CoglColor accent_fg_color; @@ -124,7 +126,7 @@ st_theme_context_finalize (GObject *object) g_signal_handlers_disconnect_by_func (st_texture_cache_get_default (), (gpointer) on_icon_theme_changed, context); - g_signal_handlers_disconnect_by_func (clutter_get_default_backend (), + g_signal_handlers_disconnect_by_func (context->clutter_backend, (gpointer) st_theme_context_changed, context); @@ -196,10 +198,6 @@ st_theme_context_init (StThemeContext *context) "icon-theme-changed", G_CALLBACK (on_icon_theme_changed), context); - g_signal_connect_swapped (clutter_get_default_backend (), - "resolution-changed", - G_CALLBACK (st_theme_context_changed), - context); context->nodes = g_hash_table_new_full ((GHashFunc) st_theme_node_hash, (GEqualFunc) st_theme_node_equal, @@ -379,6 +377,7 @@ StThemeContext * st_theme_context_get_for_stage (ClutterStage *stage) { StThemeContext *context; + ClutterContext *clutter_context; g_return_val_if_fail (CLUTTER_IS_STAGE (stage), NULL); @@ -386,11 +385,18 @@ st_theme_context_get_for_stage (ClutterStage *stage) if (context) return context; + clutter_context = clutter_actor_get_context (CLUTTER_ACTOR (stage)); + context = g_object_new (ST_TYPE_THEME_CONTEXT, NULL); + context->clutter_backend = clutter_context_get_backend (clutter_context); g_object_set_data (G_OBJECT (stage), "st-theme-context", context); g_signal_connect (stage, "destroy", G_CALLBACK (on_stage_destroy), NULL); + g_signal_connect_swapped (context->clutter_backend, + "resolution-changed", + G_CALLBACK (st_theme_context_changed), + context); return context; }