[gnome-shell] network: Add a selected indicator to the current access point



commit 64efbe703a101a632b64338dc23cee064c09a3a3
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Mon Aug 19 10:31:31 2013 -0400

    network: Add a selected indicator to the current access point
    
    https://bugzilla.gnome.org/show_bug.cgi?id=706136

 data/theme/gnome-shell.css |    4 ++++
 js/ui/status/network.js    |   39 ++++++++++++++++++++++++++++++++++-----
 2 files changed, 38 insertions(+), 5 deletions(-)
---
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index 78b27d6..f5c50c4 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -312,6 +312,10 @@ StScrollBar StButton#vhandle:active {
     background-color: #333;
 }
 
+.nm-dialog-item-box {
+    spacing: 20px;
+}
+
 .nm-dialog-icons {
     spacing: .5em;
 }
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index fb84e32..a06a5ce 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -524,18 +524,21 @@ const NMWirelessDialogItem = new Lang.Class({
         this._label = new St.Label({ text: title });
 
         this.actor.label_actor = this._label;
-        this._content.add(this._label, { expand: true, x_align: St.Align.START });
+        this._content.add(this._label, { x_align: St.Align.START });
+
+        this._selectedIcon = new St.Icon({ style_class: 'nm-dialog-icon',
+                                           icon_name: 'object-select-symbolic' });
+        this._content.add(this._selectedIcon);
 
         this._icons = new St.BoxLayout({ style_class: 'nm-dialog-icons' });
-        this._content.add(this._icons, { x_fill: false, x_align: St.Align.END });
+        this._content.add(this._icons, { expand: true, x_fill: false, x_align: St.Align.END });
 
         this._secureIcon = new St.Icon({ style_class: 'nm-dialog-icon' });
         if (this._ap._secType != NMAccessPointSecurity.NONE)
             this._secureIcon.icon_name = 'network-wireless-encrypted-symbolic';
         this._icons.add_actor(this._secureIcon);
 
-        this._signalIcon = new St.Icon({ icon_name: this._getIcon(),
-                                         style_class: 'nm-dialog-icon' });
+        this._signalIcon = new St.Icon({ style_class: 'nm-dialog-icon' });
         this._icons.add_actor(this._signalIcon);
     },
 
@@ -544,6 +547,10 @@ const NMWirelessDialogItem = new Lang.Class({
         this._signalIcon.icon_name = this._getIcon();
     },
 
+    setActive: function(isActive) {
+        this._selectedIcon.opacity = isActive ? 255 : 0;
+    },
+
     _getIcon: function() {
         if (this._ap.mode == NM80211Mode.ADHOC)
             return 'network-workgroup-symbolic';
@@ -573,6 +580,7 @@ const NMWirelessDialog = new Lang.Class({
 
         this._apAddedId = device.connect('access-point-added', Lang.bind(this, this._accessPointAdded));
         this._apRemovedId = device.connect('access-point-removed', Lang.bind(this, 
this._accessPointRemoved));
+        this._activeApChangedId = device.connect('notify::active-access-point', Lang.bind(this, 
this._activeApChanged));
 
         // accessPointAdded will also create dialog items
         let accessPoints = device.get_access_points() || [ ];
@@ -581,6 +589,7 @@ const NMWirelessDialog = new Lang.Class({
         }));
 
         this._selectedNetwork = null;
+        this._activeApChanged();
         this._updateSensitivity();
     },
 
@@ -589,15 +598,34 @@ const NMWirelessDialog = new Lang.Class({
             GObject.Object.prototype.disconnect.call(this._device, this._apAddedId);
             this._apAddedId = 0;
         }
-
         if (this._apRemovedId) {
             GObject.Object.prototype.disconnect.call(this._device, this._apRemovedId);
             this._apRemovedId = 0;
         }
+        if (this._activeApChangedId) {
+            GObject.Object.prototype.disconnect.call(this._device, this._activeApChangedId);
+            this._activeApChangedId = 0;
+        }
 
         this.parent();
     },
 
+    _activeApChanged: function() {
+        if (this._activeNetwork)
+            this._activeNetwork.item.setActive(false);
+
+        this._activeNetwork = null;
+        if (this._device.active_access_point) {
+            let idx = this._findNetwork(this._device.active_access_point);
+            if (idx >= 0)
+                this._activeNetwork = this._networks[idx];
+        }
+
+        if (this._activeNetwork)
+            this._activeNetwork.item.setActive(true);
+        this._updateSensitivity();
+    },
+
     _updateSensitivity: function() {
         let connectSensitive = this._selectedNetwork != null;
         this._connectButton.reactive = connectSensitive;
@@ -891,6 +919,7 @@ const NMWirelessDialog = new Lang.Class({
 
     _createNetworkItem: function(network) {
         network.item = new NMWirelessDialogItem(network);
+        network.item.setActive(network == this._selectedNetwork);
         network.item.connect('selected', Lang.bind(this, function() {
             Util.ensureActorVisibleInScrollView(this._scrollView, network.item.actor);
             this._selectNetwork(network);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]