[dconf] Properly support watching in DConfClient
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc: 
- Subject: [dconf] Properly support watching in DConfClient
- Date: Tue, 10 May 2011 10:18:41 +0000 (UTC)
commit 70d1b330a7a09a555a1c66c17dc5111e08e77b8b
Author: Ryan Lortie <desrt desrt ca>
Date:   Tue May 10 12:16:20 2011 +0200
    Properly support watching in DConfClient
 client/dconf-client.vala |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)
---
diff --git a/client/dconf-client.vala b/client/dconf-client.vala
index d84f0c8..940abf2 100644
--- a/client/dconf-client.vala
+++ b/client/dconf-client.vala
@@ -8,18 +8,48 @@ namespace DConf {
 		WatchFunc watch_func;
 		Engine engine;
 
+		void got_signal (DBusConnection connection, string sender_name, string object_path, string interface_name, string signal_name, Variant parameters) {
+			unowned string path;
+			unowned string tag;
+			string[] items;
+
+			if (signal_name == "Notify" && parameters.is_of_type ((VariantType) "(sass)")) {
+				VariantIter iter;
+
+				parameters.get ("(&sas&s)", out path, out iter, out tag);
+				items = new string[iter.n_children ()];
+				for (var i = 0; i < items.length; i++) {
+					iter.next ("s", out items[i]);
+				}
+			} else if (signal_name == "WritabilityNotify" && parameters.is_of_type ((VariantType) "(s)")) {
+				parameters.get ("(&s)", out path);
+				items = new string[0];
+				tag = "";
+			} else {
+				assert_not_reached ();
+			}
+
+			watch_func (this, path, items, tag);
+		}
+
 		void call_sync (EngineMessage dcem, out string tag, Cancellable? cancellable) throws Error {
 			DBusConnection connection;
 
 			if (dcem.bus_types[0] == 'e') {
 				if (session == null) {
 					session = Bus.get_sync (BusType.SESSION, cancellable);
+					if (watch_func != null) {
+						session.signal_subscribe (null, "ca.desrt.dconf.Writer", null, null, null, DBusSignalFlags.NO_MATCH_RULE, got_signal);
+					}
 				}
 				connection = session;
 			} else {
 				assert (dcem.bus_types[0] == 'y');
 				if (system == null) {
 					system = Bus.get_sync (BusType.SYSTEM, cancellable);
+					if (watch_func != null) {
+						system.signal_subscribe (null, "ca.desrt.dconf.Writer", null, null, null, DBusSignalFlags.NO_MATCH_RULE, got_signal);
+					}
 				}
 				connection = system;
 			}
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]