diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2022-12-05 11:52:17 -0300 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2022-12-05 12:14:54 -0300 |
commit | b3d4dbdbf164e4a23b6e3e3a3ed800c9f74c9108 (patch) | |
tree | 6811754e61e997012ac3c6b2210901dcf06bec60 | |
parent | 2fb3c5a4f577aea9a4fc721807eb1ca4a49b8990 (diff) | |
download | mutter-b3d4dbdbf164e4a23b6e3e3a3ed800c9f74c9108.tar.gz |
frames/window-tracker: Reinstate dark titlebar support
Merge request !2541 [1] introduced support for integrating Mutter
frames with the dark style. This was lost after moving frames into
a separate client.
Bring that back. Don't depend on gdesktop-enums as it brings GTK3
into the header chain.
[1] https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2541
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2739>
-rw-r--r-- | src/frames/meson.build | 1 | ||||
-rw-r--r-- | src/frames/meta-window-tracker.c | 28 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/frames/meson.build b/src/frames/meson.build index 8c00996c0..b4c879050 100644 --- a/src/frames/meson.build +++ b/src/frames/meson.build @@ -9,6 +9,7 @@ x11_frames_sources = [ x11_frames = executable('mutter-x11-frames', sources: x11_frames_sources, dependencies: [ + gsettings_desktop_schemas_dep, gtk4_dep, x11_dep, xext_dep, diff --git a/src/frames/meta-window-tracker.c b/src/frames/meta-window-tracker.c index f849c547d..34c02a6b7 100644 --- a/src/frames/meta-window-tracker.c +++ b/src/frames/meta-window-tracker.c @@ -23,6 +23,7 @@ #include "meta-frame.h" +#include <gdesktop-enums.h> #include <gdk/x11/gdkx.h> #include <X11/Xatom.h> #include <X11/extensions/XInput2.h> @@ -30,6 +31,9 @@ struct _MetaWindowTracker { GObject parent_instance; + + GSettings *interface_settings; + GdkDisplay *display; GHashTable *frames; GHashTable *client_windows; @@ -85,6 +89,23 @@ meta_window_tracker_get_property (GObject *object, } static void +on_color_scheme_changed_cb (GSettings *interface_settings, + GParamSpec *pspec, + MetaWindowTracker *window_tracker) +{ + GDesktopColorScheme color_scheme; + gboolean is_dark; + + color_scheme = g_settings_get_enum (window_tracker->interface_settings, + "color-scheme"); + is_dark = color_scheme == G_DESKTOP_COLOR_SCHEME_PREFER_DARK; + + g_object_set (gtk_settings_get_default (), + "gtk-application-prefer-dark-theme", is_dark, + NULL); +} + +static void set_up_frame (MetaWindowTracker *window_tracker, Window xwindow) { @@ -346,6 +367,7 @@ meta_window_tracker_finalize (GObject *object) { MetaWindowTracker *window_tracker = META_WINDOW_TRACKER (object); + g_clear_object (&window_tracker->interface_settings); g_clear_pointer (&window_tracker->frames, g_hash_table_unref); g_clear_pointer (&window_tracker->client_windows, @@ -382,6 +404,12 @@ meta_window_tracker_class_init (MetaWindowTrackerClass *klass) static void meta_window_tracker_init (MetaWindowTracker *window_tracker) { + window_tracker->interface_settings = g_settings_new ("org.gnome.desktop.interface"); + g_signal_connect (window_tracker->interface_settings, + "changed::color-scheme", + G_CALLBACK (on_color_scheme_changed_cb), + window_tracker); + window_tracker->frames = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) gtk_window_destroy); |