[libadwaita] settings: Add environment variables to override styles
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libadwaita] settings: Add environment variables to override styles
- Date: Tue, 24 May 2022 19:28:25 +0000 (UTC)
commit 3af34a9cf073368a9845c0c03a073b0c8ffea6bf
Author: JCWasmx86 <JCWasmx86 t-online de>
Date: Wed May 18 13:23:05 2022 +0200
settings: Add environment variables to override styles
- ADW_DEBUG_HIGH_CONTRAST=0|1
- ADW_DEBUG_COLOR_SCHEME=default|prefer-dark|prefer-light
They will be used by Builder.
src/adw-settings.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 64 insertions(+), 9 deletions(-)
---
diff --git a/src/adw-settings.c b/src/adw-settings.c
index 12e908d1..ee790c1a 100644
--- a/src/adw-settings.c
+++ b/src/adw-settings.c
@@ -38,7 +38,16 @@ struct _AdwSettings
gboolean has_high_contrast;
gboolean has_color_scheme;
- gboolean color_scheme_use_fdo_setting;
+
+ enum {
+ COLOR_SCHEME_STATE_FDO,
+ COLOR_SCHEME_STATE_GNOME,
+ COLOR_SCHEME_STATE_NONE
+ } color_scheme_portal_state;
+ enum {
+ HIGH_CONTRAST_STATE_GNOME,
+ HIGH_CONTRAST_STATE_NONE
+ } high_contrast_portal_state;
gboolean override;
gboolean system_supports_color_schemes_override;
@@ -86,6 +95,39 @@ set_high_contrast (AdwSettings *self,
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HIGH_CONTRAST]);
}
+static void
+init_debug (AdwSettings *self)
+{
+ const char *env = g_getenv ("ADW_DEBUG_HIGH_CONTRAST");
+ if (env && *env) {
+ if (!g_strcmp0 (env, "1")) {
+ self->has_high_contrast = TRUE;
+ self->high_contrast = TRUE;
+ } else if (!g_strcmp0 (env, "0")) {
+ self->has_high_contrast = TRUE;
+ self->high_contrast = FALSE;
+ } else {
+ g_warning ("Invalid value for ADW_DEBUG_HIGH_CONTRAST: %s (Expected 0 or 1)", env);
+ }
+ }
+
+ env = g_getenv ("ADW_DEBUG_COLOR_SCHEME");
+ if (env) {
+ if (!g_strcmp0 (env, "default")) {
+ self->has_color_scheme = TRUE;
+ self->color_scheme = ADW_SYSTEM_COLOR_SCHEME_DEFAULT;
+ } else if (!g_strcmp0 (env, "prefer-dark")) {
+ self->has_color_scheme = TRUE;
+ self->color_scheme = ADW_SYSTEM_COLOR_SCHEME_PREFER_DARK;
+ } else if (!g_strcmp0 (env, "prefer-light")) {
+ self->has_color_scheme = TRUE;
+ self->color_scheme = ADW_SYSTEM_COLOR_SCHEME_PREFER_LIGHT;
+ } else {
+ g_warning ("Invalid color scheme %s (Expected one of: default, prefer-dark, prefer-light)", env);
+ }
+ }
+}
+
/* Settings portal */
#if defined(G_OS_UNIX) && !defined(__APPLE__)
@@ -214,7 +256,7 @@ settings_portal_changed_cb (GDBusProxy *proxy,
if (!g_strcmp0 (namespace, "org.freedesktop.appearance") &&
!g_strcmp0 (name, "color-scheme") &&
- self->color_scheme_use_fdo_setting) {
+ self->color_scheme_portal_state == COLOR_SCHEME_STATE_FDO) {
set_color_scheme (self, get_fdo_color_scheme (value));
g_variant_unref (value);
@@ -224,7 +266,7 @@ settings_portal_changed_cb (GDBusProxy *proxy,
if (!g_strcmp0 (namespace, "org.gnome.desktop.interface") &&
!g_strcmp0 (name, "color-scheme") &&
- !self->color_scheme_use_fdo_setting) {
+ self->color_scheme_portal_state == COLOR_SCHEME_STATE_GNOME) {
set_color_scheme (self, get_gnome_color_scheme (value));
g_variant_unref (value);
@@ -233,7 +275,8 @@ settings_portal_changed_cb (GDBusProxy *proxy,
}
if (!g_strcmp0 (namespace, "org.gnome.desktop.interface.a11y") &&
- !g_strcmp0 (name, "high-contrast")) {
+ !g_strcmp0 (name, "high-contrast") &&
+ self->high_contrast_portal_state == HIGH_CONTRAST_STATE_GNOME) {
set_high_contrast (self, g_variant_get_boolean (value));
g_variant_unref (value);
@@ -267,10 +310,11 @@ init_portal (AdwSettings *self)
return;
}
- if (read_portal_setting (self, "org.freedesktop.appearance",
+ if (!self->has_color_scheme &&
+ read_portal_setting (self, "org.freedesktop.appearance",
"color-scheme", "u", &variant)) {
self->has_color_scheme = TRUE;
- self->color_scheme_use_fdo_setting = TRUE;
+ self->color_scheme_portal_state = COLOR_SCHEME_STATE_FDO;
self->color_scheme = get_fdo_color_scheme (variant);
g_variant_unref (variant);
@@ -280,14 +324,17 @@ init_portal (AdwSettings *self)
read_portal_setting (self, "org.gnome.desktop.interface",
"color-scheme", "s", &variant)) {
self->has_color_scheme = TRUE;
+ self->color_scheme_portal_state = COLOR_SCHEME_STATE_GNOME;
self->color_scheme = get_gnome_color_scheme (variant);
g_variant_unref (variant);
}
- if (read_portal_setting (self, "org.gnome.desktop.interface.a11y",
+ if (!self->has_high_contrast &&
+ read_portal_setting (self, "org.gnome.desktop.interface.a11y",
"high-contrast", "b", &variant)) {
self->has_high_contrast = TRUE;
+ self->high_contrast_portal_state = HIGH_CONTRAST_STATE_GNOME;
self->high_contrast = g_variant_get_boolean (variant);
g_variant_unref (variant);
@@ -364,6 +411,9 @@ init_nsapp_observer (AdwSettings *settings)
{
static ThemeChangedObserver *observer;
+ if (settings->has_color_scheme)
+ return;
+
if (@available(*, macOS 10.14)) {
settings->has_color_scheme = TRUE;
}
@@ -506,10 +556,13 @@ adw_settings_constructed (GObject *object)
G_OBJECT_CLASS (adw_settings_parent_class)->constructed (object);
+ init_debug (self);
#ifdef __APPLE__
- init_nsapp_observer (self);
+ if (!self->has_color_scheme || !self->has_high_contrast)
+ init_nsapp_observer (self);
#elif defined(G_OS_UNIX)
- init_portal (self);
+ if (!self->has_color_scheme || !self->has_high_contrast)
+ init_portal (self);
#endif
if (!self->has_color_scheme || !self->has_high_contrast)
@@ -594,6 +647,8 @@ adw_settings_class_init (AdwSettingsClass *klass)
static void
adw_settings_init (AdwSettings *self)
{
+ self->high_contrast_portal_state = HIGH_CONTRAST_STATE_NONE;
+ self->color_scheme_portal_state = COLOR_SCHEME_STATE_NONE;
}
AdwSettings *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]