diff options
author | Florian Müllner <fmuellner@gnome.org> | 2021-12-21 00:23:59 +0100 |
---|---|---|
committer | Florian Müllner <fmuellner@gnome.org> | 2022-01-04 23:27:50 +0100 |
commit | c63419efc78e92c5e0aa0fb335a95265adfb8412 (patch) | |
tree | 8c819e025b663e58e5823d565310922a412dfd5b /plugins | |
parent | 1f5984c340a3f90ffbb56c6c8a94c7ace3ac30d2 (diff) | |
download | gnome-settings-daemon-c63419efc78e92c5e0aa0fb335a95265adfb8412.tar.gz |
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.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/xsettings/gsd-xsettings-manager.c | 38 |
1 files 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" @@ -380,6 +383,25 @@ translate_button_layout (GsdXSettingsManager *manager, } 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")) { |