diff options
author | Ryan Lortie <desrt@desrt.ca> | 2013-11-26 16:00:53 -0500 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2013-11-26 16:00:53 -0500 |
commit | 673d6d2a394cdfa84b3e071116ab8a588adfec2c (patch) | |
tree | 683208bafe12bea9d91b87a6a63814504f010847 /engine | |
parent | 79b9e14a9617009236e5b2c44f13a45de949007a (diff) | |
download | dconf-673d6d2a394cdfa84b3e071116ab8a588adfec2c.tar.gz |
engine: add support for WritabilityNotify
Wire through WritabilityNotify signals from the engine. This has been
unimplemented for a very long time...
Diffstat (limited to 'engine')
-rw-r--r-- | engine/dconf-engine.c | 27 | ||||
-rw-r--r-- | engine/dconf-engine.h | 1 |
2 files changed, 24 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); + } } } diff --git a/engine/dconf-engine.h b/engine/dconf-engine.h index cac631f..18c2c46 100644 --- a/engine/dconf-engine.h +++ b/engine/dconf-engine.h @@ -78,6 +78,7 @@ void dconf_engine_change_notify (DConfEn const gchar *prefix, const gchar * const *changes, const gchar *tag, + gboolean is_writability, gpointer origin_tag, gpointer user_data); |