@@ -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,22 @@ 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+ if (settings. schema_id == " io.elementary.settings-daemon.a11y" && key == " reduced-motion" ) {
166+ setting_changed (" org.freedesktop.appearance" , " reduced-motion" , get_reduced_motion ());
167+ return ;
168+ }
169+
170+ setting_changed (settings. schema_id, key, settings. get_value (key));
171+ }
172+
161173 private bool namespace_matches (string namespace , string [] patterns ) {
162174 foreach (var pattern in patterns) {
163175 if (pattern[0 ] == ' \0 ' ) {
@@ -228,27 +240,40 @@ public class SettingsDaemon.Settings : GLib.Object {
228240 return rgb_to_variant (0 );
229241 }
230242
243+ private Variant get_reduced_motion () {
244+ unowned var setting = settings[" io.elementary.settings-daemon.a11y" ];
245+ if (setting != null && setting. settings_schema. has_key (" reduced-motion" )) {
246+ var val = (ReduceMotionPreference ) setting. get_enum (" reduced-motion" );
247+ return new Variant .uint32 (val);
248+ }
249+
250+ return new Variant .uint32 (ReduceMotionPreference . NO_PREFERENCE );
251+ }
252+
231253 public async GLib .HashTable<string, GLib .HashTable<string, GLib . Variant >> read_all (string [] namespaces ) throws GLib .DBusError , GLib .IOError {
232254 var ret = new GLib .HashTable<string, GLib .HashTable<string, GLib . Variant >> (str_hash, str_equal);
233255
234256 settings. foreach ((schema, setting) = > {
235257 if (namespace_matches (schema, namespaces)) {
236258 var dict = new GLib .HashTable<string, GLib . Variant > (str_hash, str_equal);
237259
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- }
260+ var keys = setting. settings_schema. list_keys ();
261+ foreach (unowned var key in keys) {
262+ dict. insert (key, setting. get_value (key));
246263 }
247264
248265 ret. insert (schema, dict);
249266 }
250267 });
251268
269+ if (namespace_matches (" org.freedesktop.appearance" , namespaces)) {
270+ var dict = new GLib .HashTable<string, GLib . Variant > (str_hash, str_equal);
271+ dict. insert (" color-scheme" , get_color_scheme ());
272+ dict. insert (" accent-color" , get_accent_color ());
273+ dict. insert (" reduced-motion" , get_reduced_motion ());
274+ ret. insert (" org.freedesktop.appearance" , dict);
275+ }
276+
252277 return ret;
253278 }
254279
@@ -261,6 +286,10 @@ public class SettingsDaemon.Settings : GLib.Object {
261286 if (key == " accent-color" ) {
262287 return get_accent_color ();
263288 }
289+
290+ if (key == " reduced-motion" ) {
291+ return get_reduced_motion ();
292+ }
264293 }
265294
266295 unowned GLib . Settings ? setting = settings[namespace];
0 commit comments