diff --git a/data/io.elementary.settings-daemon.gschema.xml b/data/io.elementary.settings-daemon.gschema.xml index 3fe07084..4323e977 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,