diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index 9bba8c28..1794eaa3 100644 --- a/eek/eek-renderer.c +++ b/eek/eek-renderer.c @@ -228,6 +228,8 @@ eek_renderer_free (EekRenderer *self) g_object_unref(self->css_provider); g_object_unref(self->view_context); g_object_unref(self->button_context); + g_clear_signal_handler (&self->theme_name_id, gtk_settings_get_default()); + // this is where renderer-specific surfaces would be released free(self); @@ -299,8 +301,8 @@ renderer_init (EekRenderer *self) gtk_settings = gtk_settings_get_default (); - g_signal_connect (gtk_settings, "notify::gtk-theme-name", - G_CALLBACK (on_gtk_theme_name_changed), self); + self->theme_name_id = g_signal_connect (gtk_settings, "notify::gtk-theme-name", + G_CALLBACK (on_gtk_theme_name_changed), self); self->css_provider = squeek_load_style(); } diff --git a/eek/eek-renderer.h b/eek/eek-renderer.h index a339b2ad..a50a11f8 100644 --- a/eek/eek-renderer.h +++ b/eek/eek-renderer.h @@ -39,6 +39,8 @@ typedef struct EekRenderer GtkStyleContext *button_context; // TODO: maybe move a copy to each button /// Style class for rendering the view and button CSS. gchar *extra_style; // owned + // Theme name change signal handler id + gulong theme_name_id; // Mutable state gint scale_factor; /* the outputs scale factor */