aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2013-12-06 17:25:47 +0000
committerTarmac <>2013-12-06 17:25:47 +0000
commita99685027a4eb04112ca1c27e0c9423d0f9a4518 (patch)
treeb423affe5582c1643acb000bd30e027ab2166f18
parenta26756e48e4e8d3caf0b8b20bb246c4107ca9cb0 (diff)
parentf1ebedfa17339bc9903a347900cf2753535a5e86 (diff)
downloadayatana-indicator-bluetooth-a99685027a4eb04112ca1c27e0c9423d0f9a4518.tar.gz
ayatana-indicator-bluetooth-a99685027a4eb04112ca1c27e0c9423d0f9a4518.tar.bz2
ayatana-indicator-bluetooth-a99685027a4eb04112ca1c27e0c9423d0f9a4518.zip
Gets us a little closer to the spec in two ways:
1. Indicator Visibility On the desktop, the indicator's header icon is visible whenever a default adapter is available (whether the adapter is powered or not) and the user's preference settings call for a visible Bluetooth indicator. On the phone, the indicator's header icon is visible whenever a default adapter is available *and* the adapter is powered. 2. Header Icon If Bluetooth is off, the header icon now uses the "bluetooth-disabled" icon. If Bluetooth is on, it now uses the "bluetooth-active" icon. If Bluetooth is on and has a connected device, it now uses the "bluetooth-paired" icon. Fixes: https://bugs.launchpad.net/bugs/1126108. Approved by PS Jenkins bot, Lars Uebernickel.
-rw-r--r--src/bluetooth.vala3
-rw-r--r--src/bluez.vala23
-rw-r--r--src/desktop.vala4
-rw-r--r--src/profile.vala14
4 files changed, 37 insertions, 7 deletions
diff --git a/src/bluetooth.vala b/src/bluetooth.vala
index b268701..c711e19 100644
--- a/src/bluetooth.vala
+++ b/src/bluetooth.vala
@@ -32,6 +32,9 @@ public interface Bluetooth: Object
eg by a laptop's network killswitch */
public abstract bool enabled { get; protected set; }
+ /* True if we have a connected device. */
+ public abstract bool connected { get; protected set; }
+
/* Try to enable/disable bluetooth. This can fail if it's overridden
by the system, eg by a laptop's network killswitch */
public abstract void try_set_enabled (bool b);
diff --git a/src/bluez.vala b/src/bluez.vala
index 1a1f837..a189a16 100644
--- a/src/bluez.vala
+++ b/src/bluez.vala
@@ -157,6 +157,8 @@ public class Bluez: Bluetooth, Object
critical (@"$(e.message)");
}
+ supported = object_path != null;
+
on_default_adapter_properties_changed ();
}
@@ -414,6 +416,7 @@ public class Bluez: Bluetooth, Object
supports_file_transfer));
devices_changed ();
+ update_connected ();
}
/* update the 'enabled' property by looking at the killswitch state
@@ -424,7 +427,22 @@ public class Bluez: Bluetooth, Object
debug (@"in upate_enabled, powered is $powered, blocked is $blocked");
enabled = powered && !blocked;
}
-
+
+ private bool have_connected_device ()
+ {
+ var devices = get_devices();
+
+ foreach (var device in devices)
+ if (device.is_connected)
+ return true;
+
+ return false;
+ }
+
+ private void update_connected ()
+ {
+ connected = have_connected_device ();
+ }
////
//// Public API
@@ -444,6 +462,8 @@ public class Bluez: Bluetooth, Object
device_connect (proxy);
else
device_disconnect (proxy);
+
+ update_connected ();
}
}
@@ -463,6 +483,7 @@ public class Bluez: Bluetooth, Object
public bool supported { get; protected set; default = false; }
public bool discoverable { get; protected set; default = false; }
public bool enabled { get; protected set; default = false; }
+ public bool connected { get; protected set; default = false; }
public void try_set_enabled (bool b)
{
diff --git a/src/desktop.vala b/src/desktop.vala
index 3c21124..198101a 100644
--- a/src/desktop.vala
+++ b/src/desktop.vala
@@ -66,7 +66,7 @@ class Desktop: Profile
// know when to show the indicator & when to hide it
settings.changed["visible"].connect (()=> update_visibility());
- bluetooth.notify["enabled"].connect (() => update_visibility());
+ bluetooth.notify["supported"].connect (() => update_visibility());
update_visibility ();
// when devices change, rebuild our device section
@@ -82,7 +82,7 @@ class Desktop: Profile
void update_visibility ()
{
- visible = bluetooth.enabled && settings.get_boolean("visible");
+ visible = bluetooth.supported && settings.get_boolean("visible");
}
///
diff --git a/src/profile.vala b/src/profile.vala
index 6aedec3..4320ac8 100644
--- a/src/profile.vala
+++ b/src/profile.vala
@@ -37,7 +37,8 @@ class Profile: Object
null,
action_state_for_root());
notify["visible"].connect (() => update_root_action_state());
-
+ bluetooth.notify["enabled"].connect (() => update_root_action_state());
+ bluetooth.notify["connected"].connect (() => update_root_action_state());
menu = new Menu ();
var item = create_root_menuitem ();
@@ -85,7 +86,7 @@ class Profile: Object
protected MenuItem create_enabled_menuitem ()
{
- var item = new MenuItem ("Bluetooth", "indicator.bluetooth-enabled");
+ var item = new MenuItem (_("Bluetooth"), "indicator.bluetooth-enabled");
item.set_attribute ("x-canonical-type", "s",
"com.canonical.indicator.switch");
@@ -146,7 +147,13 @@ class Profile: Object
{
string a11y;
string icon_name;
- if (bluetooth.enabled)
+
+ if (bluetooth.connected)
+ {
+ a11y = "Bluetooth (connections)";
+ icon_name = "bluetooth-paired";
+ }
+ else if (bluetooth.enabled)
{
a11y = "Bluetooth (on)";
icon_name = "bluetooth-active";
@@ -158,7 +165,6 @@ class Profile: Object
}
var icon = new ThemedIcon.with_default_fallbacks (icon_name);
-
var builder = new VariantBuilder (new VariantType ("a{sv}"));
builder.add ("{sv}", "visible", new Variant.boolean (visible));
builder.add ("{sv}", "accessible-desc", new Variant.string (a11y));