[metacity] libmetacity: automatically reload GTK+ theme
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] libmetacity: automatically reload GTK+ theme
- Date: Thu, 9 Jun 2016 20:00:07 +0000 (UTC)
commit 92b94c700efcbdea1943ca11631b1da9f05b5c0e
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Thu Jun 9 19:22:29 2016 +0300
libmetacity: automatically reload GTK+ theme
Don't require to re-create / re-load theme on gtk-theme-name change
when using Metacity theme. Do it automatically.
libmetacity/meta-theme.c | 33 +++++++++++++++++++++++++++++++--
1 files changed, 31 insertions(+), 2 deletions(-)
---
diff --git a/libmetacity/meta-theme.c b/libmetacity/meta-theme.c
index 69c37d1..b524d30 100644
--- a/libmetacity/meta-theme.c
+++ b/libmetacity/meta-theme.c
@@ -39,6 +39,7 @@ struct _MetaTheme
PangoFontDescription *titlebar_font;
+ gulong gtk_theme_name_id;
gchar *gtk_theme_name;
GHashTable *variants;
@@ -344,6 +345,17 @@ create_title_layout (MetaTheme *theme,
}
static void
+notify_gtk_theme_name_cb (GtkSettings *settings,
+ GParamSpec *pspec,
+ MetaTheme *theme)
+{
+ g_free (theme->gtk_theme_name);
+ g_object_get (settings, "gtk-theme-name", &theme->gtk_theme_name, NULL);
+
+ meta_theme_invalidate (theme);
+}
+
+static void
meta_theme_constructed (GObject *object)
{
MetaTheme *theme;
@@ -371,6 +383,16 @@ meta_theme_dispose (GObject *object)
g_clear_object (&theme->impl);
+ if (theme->gtk_theme_name_id > 0)
+ {
+ GtkSettings *settings;
+
+ settings = gtk_settings_get_default ();
+
+ g_signal_handler_disconnect (settings, theme->gtk_theme_name_id);
+ theme->gtk_theme_name_id = 0;
+ }
+
g_clear_pointer (&theme->variants, g_hash_table_destroy);
g_clear_object (&theme->context);
@@ -486,10 +508,9 @@ meta_theme_load (MetaTheme *theme,
const gchar *name,
GError **error)
{
- g_free (theme->gtk_theme_name);
-
if (theme->type == META_THEME_TYPE_GTK)
{
+ g_free (theme->gtk_theme_name);
theme->gtk_theme_name = g_strdup (name);
}
else if (theme->type == META_THEME_TYPE_METACITY)
@@ -498,7 +519,15 @@ meta_theme_load (MetaTheme *theme,
settings = gtk_settings_get_default ();
+ g_free (theme->gtk_theme_name);
g_object_get (settings, "gtk-theme-name", &theme->gtk_theme_name, NULL);
+
+ if (theme->gtk_theme_name_id == 0)
+ {
+ theme->gtk_theme_name_id =
+ g_signal_connect (settings, "notify:gtk-theme-name",
+ G_CALLBACK (notify_gtk_theme_name_cb), theme);
+ }
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]