diff --git a/eek/eek-gtk-keyboard.c b/eek/eek-gtk-keyboard.c index 17f16e11..ff035cd6 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -316,7 +316,6 @@ eek_gtk_keyboard_dispose (GObject *object) if (priv->renderer) { eek_renderer_free(priv->renderer); priv->renderer = NULL; - priv->renderer = NULL; } if (priv->keyboard) { diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index 72915f6e..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); @@ -266,7 +268,7 @@ on_gtk_theme_name_changed (GtkSettings *settings, gpointer foo, EekRenderer *sel g_autofree char *name = NULL; g_object_get (settings, "gtk-theme-name", &name, NULL); - g_warning ("GTK theme: %s", name); + g_debug ("GTK theme: %s", name); gtk_style_context_remove_provider_for_screen (gdk_screen_get_default (), GTK_STYLE_PROVIDER (self->css_provider)); @@ -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 */