[gnome-settings-daemon] xsettings: Support new "high-contrast" setting
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] xsettings: Support new "high-contrast" setting
- Date: Wed, 5 Jan 2022 18:45:34 +0000 (UTC)
commit c63419efc78e92c5e0aa0fb335a95265adfb8412
Author: Florian Müllner <fmuellner gnome org>
Date: Tue Dec 21 00:23:59 2021 +0100
xsettings: Support new "high-contrast" setting
We now have a boolean setting that determines whether the high-contrast
theme should be used. Support it by automatically setting the existing
`gtk-theme-name` and `gtk-icon-theme-name` properties when enabled.
With that, it is no longer necessary to change the regular theme settings
for high-contrast, so toggling between high-contrast and a non-default
theme finally works reliably.
plugins/xsettings/gsd-xsettings-manager.c | 38 +++++++++++++++++++++++++++++--
1 file changed, 36 insertions(+), 2 deletions(-)
---
diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c
index 5f1b4583..7e5b1021 100644
--- a/plugins/xsettings/gsd-xsettings-manager.c
+++ b/plugins/xsettings/gsd-xsettings-manager.c
@@ -56,6 +56,7 @@
#define PRIVACY_SETTINGS_SCHEMA "org.gnome.desktop.privacy"
#define WM_SETTINGS_SCHEMA "org.gnome.desktop.wm.preferences"
#define A11Y_SCHEMA "org.gnome.desktop.a11y"
+#define A11Y_INTERFACE_SCHEMA "org.gnome.desktop.a11y.interface"
#define CLASSIC_WM_SETTINGS_SCHEMA "org.gnome.shell.extensions.classic-overrides"
#define XSETTINGS_PLUGIN_SCHEMA "org.gnome.settings-daemon.plugins.xsettings"
@@ -72,6 +73,8 @@
#define FONT_HINTING_KEY "font-hinting"
#define FONT_RGBA_ORDER_KEY "font-rgba-order"
+#define HIGH_CONTRAST_KEY "high-contrast"
+
#define GTK_SETTINGS_DBUS_PATH "/org/gtk/Settings"
#define GTK_SETTINGS_DBUS_NAME "org.gtk.Settings"
@@ -379,6 +382,25 @@ translate_button_layout (GsdXSettingsManager *manager,
g_free (layout);
}
+static void
+translate_theme_name (GsdXSettingsManager *manager,
+ TranslationEntry *trans,
+ GVariant *value)
+{
+ GSettings *settings;
+ gboolean hc = FALSE;
+
+ settings = g_hash_table_lookup (manager->settings, A11Y_INTERFACE_SCHEMA);
+
+ if (settings)
+ hc = g_settings_get_boolean (settings, HIGH_CONTRAST_KEY);
+
+ xsettings_manager_set_string (manager->manager,
+ trans->xsetting_name,
+ hc ? "HighContrast"
+ : g_variant_get_string (value, NULL));
+}
+
static void
fixed_false_int (GsdXSettingsManager *manager,
FixedEntry *fixed)
@@ -477,9 +499,9 @@ static TranslationEntry translations [] = {
{ "org.gnome.desktop.interface", "cursor-blink", "Net/CursorBlink",
translate_bool_int },
{ "org.gnome.desktop.interface", "cursor-blink-time", "Net/CursorBlinkTime",
translate_int_int },
{ "org.gnome.desktop.interface", "cursor-blink-timeout", "Gtk/CursorBlinkTimeout",
translate_int_int },
- { "org.gnome.desktop.interface", "gtk-theme", "Net/ThemeName",
translate_string_string },
+ { "org.gnome.desktop.interface", "gtk-theme", "Net/ThemeName",
translate_theme_name },
{ "org.gnome.desktop.interface", "gtk-im-module", "Gtk/IMModule",
translate_string_string },
- { "org.gnome.desktop.interface", "icon-theme", "Net/IconThemeName",
translate_string_string },
+ { "org.gnome.desktop.interface", "icon-theme", "Net/IconThemeName",
translate_theme_name },
{ "org.gnome.desktop.interface", "cursor-theme", "Gtk/CursorThemeName",
translate_string_string },
{ "org.gnome.desktop.interface", "gtk-enable-primary-paste", "Gtk/EnablePrimaryPaste",
translate_bool_int },
{ "org.gnome.desktop.interface", "overlay-scrolling", "Gtk/OverlayScrolling",
translate_bool_int },
@@ -1019,6 +1041,16 @@ xsettings_callback (GSettings *settings,
return;
}
+ if (g_str_equal (key, HIGH_CONTRAST_KEY)) {
+ GSettings *iface_settings;
+
+ iface_settings = g_hash_table_lookup (manager->settings,
+ INTERFACE_SETTINGS_SCHEMA);
+ xsettings_callback (iface_settings, "gtk-theme", manager);
+ xsettings_callback (iface_settings, "icon-theme", manager);
+ return;
+ }
+
trans = find_translation_entry (settings, key);
if (trans == NULL) {
return;
@@ -1369,6 +1401,8 @@ gsd_xsettings_manager_start (GsdXSettingsManager *manager,
WM_SETTINGS_SCHEMA, g_settings_new (WM_SETTINGS_SCHEMA));
g_hash_table_insert (manager->settings,
A11Y_SCHEMA, g_settings_new (A11Y_SCHEMA));
+ g_hash_table_insert (manager->settings,
+ A11Y_INTERFACE_SCHEMA, g_settings_new (A11Y_INTERFACE_SCHEMA));
session = g_getenv ("XDG_CURRENT_DESKTOP");
if (session && strstr (session, "GNOME-Classic")) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]