[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]