summaryrefslogtreecommitdiff
path: root/engine/dconf-engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'engine/dconf-engine.c')
-rw-r--r--engine/dconf-engine.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/engine/dconf-engine.c b/engine/dconf-engine.c
index 5492098..c3e5707 100644
--- a/engine/dconf-engine.c
+++ b/engine/dconf-engine.c
@@ -786,7 +786,7 @@ dconf_engine_watch_established (DConfEngine *engine,
* We don't know what changed, so we can just say that potentially
* everything changed. This case is very rare, anyway...
*/
- dconf_engine_change_notify (engine, "/", changes, NULL, NULL, engine->user_data);
+ dconf_engine_change_notify (engine, "/", changes, NULL, FALSE, NULL, engine->user_data);
}
dconf_engine_call_handle_free (handle);
@@ -922,7 +922,7 @@ dconf_engine_emit_changes (DConfEngine *engine,
const gchar * const *changes;
if (dconf_changeset_describe (changeset, &prefix, &changes, NULL))
- dconf_engine_change_notify (engine, prefix, changes, NULL, origin_tag, engine->user_data);
+ dconf_engine_change_notify (engine, prefix, changes, NULL, FALSE, origin_tag, engine->user_data);
}
static void
@@ -1215,7 +1215,7 @@ dconf_engine_handle_dbus_signal (GBusType type,
* Check last_handled to determine if we should ignore it.
*/
if (!engine->last_handled || !g_str_equal (engine->last_handled, tag))
- dconf_engine_change_notify (engine, prefix, changes, tag, NULL, engine->user_data);
+ dconf_engine_change_notify (engine, prefix, changes, tag, FALSE, NULL, engine->user_data);
engines = g_slist_delete_link (engines, engines);
@@ -1227,10 +1227,29 @@ dconf_engine_handle_dbus_signal (GBusType type,
else if (g_str_equal (member, "WritabilityNotify"))
{
+ const gchar *empty_str_list[] = { "", NULL };
+ const gchar *path;
+ GSList *engines;
+
if (!g_variant_is_of_type (body, G_VARIANT_TYPE ("(s)")))
return;
- g_warning ("Need to handle writability changes"); /* XXX */
+ g_variant_get (body, "(&s)", &path);
+
+ g_mutex_lock (&dconf_engine_global_lock);
+ engines = g_slist_copy_deep (dconf_engine_global_list, (GCopyFunc) dconf_engine_ref, NULL);
+ g_mutex_unlock (&dconf_engine_global_lock);
+
+ while (engines)
+ {
+ DConfEngine *engine = engines->data;
+
+ dconf_engine_change_notify (engine, path, empty_str_list, "", TRUE, NULL, engine->user_data);
+
+ engines = g_slist_delete_link (engines, engines);
+
+ dconf_engine_unref (engine);
+ }
}
}