network: Add a selected indicator to the current access point

https://bugzilla.gnome.org/show_bug.cgi?id=706136
This commit is contained in:
Jasper St. Pierre 2013-08-19 10:31:31 -04:00
parent d272b0cbf3
commit 64efbe703a
2 changed files with 38 additions and 5 deletions
data/theme
js/ui/status

View File

@ -312,6 +312,10 @@ StScrollBar StButton#vhandle:active {
background-color: #333; background-color: #333;
} }
.nm-dialog-item-box {
spacing: 20px;
}
.nm-dialog-icons { .nm-dialog-icons {
spacing: .5em; spacing: .5em;
} }

View File

@ -524,18 +524,21 @@ const NMWirelessDialogItem = new Lang.Class({
this._label = new St.Label({ text: title }); this._label = new St.Label({ text: title });
this.actor.label_actor = this._label; 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._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' }); this._secureIcon = new St.Icon({ style_class: 'nm-dialog-icon' });
if (this._ap._secType != NMAccessPointSecurity.NONE) if (this._ap._secType != NMAccessPointSecurity.NONE)
this._secureIcon.icon_name = 'network-wireless-encrypted-symbolic'; this._secureIcon.icon_name = 'network-wireless-encrypted-symbolic';
this._icons.add_actor(this._secureIcon); this._icons.add_actor(this._secureIcon);
this._signalIcon = new St.Icon({ icon_name: this._getIcon(), this._signalIcon = new St.Icon({ style_class: 'nm-dialog-icon' });
style_class: 'nm-dialog-icon' });
this._icons.add_actor(this._signalIcon); this._icons.add_actor(this._signalIcon);
}, },
@ -544,6 +547,10 @@ const NMWirelessDialogItem = new Lang.Class({
this._signalIcon.icon_name = this._getIcon(); this._signalIcon.icon_name = this._getIcon();
}, },
setActive: function(isActive) {
this._selectedIcon.opacity = isActive ? 255 : 0;
},
_getIcon: function() { _getIcon: function() {
if (this._ap.mode == NM80211Mode.ADHOC) if (this._ap.mode == NM80211Mode.ADHOC)
return 'network-workgroup-symbolic'; 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._apAddedId = device.connect('access-point-added', Lang.bind(this, this._accessPointAdded));
this._apRemovedId = device.connect('access-point-removed', Lang.bind(this, this._accessPointRemoved)); 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 // accessPointAdded will also create dialog items
let accessPoints = device.get_access_points() || [ ]; let accessPoints = device.get_access_points() || [ ];
@ -581,6 +589,7 @@ const NMWirelessDialog = new Lang.Class({
})); }));
this._selectedNetwork = null; this._selectedNetwork = null;
this._activeApChanged();
this._updateSensitivity(); this._updateSensitivity();
}, },
@ -589,15 +598,34 @@ const NMWirelessDialog = new Lang.Class({
GObject.Object.prototype.disconnect.call(this._device, this._apAddedId); GObject.Object.prototype.disconnect.call(this._device, this._apAddedId);
this._apAddedId = 0; this._apAddedId = 0;
} }
if (this._apRemovedId) { if (this._apRemovedId) {
GObject.Object.prototype.disconnect.call(this._device, this._apRemovedId); GObject.Object.prototype.disconnect.call(this._device, this._apRemovedId);
this._apRemovedId = 0; this._apRemovedId = 0;
} }
if (this._activeApChangedId) {
GObject.Object.prototype.disconnect.call(this._device, this._activeApChangedId);
this._activeApChangedId = 0;
}
this.parent(); 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() { _updateSensitivity: function() {
let connectSensitive = this._selectedNetwork != null; let connectSensitive = this._selectedNetwork != null;
this._connectButton.reactive = connectSensitive; this._connectButton.reactive = connectSensitive;
@ -891,6 +919,7 @@ const NMWirelessDialog = new Lang.Class({
_createNetworkItem: function(network) { _createNetworkItem: function(network) {
network.item = new NMWirelessDialogItem(network); network.item = new NMWirelessDialogItem(network);
network.item.setActive(network == this._selectedNetwork);
network.item.connect('selected', Lang.bind(this, function() { network.item.connect('selected', Lang.bind(this, function() {
Util.ensureActorVisibleInScrollView(this._scrollView, network.item.actor); Util.ensureActorVisibleInScrollView(this._scrollView, network.item.actor);
this._selectNetwork(network); this._selectNetwork(network);