summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-04-04 00:47:24 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-04-04 00:47:24 +0300
commitb0fb6df3ab09995c4d35dfb49f30aeb711239806 (patch)
tree7a802855e24f020953a5c1f0cd3132174fb133f9
parent7a9610f3df2039f6b801b51bb3a18b6576842de6 (diff)
downloadmetacity-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.c35
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