diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2013-02-08 11:38:17 +1300 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2013-02-08 11:38:17 +1300 |
commit | 4643e1008371882190c7dcc3dfcec12d6008152b (patch) | |
tree | fbcba4433b70d39879389a7b95cb6a31cf33ff41 /src | |
parent | 0166a12eefbd48e40ffe3354994462eea45461f0 (diff) | |
download | ayatana-indicator-bluetooth-4643e1008371882190c7dcc3dfcec12d6008152b.tar.gz ayatana-indicator-bluetooth-4643e1008371882190c7dcc3dfcec12d6008152b.tar.bz2 ayatana-indicator-bluetooth-4643e1008371882190c7dcc3dfcec12d6008152b.zip |
Only show indicator if Bluetooth adapter present
Diffstat (limited to 'src')
-rw-r--r-- | src/indicator-bluetooth-service.vala | 29 | ||||
-rw-r--r-- | src/indicator-bluetooth.vala | 5 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/indicator-bluetooth-service.vala b/src/indicator-bluetooth-service.vala index 0348876..21ac4e5 100644 --- a/src/indicator-bluetooth-service.vala +++ b/src/indicator-bluetooth-service.vala @@ -116,6 +116,10 @@ public class BluetoothIndicator menu.child_append (item); killswitch_state_changed_cb (killswitch.state); + + client.adapter_model.row_inserted.connect (adapters_changed_cb); + client.adapter_model.row_deleted.connect (adapters_changed_cb); + adapters_changed_cb (); } private BluetoothMenuItem? find_menu_item (string address) @@ -172,6 +176,26 @@ public class BluetoothIndicator item.update (type, proxy, alias, icon, connected, services, uuids); } + private void adapters_changed_cb () + { + bluetooth_service._visible = client.adapter_model.iter_n_children (null) > 0; + var builder = new VariantBuilder (VariantType.ARRAY); + builder.add ("{sv}", "Visible", new Variant.boolean (bluetooth_service._visible)); + try + { + var properties = new Variant ("(sa{sv}as)", "com.canonical.indicator.bluetooth.service", builder, null); + bus.emit_signal (null, + "/com/canonical/indicator/bluetooth/service", + "org.freedesktop.DBus.Properties", + "PropertiesChanged", + properties); + } + catch (Error e) + { + warning ("Failed to emit signal: %s", e.message); + } + } + private void device_removed_cb (Gtk.TreePath path) { Gtk.TreeIter iter; @@ -393,6 +417,11 @@ public static int main (string[] args) [DBus (name = "com.canonical.indicator.bluetooth.service")] private class BluetoothService : Object { + internal bool _visible = false; + public bool visible + { + get { return _visible; } + } internal string _icon_name = "bluetooth-active"; public string icon_name { diff --git a/src/indicator-bluetooth.vala b/src/indicator-bluetooth.vala index 4f3aef8..bfbbc9f 100644 --- a/src/indicator-bluetooth.vala +++ b/src/indicator-bluetooth.vala @@ -26,6 +26,9 @@ public class BluetoothIndicator : Indicator.Object var menu_client = menu.get_client (); menu_client.add_type_handler_full ("x-canonical-switch", new_switch_cb); + + /* Hide until ready */ + set_visible (false); } private bool new_switch_cb (Dbusmenu.Menuitem newitem, Dbusmenu.Menuitem parent, Dbusmenu.Client client) @@ -80,6 +83,7 @@ public class BluetoothIndicator : Indicator.Object private void server_properties_changed_cb () { + set_visible (proxy.visible); Indicator.image_helper_update (image, proxy.icon_name); accessible_description = proxy.accessible_description; } @@ -122,6 +126,7 @@ public class Switch : Ido.SwitchMenuItem [DBus (name = "com.canonical.indicator.bluetooth.service")] public interface BluetoothService : DBusProxy { + public abstract bool visible { owned get; } public abstract string icon_name { owned get; } public abstract string accessible_description { owned get; } } |