@@ -121,6 +121,11 @@ private class AccountsServiceMonitor : GLib.Object {
121121
122122[DBus (name = " org.freedesktop.impl.portal.Settings" )]
123123public class SettingsDaemon.Settings : GLib .Object {
124+ public enum ReduceMotionPreference {
125+ NO_PREFERENCE = 0 ,
126+ REDUCE = 1 ,
127+ }
128+
124129 public uint32 version {
125130 get { return 1 ; }
126131 }
@@ -131,6 +136,7 @@ public class SettingsDaemon.Settings : GLib.Object {
131136 private AccountsServiceMonitor monitor;
132137
133138 private const string [] SUPPORTED_SCHEMAS = {
139+ " io.elementary.settings-daemon.a11y" ,
134140 " io.elementary.settings-daemon.datetime" ,
135141 " org.freedesktop.appearance"
136142 };
@@ -148,16 +154,24 @@ public class SettingsDaemon.Settings : GLib.Object {
148154 foreach (unowned var schema in SUPPORTED_SCHEMAS ) {
149155 if (SettingsSchemaSource . get_default (). lookup (schema, true ) != null ) {
150156 settings[schema] = new GLib .Settings (schema);
151- settings[schema]. changed. connect ((key) = > {
152- var @value = settings[schema]. get_value (key);
153- setting_changed (schema, key, value );
154- });
157+ settings[schema]. changed. connect (on_setting_changed);
155158 } else {
156159 warning (" GSettings schema `%s ` not found on the system!" , schema);
157160 }
158161 }
159162 }
160163
164+ private void on_setting_changed (GLib .Settings settings , string key ) {
165+ var new_value = settings. get_value (key);
166+
167+ if (settings. schema_id == " io.elementary.settings-daemon.a11y" && key == " reduced-motion" ) {
168+ setting_changed (" org.freedesktop.appearance" , " reduced-motion" , new_value);
169+ return ;
170+ }
171+
172+ setting_changed (settings. schema_id, key, new_value);
173+ }
174+
161175 private bool namespace_matches (string namespace , string [] patterns ) {
162176 foreach (var pattern in patterns) {
163177 if (pattern[0 ] == ' \0 ' ) {
@@ -228,27 +242,40 @@ public class SettingsDaemon.Settings : GLib.Object {
228242 return rgb_to_variant (0 );
229243 }
230244
245+ private Variant get_reduced_motion () {
246+ unowned var setting = settings[" io.elementary.settings-daemon.a11y" ];
247+ if (setting != null && setting. settings_schema. has_key (" reduced-motion" )) {
248+ var val = (ReduceMotionPreference ) setting. get_enum (" reduced-motion" );
249+ return new Variant .uint32 (val);
250+ }
251+
252+ return new Variant .uint32 (ReduceMotionPreference . NO_PREFERENCE );
253+ }
254+
231255 public async GLib .HashTable<string, GLib .HashTable<string, GLib . Variant >> read_all (string [] namespaces ) throws GLib .DBusError , GLib .IOError {
232256 var ret = new GLib .HashTable<string, GLib .HashTable<string, GLib . Variant >> (str_hash, str_equal);
233257
234258 settings. foreach ((schema, setting) = > {
235259 if (namespace_matches (schema, namespaces)) {
236260 var dict = new GLib .HashTable<string, GLib . Variant > (str_hash, str_equal);
237261
238- if (schema == " org.freedesktop.appearance" ) {
239- dict. insert (" color-scheme" , get_color_scheme ());
240- dict. insert (" accent-color" , get_accent_color ());
241- } else {
242- var keys = setting. settings_schema. list_keys ();
243- foreach (unowned var key in keys) {
244- dict. insert (key, setting. get_value (key));
245- }
262+ var keys = setting. settings_schema. list_keys ();
263+ foreach (unowned var key in keys) {
264+ dict. insert (key, setting. get_value (key));
246265 }
247266
248267 ret. insert (schema, dict);
249268 }
250269 });
251270
271+ if (namespace_matches (" org.freedesktop.appearance" , namespaces)) {
272+ var dict = new GLib .HashTable<string, GLib . Variant > (str_hash, str_equal);
273+ dict. insert (" color-scheme" , get_color_scheme ());
274+ dict. insert (" accent-color" , get_accent_color ());
275+ dict. insert (" reduced-motion" , get_reduced_motion ());
276+ ret. insert (" org.freedesktop.appearance" , dict);
277+ }
278+
252279 return ret;
253280 }
254281
@@ -261,6 +288,10 @@ public class SettingsDaemon.Settings : GLib.Object {
261288 if (key == " accent-color" ) {
262289 return get_accent_color ();
263290 }
291+
292+ if (key == " reduced-motion" ) {
293+ return get_reduced_motion ();
294+ }
264295 }
265296
266297 unowned GLib . Settings ? setting = settings[namespace];
0 commit comments