[gnome-shell] NetworkMenu: use radio items instead of switches for multiple profiles
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] NetworkMenu: use radio items instead of switches for multiple profiles
- Date: Mon, 17 Feb 2014 19:45:22 +0000 (UTC)
commit fe7ece1f5a8fb7616fec29422fee5694e1f22778
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Sat Feb 8 15:02:05 2014 +0100
NetworkMenu: use radio items instead of switches for multiple profiles
Multiple connections for the same device are mutually exclusive, so
a switch is not the appropriate UI metaphor. Use a radio item instead,
and provide a separate "Turn off" item to disconnect.
Behavior when there is only one connection is not changed, there
is a single Connect/Turn off item.
https://bugzilla.gnome.org/show_bug.cgi?id=723570
js/ui/status/network.js | 51 ++++++++++++++++++++++++++++++++++------------
1 files changed, 37 insertions(+), 14 deletions(-)
---
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index ff536d0..c8d69d9 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -104,18 +104,21 @@ const NMConnectionItem = new Lang.Class({
this._activeConnection = null;
this._activeConnectionChangedId = 0;
+ this._buildUI();
+ this._sync();
+ },
+
+ _buildUI: function() {
this.labelItem = new PopupMenu.PopupMenuItem('');
this.labelItem.connect('activate', Lang.bind(this, this._toggle));
- this.switchItem = new PopupMenu.PopupSwitchMenuItem(connection.get_id(), false);
- this.switchItem.connect('toggled', Lang.bind(this, this._toggle));
-
- this._sync();
+ this.radioItem = new PopupMenu.PopupMenuItem(this._connection.get_id(), false);
+ this.radioItem.connect('activate', Lang.bind(this, this._activate));
},
destroy: function() {
this.labelItem.destroy();
- this.switchItem.destroy();
+ this.radioItem.destroy();
},
updateForConnection: function(connection) {
@@ -126,7 +129,7 @@ const NMConnectionItem = new Lang.Class({
// Just to be safe, we set it here again
this._connection = connection;
- this.switchItem.label.text = connection.get_id();
+ this.radioItem.label.text = connection.get_id();
this._sync();
this.emit('name-changed');
},
@@ -145,8 +148,7 @@ const NMConnectionItem = new Lang.Class({
_sync: function() {
let isActive = this.isActive();
this.labelItem.label.text = isActive ? _("Turn Off") : this._section.getConnectLabel();
- this.switchItem.setToggleState(isActive);
- this.switchItem.setStatus(this._getStatus());
+ this.radioItem.setOrnament(isActive ? PopupMenu.Ornament.DOT : PopupMenu.Ornament.NONE);
this.emit('icon-changed');
},
@@ -159,8 +161,11 @@ const NMConnectionItem = new Lang.Class({
this._sync();
},
- _getStatus: function() {
- return null;
+ _activate: function() {
+ if (this._activeConnection == null)
+ this._section.activateConnection(this._connection);
+
+ this._sync();
},
_connectionStateChanged: function(ac, newstate, reason) {
@@ -195,11 +200,11 @@ const NMConnectionSection = new Lang.Class({
this._connections = [];
this._labelSection = new PopupMenu.PopupMenuSection();
- this._switchSection = new PopupMenu.PopupMenuSection();
+ this._radioSection = new PopupMenu.PopupMenuSection();
this.item = new PopupMenu.PopupSubMenuMenuItem('', true);
this.item.menu.addMenuItem(this._labelSection);
- this.item.menu.addMenuItem(this._switchSection);
+ this.item.menu.addMenuItem(this._radioSection);
this.connect('icon-changed', Lang.bind(this, this._sync));
},
@@ -211,7 +216,7 @@ const NMConnectionSection = new Lang.Class({
_sync: function() {
let nItems = this._connectionItems.size;
- this._switchSection.actor.visible = (nItems > 1);
+ this._radioSection.actor.visible = (nItems > 1);
this._labelSection.actor.visible = (nItems == 1);
this.item.status.text = this._getStatus();
@@ -291,7 +296,7 @@ const NMConnectionSection = new Lang.Class({
let pos = Util.insertSorted(this._connections, connection, Lang.bind(this,
this._connectionSortFunction));
this._labelSection.addMenuItem(item.labelItem, pos);
- this._switchSection.addMenuItem(item.switchItem, pos);
+ this._radioSection.addMenuItem(item.radioItem, pos);
this._connectionItems.set(connection.get_uuid(), item);
this._sync();
},
@@ -319,6 +324,7 @@ const NMConnectionDevice = new Lang.Class({
this._settings = settings;
this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect));
+ this._deactivateItem = this._radioSection.addAction(_("Turn Off"), Lang.bind(this,
this.deactivateConnection));
this._stateChangedId = this._device.connect('state-changed', Lang.bind(this,
this._deviceStateChanged));
this._activeConnectionChangedId = this._device.connect('notify::active-connection', Lang.bind(this,
this._activeConnectionChanged));
@@ -405,6 +411,7 @@ const NMConnectionDevice = new Lang.Class({
_sync: function() {
let nItems = this._connectionItems.size;
this._autoConnectItem.actor.visible = (nItems == 0);
+ this._deactivateItem.actor.visible = this._device.state > NetworkManager.DeviceState.DISCONNECTED;
this.parent();
},
@@ -1325,6 +1332,22 @@ const NMVPNConnectionItem = new Lang.Class({
return this._activeConnection.vpn_state != NetworkManager.VPNConnectionState.DISCONNECTED;
},
+ _buildUI: function() {
+ this.labelItem = new PopupMenu.PopupMenuItem('');
+ this.labelItem.connect('activate', Lang.bind(this, this._toggle));
+
+ this.radioItem = new PopupMenu.PopupSwitchMenuItem(this._connection.get_id(), false);
+ this.radioItem.connect('toggled', Lang.bind(this, this._toggle));
+ },
+
+ _sync: function() {
+ let isActive = this.isActive();
+ this.labelItem.label.text = isActive ? _("Turn Off") : this._section.getConnectLabel();
+ this.radioItem.setToggleState(isActive);
+ this.radioItem.setStatus(this._getStatus());
+ this.emit('icon-changed');
+ },
+
_getStatus: function() {
if (this._activeConnection == null)
return null;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]