[metacity] frames: force dark theme for all apps if user requested it



commit b0fb6df3ab09995c4d35dfb49f30aeb711239806
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sat Apr 4 00:47:24 2015 +0300

    frames: force dark theme for all apps if user requested it
    
    Based on mutter commit:
    https://git.gnome.org/browse/mutter/commit/?id=274ea76eea6e97be01a723122c0774e7e961bff2

 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 c0adb2f..09b3aea 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]