@@ -97,13 +97,30 @@ public class SettingsDaemon.Settings : GLib.Object {
9797
9898 public signal void setting_changed (string namespace , string key , GLib .Variant value );
9999
100+ private HashTable<string, GLib . Settings > settings;
100101 private AccountsServiceMonitor monitor;
101102
103+ private const string [] SUPPORTED_SCHEMAS = {
104+ " io.elementary.settings-daemon.datetime" ,
105+ " org.freedesktop.appearance"
106+ };
107+
102108 construct {
103109 monitor = new AccountsServiceMonitor ();
104110 monitor. notify[" color-scheme" ]. connect (() = > {
105111 setting_changed (" org.freedesktop.appearance" , " color-scheme" , get_color_scheme ());
106112 });
113+
114+ settings = new HashTable<string, GLib . Settings > (str_hash, str_equal);
115+ foreach (var schema in SUPPORTED_SCHEMAS ) {
116+ if (SettingsSchemaSource . get_default (). lookup (schema, true ) != null ) {
117+ settings[schema] = new GLib .Settings (schema);
118+ settings[schema]. changed. connect ((key) = > {
119+ var @value = settings[schema]. get_value (key);
120+ setting_changed (schema, key, value );
121+ });
122+ }
123+ }
107124 }
108125
109126 private bool namespace_matches (string namespace , string [] patterns ) {
@@ -132,20 +149,35 @@ public class SettingsDaemon.Settings : GLib.Object {
132149 public async GLib .HashTable<string, GLib .HashTable<string, GLib . Variant >> read_all (string [] namespaces ) throws GLib .DBusError , GLib .IOError {
133150 var ret = new GLib .HashTable<string, GLib .HashTable<string, GLib . Variant >> (str_hash, str_equal);
134151
135- if (namespace_matches (" org.freedesktop.appearance" , namespaces)) {
136- var dict = new HashTable<string, Variant > (str_hash, str_equal);
137-
138- dict. insert (" color-scheme" , get_color_scheme ());
152+ foreach (var schema in SUPPORTED_SCHEMAS ) {
153+ if (namespace_matches (schema, namespaces)) {
154+ var dict = new HashTable<string, Variant > (str_hash, str_equal);
155+
156+ if (schema == " org.freedesktop.appearance" ) {
157+ dict. insert (" color-scheme" , get_color_scheme ());
158+ } else {
159+ var setting = settings[schema];
160+ foreach (var key in setting. settings_schema. list_keys ()) {
161+ dict. insert (key, setting. get_value (key));
162+ }
163+ }
139164
140- ret. insert (" org.freedesktop.appearance" , dict);
165+ ret. insert (schema, dict);
166+ }
141167 }
142168
143169 return ret;
144170 }
145171
146172 public async GLib .Variant read (string namespace , string key ) throws GLib .DBusError , GLib .Error {
147- if (namespace == " org.freedesktop.appearance" && key == " color-scheme" ) {
148- return get_color_scheme ();
173+ if (namespace in SUPPORTED_SCHEMAS) {
174+ if (namespace == "org .freedesktop .appearance " && key == "color -scheme ") {
175+ return get_color_scheme ();
176+ } else {
177+ if (settings[namespace]. settings_schema. has_key (key)) {
178+ return settings[namespace]. get_value (key);
179+ }
180+ }
149181 }
150182
151183 debug (" Attempted to read unknown namespace/key pair: %s %s " , namespace, key);
0 commit comments