summaryrefslogtreecommitdiff
path: root/src/tray.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/tray.vala')
-rw-r--r--src/tray.vala107
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);
}
-}
+ }
}