diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2015-04-04 00:47:24 +0300 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2015-04-04 00:47:24 +0300 |
commit | b0fb6df3ab09995c4d35dfb49f30aeb711239806 (patch) | |
tree | 7a802855e24f020953a5c1f0cd3132174fb133f9 | |
parent | 7a9610f3df2039f6b801b51bb3a18b6576842de6 (diff) | |
download | metacity-b0fb6df3ab09995c4d35dfb49f30aeb711239806.tar.gz |
frames: force dark theme for all apps if user requested it
Based on mutter commit:
https://git.gnome.org/browse/mutter/commit/?id=274ea76eea6e97be01a723122c0774e7e961bff2
-rw-r--r-- | src/ui/frames.c | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/src/ui/frames.c b/src/ui/frames.c index c0adb2f8..09b3aea8 100644 --- a/src/ui/frames.c +++ b/src/ui/frames.c @@ -617,6 +617,23 @@ meta_frames_new (int screen_number) return frames; } +static const char * +get_theme_variant_override (MetaFrames *frames) +{ + GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (frames)); + GtkSettings *settings = gtk_settings_get_for_screen (screen); + gboolean dark_theme_requested; + + g_object_get (settings, + "gtk-application-prefer-dark-theme", &dark_theme_requested, + NULL); + + if (dark_theme_requested) + return "dark"; + + return NULL; +} + /* In order to use a style with a window it has to be attached to that * window. Actually, the colormaps just have to match, but since GTK+ * already takes care of making sure that its cheap to attach a style @@ -629,21 +646,29 @@ meta_frames_attach_style (MetaFrames *frames, { gboolean has_frame; char *variant = NULL; + const char *variant_override; if (frame->style_info != NULL) meta_style_info_unref (frame->style_info); - meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), - frame->xwindow, - META_CORE_WINDOW_HAS_FRAME, &has_frame, - META_CORE_GET_THEME_VARIANT, &variant, - META_CORE_GET_END); + variant_override = get_theme_variant_override (frames); + + if (variant_override) + variant = g_strdup (variant_override); + else + meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), + frame->xwindow, + META_CORE_WINDOW_HAS_FRAME, &has_frame, + META_CORE_GET_THEME_VARIANT, &variant, + META_CORE_GET_END); if (variant == NULL || strcmp(variant, "normal") == 0) frame->style_info = meta_style_info_ref (frames->normal_style); else frame->style_info = meta_style_info_ref (meta_frames_get_theme_variant (frames, variant)); + + g_free (variant); } void |