summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2013-11-26 16:00:53 -0500
committerRyan Lortie <desrt@desrt.ca>2013-11-26 16:00:53 -0500
commit673d6d2a394cdfa84b3e071116ab8a588adfec2c (patch)
tree683208bafe12bea9d91b87a6a63814504f010847 /engine
parent79b9e14a9617009236e5b2c44f13a45de949007a (diff)
downloaddconf-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.c27
-rw-r--r--engine/dconf-engine.h1
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);