diff options
Diffstat (limited to 'src/tray.vala')
-rw-r--r-- | src/tray.vala | 107 |
1 files changed, 53 insertions, 54 deletions
diff --git a/src/tray.vala b/src/tray.vala index 942d230..d1dfdd2 100644 --- a/src/tray.vala +++ b/src/tray.vala @@ -1,29 +1,29 @@ namespace AstalTray { -[DBus (name="org.kde.StatusNotifierWatcher")] -internal interface IWatcher : Object { + [DBus (name="org.kde.StatusNotifierWatcher")] + internal interface IWatcher : Object { - public abstract string[] RegisteredStatusNotifierItems { owned get; } - public abstract int ProtocolVersion { owned get; } + public abstract string[] RegisteredStatusNotifierItems { owned get; } + public abstract int ProtocolVersion { owned get; } - public abstract void RegisterStatusNotifierItem(string service, BusName sender) throws DBusError, IOError; - public abstract void RegisterStatusNotifierHost(string service) throws DBusError, IOError; - - public signal void StatusNotifierItemRegistered(string service); - public signal void StatusNotifierItemUnregistered(string service); - public signal void StatusNotifierHostRegistered(); - public signal void StatusNotifierHostUnregistered(); + public abstract void RegisterStatusNotifierItem(string service, BusName sender) throws DBusError, IOError; + public abstract void RegisterStatusNotifierHost(string service) throws DBusError, IOError; -} + public signal void StatusNotifierItemRegistered(string service); + public signal void StatusNotifierItemUnregistered(string service); + public signal void StatusNotifierHostRegistered(); + public signal void StatusNotifierHostUnregistered(); + + } -public class Tray : Object { + public class Tray : Object { private StatusNotifierWatcher watcher; private IWatcher proxy; private HashTable<string, TrayItem> _items; public List<weak TrayItem> items { owned get { return _items.get_values(); }} - + public signal void item_added(string service); public signal void item_removed(string service); @@ -31,54 +31,52 @@ public class Tray : Object { _items = new HashTable<string, TrayItem>(GLib.str_hash, GLib.str_equal); try { - Bus.own_name( - BusType.SESSION, - "org.kde.StatusNotifierWatcher", - BusNameOwnerFlags.NONE, - start_watcher, - () => { - if (proxy != null) { - //foreach (string item in proxy.RegisteredStatusNotifierItems) { - // on_item_unregister(item); - //} - proxy = null; - } - }, - start_host - ); - + Bus.own_name( + BusType.SESSION, + "org.kde.StatusNotifierWatcher", + BusNameOwnerFlags.NONE, + start_watcher, + () => { + if (proxy != null) { + proxy = null; + } + }, + start_host); + } catch (Error err) { - critical("%s", err.message); + critical("%s", err.message); } } private void start_watcher(DBusConnection conn) { - watcher = new StatusNotifierWatcher(); - conn.register_object("/StatusNotifierWatcher", watcher); - watcher.StatusNotifierItemRegistered.connect(on_item_register); - watcher.StatusNotifierItemUnregistered.connect(on_item_unregister); + try { + watcher = new StatusNotifierWatcher(); + conn.register_object("/StatusNotifierWatcher", watcher); + watcher.StatusNotifierItemRegistered.connect(on_item_register); + watcher.StatusNotifierItemUnregistered.connect(on_item_unregister); + } catch (Error err) { + critical(err.message); + } } private void start_host() { if(proxy != null) return; - - proxy = Bus.get_proxy_sync( - BusType.SESSION, - "org.kde.StatusNotifierWatcher", - "/StatusNotifierWatcher" - ); - - proxy.StatusNotifierItemRegistered.connect(on_item_register); - proxy.StatusNotifierItemUnregistered.connect(on_item_unregister); - - proxy.notify["g-name-owner"].connect( - () => { + + try { + proxy = Bus.get_proxy_sync(BusType.SESSION, + "org.kde.StatusNotifierWatcher", + "/StatusNotifierWatcher"); + + proxy.StatusNotifierItemRegistered.connect(on_item_register); + proxy.StatusNotifierItemUnregistered.connect(on_item_unregister); + + proxy.notify["g-name-owner"].connect(() => { _items.foreach((service, _) => { item_removed(service); }); _items.remove_all(); - + if(proxy != null) { foreach (string item in proxy.RegisteredStatusNotifierItems) { on_item_register(item); @@ -88,12 +86,13 @@ public class Tray : Object { on_item_register(item); } } - } - ); - + }); - foreach (string item in proxy.RegisteredStatusNotifierItems) { - on_item_register(item); + foreach (string item in proxy.RegisteredStatusNotifierItems) { + on_item_register(item); + } + } catch (Error err) { + critical("cannot get proxy: %s", err.message); } } @@ -116,7 +115,7 @@ public class Tray : Object { return _items.get(service); } -} + } } |