[libadwaita/wip/exalm/dark] style-manager: Set gtk-application-prefer-dark-theme for dark
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libadwaita/wip/exalm/dark] style-manager: Set gtk-application-prefer-dark-theme for dark
- Date: Tue, 23 Nov 2021 16:44:21 +0000 (UTC)
commit 94d9254f41c1b965ddbb8c39ed2bf9178f4df524
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Tue Nov 23 21:42:47 2021 +0500
style-manager: Set gtk-application-prefer-dark-theme for dark
There are a few places where completely decoupling this fails, e.g. legacy
X11 decorations. More importantly, libraries like WebKit need a nice
non-libadwaita-specific way to see if te app is currently dark.
src/adw-style-manager.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/src/adw-style-manager.c b/src/adw-style-manager.c
index ff9e7a76..e66d7d81 100644
--- a/src/adw-style-manager.c
+++ b/src/adw-style-manager.c
@@ -59,6 +59,7 @@ struct _AdwStyleManager
AdwColorScheme color_scheme;
gboolean dark;
+ gboolean setting_dark;
guint animation_timeout_id;
};
@@ -81,8 +82,11 @@ static GHashTable *display_style_managers = NULL;
static AdwStyleManager *default_instance = NULL;
static void
-warn_prefer_dark_theme (void)
+warn_prefer_dark_theme (AdwStyleManager *self)
{
+ if (self->setting_dark)
+ return;
+
g_warning ("Using GtkSettings:gtk-application-prefer-dark-theme with "
"libadwaita is unsupported. Please use "
"AdwStyleManager:color-scheme instead.");
@@ -148,10 +152,15 @@ update_stylesheet (AdwStyleManager *self)
NULL);
}
+ self->setting_dark = TRUE;
+
g_object_set (gtk_settings,
"gtk-enable-animations", FALSE,
+ "gtk-application-prefer-dark-theme", self->dark,
NULL);
+ self->setting_dark = FALSE;
+
if (self->provider) {
if (adw_settings_get_high_contrast (self->settings))
gtk_css_provider_load_from_resource (self->provider,
@@ -246,13 +255,13 @@ adw_style_manager_constructed (GObject *object)
NULL);
if (prefer_dark_theme)
- warn_prefer_dark_theme ();
+ warn_prefer_dark_theme (self);
g_signal_connect_object (settings,
"notify::gtk-application-prefer-dark-theme",
G_CALLBACK (warn_prefer_dark_theme),
self,
- 0);
+ G_CONNECT_SWAPPED);
if (!g_getenv ("GTK_THEME")) {
g_object_set (gtk_settings_get_for_display (self->display),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]