[dconf] engine: add support for WritabilityNotify



commit 673d6d2a394cdfa84b3e071116ab8a588adfec2c
Author: Ryan Lortie <desrt desrt ca>
Date:   Tue Nov 26 16:00:53 2013 -0500

    engine: add support for WritabilityNotify
    
    Wire through WritabilityNotify signals from the engine.  This has been
    unimplemented for a very long time...

 client/dconf-client.c            |    1 +
 dbus-1/dconf-dbus-1.c            |    1 +
 engine/dconf-engine.c            |   27 +++++++++++++++++++++++----
 engine/dconf-engine.h            |    1 +
 gsettings/dconfsettingsbackend.c |    1 +
 tests/engine.c                   |    1 +
 6 files changed, 28 insertions(+), 4 deletions(-)
---
diff --git a/client/dconf-client.c b/client/dconf-client.c
index 5832780..26f842c 100644
--- a/client/dconf-client.c
+++ b/client/dconf-client.c
@@ -166,6 +166,7 @@ dconf_engine_change_notify (DConfEngine         *engine,
                             const gchar         *prefix,
                             const gchar * const *changes,
                             const gchar *        tag,
+                            gboolean             is_writability,
                             gpointer             origin_tag,
                             gpointer             user_data)
 {
diff --git a/dbus-1/dconf-dbus-1.c b/dbus-1/dconf-dbus-1.c
index a4d7907..67de4a0 100644
--- a/dbus-1/dconf-dbus-1.c
+++ b/dbus-1/dconf-dbus-1.c
@@ -45,6 +45,7 @@ dconf_engine_change_notify (DConfEngine         *engine,
                             const gchar         *prefix,
                             const gchar * const *changes,
                             const gchar         *tag,
+                            gboolean             is_writability,
                             gpointer             origin_tag,
                             gpointer             user_data)
 {
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);
 
diff --git a/gsettings/dconfsettingsbackend.c b/gsettings/dconfsettingsbackend.c
index 9db10f7..0c908ed 100644
--- a/gsettings/dconfsettingsbackend.c
+++ b/gsettings/dconfsettingsbackend.c
@@ -241,6 +241,7 @@ dconf_engine_change_notify (DConfEngine         *engine,
                             const gchar         *prefix,
                             const gchar * const *changes,
                             const gchar         *tag,
+                            gboolean             is_writability,
                             gpointer             origin_tag,
                             gpointer             user_data)
 {
diff --git a/tests/engine.c b/tests/engine.c
index 1f043e9..a67e42b 100644
--- a/tests/engine.c
+++ b/tests/engine.c
@@ -45,6 +45,7 @@ dconf_engine_change_notify (DConfEngine         *engine,
                             const gchar         *prefix,
                             const gchar * const *changes,
                             const gchar         *tag,
+                            gboolean             is_writability,
                             gpointer             origin_tag,
                             gpointer             user_data)
 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]