From 1a24a9a4e7195dfe7936f2711298706611e7ad7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sun, 30 Aug 2026 10:30:20 -0700 Subject: [PATCH 1/3] Add support for ContrastPreference --- .../io.elementary.settings-daemon.gschema.xml | 12 ++++++ meson.build | 1 + settings-portal/Settings.vala | 42 +++++++++++++------ settings-portal/meson.build | 1 + 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/data/io.elementary.settings-daemon.gschema.xml b/data/io.elementary.settings-daemon.gschema.xml index 3fe07084..77d7a156 100644 --- a/data/io.elementary.settings-daemon.gschema.xml +++ b/data/io.elementary.settings-daemon.gschema.xml @@ -141,11 +141,23 @@ + + + + + + + 'no-preference' Reduce motion effects If enabled, reduces motion effects for the user interface. + + 'no-preference' + Contrast + Indicates the preferred level of contrast for the user interface. + diff --git a/meson.build b/meson.build index 13c19c88..a684431f 100644 --- a/meson.build +++ b/meson.build @@ -11,6 +11,7 @@ fwupd_dep = dependency('fwupd') gio_dep = dependency ('gio-2.0') glib_dep = dependency('glib-2.0') granite_dep = dependency('granite-7', version: '>= 7.0.0') +gtk_dep = dependency('gtk4', version: '>=4.20') gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0') gexiv2_dep = dependency('gexiv2') pk_dep = dependency('packagekit-glib2') diff --git a/settings-portal/Settings.vala b/settings-portal/Settings.vala index 9926c704..eb6a5046 100644 --- a/settings-portal/Settings.vala +++ b/settings-portal/Settings.vala @@ -162,9 +162,15 @@ public class SettingsDaemon.Settings : GLib.Object { } private void on_setting_changed (GLib.Settings settings, string key) { - if (settings.schema_id == "io.elementary.settings-daemon.a11y" && key == "reduced-motion") { - setting_changed ("org.freedesktop.appearance", "reduced-motion", get_reduced_motion ()); - return; + if (settings.schema_id == "io.elementary.settings-daemon.a11y") { + switch (key) { + case "contrast": + setting_changed ("org.freedesktop.appearance", "contrast", get_contrast ()); + return; + case "reduced-motion": + setting_changed ("org.freedesktop.appearance", "reduced-motion", get_reduced_motion ()); + return; + } } setting_changed (settings.schema_id, key, settings.get_value (key)); @@ -240,6 +246,16 @@ public class SettingsDaemon.Settings : GLib.Object { return rgb_to_variant (0); } + private Variant get_contrast () { + unowned var setting = settings["io.elementary.settings-daemon.a11y"]; + if (setting != null && setting.settings_schema.has_key ("contrast")) { + var val = (Gtk.InterfaceContrast) setting.get_enum ("contrast"); + return new Variant.uint32 (val); + } + + return new Variant.uint32 (Gtk.InterfaceContrast.UNSUPPORTED); + } + private Variant get_reduced_motion () { unowned var setting = settings["io.elementary.settings-daemon.a11y"]; if (setting != null && setting.settings_schema.has_key ("reduced-motion")) { @@ -271,6 +287,7 @@ public class SettingsDaemon.Settings : GLib.Object { dict.insert ("color-scheme", get_color_scheme ()); dict.insert ("accent-color", get_accent_color ()); dict.insert ("reduced-motion", get_reduced_motion ()); + dict.insert ("contrast", get_contrast ()); ret.insert ("org.freedesktop.appearance", dict); } @@ -279,16 +296,15 @@ public class SettingsDaemon.Settings : GLib.Object { public async GLib.Variant read (string namespace, string key) throws GLib.DBusError, GLib.Error { if (namespace == "org.freedesktop.appearance") { - if (key == "color-scheme") { - return get_color_scheme (); - } - - if (key == "accent-color") { - return get_accent_color (); - } - - if (key == "reduced-motion") { - return get_reduced_motion (); + switch (key) { + case "color-scheme": + return get_color_scheme (); + case "accent-color": + return get_accent_color (); + case "reduced-motion": + return get_reduced_motion (); + case "contrast": + return get_contrast (); } } diff --git a/settings-portal/meson.build b/settings-portal/meson.build index a79dd147..0edc5150 100644 --- a/settings-portal/meson.build +++ b/settings-portal/meson.build @@ -11,6 +11,7 @@ executable( dependencies: [ config_dep, glib_dep, + gtk_dep, gio_dep, ], install: true, From ac2b77339052cfea9872d2308f65658ccf02eab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sun, 30 Aug 2026 10:44:10 -0700 Subject: [PATCH 2/3] Fix key values --- data/io.elementary.settings-daemon.gschema.xml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/data/io.elementary.settings-daemon.gschema.xml b/data/io.elementary.settings-daemon.gschema.xml index 77d7a156..15da562c 100644 --- a/data/io.elementary.settings-daemon.gschema.xml +++ b/data/io.elementary.settings-daemon.gschema.xml @@ -142,10 +142,10 @@ - - - - + + + + @@ -155,7 +155,8 @@ If enabled, reduces motion effects for the user interface. - 'no-preference' + + 'unsupported' Contrast Indicates the preferred level of contrast for the user interface. From 45ea0817375912b9b983bbe37542fed12c0416c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sun, 30 Aug 2026 10:54:27 -0700 Subject: [PATCH 3/3] Fix values again --- data/io.elementary.settings-daemon.gschema.xml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/data/io.elementary.settings-daemon.gschema.xml b/data/io.elementary.settings-daemon.gschema.xml index 15da562c..4323e977 100644 --- a/data/io.elementary.settings-daemon.gschema.xml +++ b/data/io.elementary.settings-daemon.gschema.xml @@ -142,10 +142,10 @@ - - - - + + + + @@ -155,8 +155,7 @@ If enabled, reduces motion effects for the user interface. - - 'unsupported' + 'no-preference' Contrast Indicates the preferred level of contrast for the user interface.