From 74977ec88fb90fc9c0f7e1dd76735aeb5da7b614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Mon, 22 Nov 2021 16:53:22 +0100 Subject: [PATCH 1/3] gtk-keyboard: Don't set variable to NULL twice in a row --- eek/eek-gtk-keyboard.c | 1 - 1 file changed, 1 deletion(-) 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) { From a6d766e650a27299106b7e2a2bf6dbaae4c4fd21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Mon, 22 Nov 2021 16:46:23 +0100 Subject: [PATCH 2/3] renderer: Use `g_debug ()` Switching to `g_debug ()` after adding `G_LOG_DOMAIN` got lost in a rebase. --- eek/eek-renderer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index 72915f6e..9bba8c28 100644 --- a/eek/eek-renderer.c +++ b/eek/eek-renderer.c @@ -266,7 +266,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)); From 379a09e0d69d080793a18fd2aa2348900a8cd986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Mon, 22 Nov 2021 17:05:51 +0100 Subject: [PATCH 3/3] renderer: Disconnect theme change signal handler The renderer does not stick around so we need to disconnect the signal handler on "dispose". Since the renderer is not a GObject track the signal id manually instead of using `g_signal_connect_object ()`. Fixes 1995285 ("eek-renderer: Honor theme changes") --- eek/eek-renderer.c | 6 ++++-- eek/eek-renderer.h | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) 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 */