network: Move indicator icon selection to individual devices
This cuts down on the number of cross-connected "public" API between the devices, hopefully allowing us to reduce it further. https://bugzilla.gnome.org/show_bug.cgi?id=701954
This commit is contained in:
parent
35a7a3c1ac
commit
e6c239d0f3
@ -579,6 +579,13 @@ const NMDeviceWired = new Lang.Class({
|
|||||||
|
|
||||||
this.parent(client, device, connections);
|
this.parent(client, device, connections);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getIndicatorIcon: function() {
|
||||||
|
if (this.device.active_connection.state == NetworkManager.ActiveConnectionState.ACTIVATING)
|
||||||
|
return 'network-wired-acquiring-symbolic';
|
||||||
|
else
|
||||||
|
return 'network-wired-symbolic';
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const NMDeviceModem = new Lang.Class({
|
const NMDeviceModem = new Lang.Class({
|
||||||
@ -618,6 +625,7 @@ const NMDeviceModem = new Lang.Class({
|
|||||||
if (this._operatorItem) {
|
if (this._operatorItem) {
|
||||||
this._operatorItem.setIcon(this._getSignalIcon());
|
this._operatorItem.setIcon(this._getSignalIcon());
|
||||||
}
|
}
|
||||||
|
this.emit('icon-changed');
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -688,6 +696,18 @@ const NMDeviceModem = new Lang.Class({
|
|||||||
'connect-3g', this.device.get_path()]);
|
'connect-3g', this.device.get_path()]);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getIndicatorIcon: function() {
|
||||||
|
if (this.device.active_connection.state == NetworkManager.ActiveConnectionState.ACTIVATING)
|
||||||
|
return 'network-cellular-acquiring-symbolic';
|
||||||
|
|
||||||
|
if (!this.mobileDevice) {
|
||||||
|
// this can happen for bluetooth in PAN mode
|
||||||
|
return 'network-cellular-connected-symbolic';
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._getSignalIcon();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const NMDeviceBluetooth = new Lang.Class({
|
const NMDeviceBluetooth = new Lang.Class({
|
||||||
@ -710,7 +730,14 @@ const NMDeviceBluetooth = new Lang.Class({
|
|||||||
// that this phone supports PAN
|
// that this phone supports PAN
|
||||||
|
|
||||||
return this.parent();
|
return this.parent();
|
||||||
}
|
},
|
||||||
|
|
||||||
|
getIndicatorIcon: function() {
|
||||||
|
if (this.device.active_connection.state == NetworkManager.ActiveConnectionState.ACTIVATING)
|
||||||
|
return 'network-wired-acquiring-symbolic';
|
||||||
|
else
|
||||||
|
return 'network-wired-symbolic';
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const NMDeviceWireless = new Lang.Class({
|
const NMDeviceWireless = new Lang.Class({
|
||||||
@ -1194,6 +1221,45 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
this._createNetworkItem(network, j + activeOffset);
|
this._createNetworkItem(network, j + activeOffset);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_updateAccessPoint: function() {
|
||||||
|
let ap = this.device.active_access_point;
|
||||||
|
if (this._activeAccessPoint == ap)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (this._activeAccessPoint) {
|
||||||
|
this._activeAccessPoint.disconnect(this._strengthChangedId);
|
||||||
|
this._strengthChangedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._activeAccessPoint = ap;
|
||||||
|
|
||||||
|
if (this._activeAccessPoint) {
|
||||||
|
this._strengthChangedId = this._activeAccessPoint.connect('notify::strength',
|
||||||
|
Lang.bind(this, this._strengthChanged));
|
||||||
|
}
|
||||||
|
|
||||||
|
this._syncStatusLabel();
|
||||||
|
},
|
||||||
|
|
||||||
|
_strengthChanged: function() {
|
||||||
|
this.emit('icon-changed');
|
||||||
|
},
|
||||||
|
|
||||||
|
getIndicatorIcon: function() {
|
||||||
|
if (this.device.active_connection.state == NetworkManager.ActiveConnectionState.ACTIVATING)
|
||||||
|
return 'network-wireless-acquiring-symbolic';
|
||||||
|
|
||||||
|
let ap = this.device.active_access_point;
|
||||||
|
if (!ap) {
|
||||||
|
if (this.device.mode != NM80211Mode.ADHOC)
|
||||||
|
log('An active wireless connection, in infrastructure mode, involves no access point?');
|
||||||
|
|
||||||
|
return 'network-wireless-connected-symbolic';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'network-wireless-signal-' + signalToIcon(ap.strength) + '-symbolic';
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const NMDeviceVirtual = new Lang.Class({
|
const NMDeviceVirtual = new Lang.Class({
|
||||||
@ -1243,7 +1309,14 @@ const NMDeviceVirtual = new Lang.Class({
|
|||||||
|
|
||||||
hasConnections: function() {
|
hasConnections: function() {
|
||||||
return this._connections.length != 0;
|
return this._connections.length != 0;
|
||||||
}
|
},
|
||||||
|
|
||||||
|
getIndicatorIcon: function() {
|
||||||
|
if (this.device.active_connection.state == NetworkManager.ActiveConnectionState.ACTIVATING)
|
||||||
|
return 'network-wired-acquiring-symbolic';
|
||||||
|
else
|
||||||
|
return 'network-wired-connected-symbolic';
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const NMVPNSection = new Lang.Class({
|
const NMVPNSection = new Lang.Class({
|
||||||
@ -1385,6 +1458,29 @@ const NMVPNSection = new Lang.Class({
|
|||||||
} else {
|
} else {
|
||||||
log('Could not find connection for vpn-state-changed handler');
|
log('Could not find connection for vpn-state-changed handler');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.emit('icon-changed');
|
||||||
|
},
|
||||||
|
|
||||||
|
_getIconForConnection: function(vpnConnection) {
|
||||||
|
if (vpnConnection) {
|
||||||
|
if (vpnConnection.state == NetworkManager.ActiveConnectionState.ACTIVATING)
|
||||||
|
return 'network-vpn-acquiring-symbolic';
|
||||||
|
else
|
||||||
|
return 'network-vpn-symbolic';
|
||||||
|
} else {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
getIndicatorIcon: function() {
|
||||||
|
for (let i = 0; i < this._connections.length; i++) {
|
||||||
|
let obj = this._connections[i];
|
||||||
|
let icon = this._getIconForConnection(obj.active);
|
||||||
|
if (icon)
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1462,11 +1558,7 @@ const NMApplet = new Lang.Class({
|
|||||||
this._connections = [ ];
|
this._connections = [ ];
|
||||||
|
|
||||||
this._mainConnection = null;
|
this._mainConnection = null;
|
||||||
this._vpnConnection = null;
|
this._mainConnectionIconChangedId = 0;
|
||||||
this._activeAccessPointUpdateId = 0;
|
|
||||||
this._activeAccessPoint = null;
|
|
||||||
this._mobileUpdateId = 0;
|
|
||||||
this._mobileUpdateDevice = null;
|
|
||||||
|
|
||||||
this._nmDevices = [];
|
this._nmDevices = [];
|
||||||
this._devices = { };
|
this._devices = { };
|
||||||
@ -1510,6 +1602,7 @@ const NMApplet = new Lang.Class({
|
|||||||
|
|
||||||
this._vpnSection = new NMVPNSection(this._client);
|
this._vpnSection = new NMVPNSection(this._client);
|
||||||
this._vpnSection.connect('activation-failed', Lang.bind(this, this._onActivationFailed));
|
this._vpnSection.connect('activation-failed', Lang.bind(this, this._onActivationFailed));
|
||||||
|
this._vpnSection.connect('icon-changed', Lang.bind(this, this._updateIcon));
|
||||||
this.menu.addMenuItem(this._vpnSection.section);
|
this.menu.addMenuItem(this._vpnSection.section);
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
this.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
|
this.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
|
||||||
@ -1752,14 +1845,17 @@ const NMApplet = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._mainConnectionIconChangedId > 0) {
|
||||||
|
this._mainConnection._primaryDevice.disconnect(this._mainConnectionIconChangedId);
|
||||||
|
this._mainConnectionIconChangedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
this._activeConnections = newActiveConnections;
|
this._activeConnections = newActiveConnections;
|
||||||
this._mainConnection = null;
|
this._mainConnection = null;
|
||||||
this._vpnConnection = null;
|
|
||||||
|
|
||||||
let activating = null;
|
let activating = null;
|
||||||
let default_ip4 = null;
|
let default_ip4 = null;
|
||||||
let default_ip6 = null;
|
let default_ip6 = null;
|
||||||
let active_vpn = null;
|
|
||||||
let active_any = null;
|
let active_any = null;
|
||||||
for (let i = 0; i < this._activeConnections.length; i++) {
|
for (let i = 0; i < this._activeConnections.length; i++) {
|
||||||
let a = this._activeConnections[i];
|
let a = this._activeConnections[i];
|
||||||
@ -1796,11 +1892,6 @@ const NMApplet = new Lang.Class({
|
|||||||
else if (a.state == NetworkManager.ActiveConnectionState.ACTIVATED)
|
else if (a.state == NetworkManager.ActiveConnectionState.ACTIVATED)
|
||||||
active_any = a;
|
active_any = a;
|
||||||
|
|
||||||
if (a._type == 'vpn' &&
|
|
||||||
(a.state == NetworkManager.ActiveConnectionState.ACTIVATING ||
|
|
||||||
a.state == NetworkManager.ActiveConnectionState.ACTIVATED))
|
|
||||||
active_vpn = a;
|
|
||||||
|
|
||||||
if (!a._primaryDevice) {
|
if (!a._primaryDevice) {
|
||||||
if (a._type != NetworkManager.SETTING_VPN_SETTING_NAME) {
|
if (a._type != NetworkManager.SETTING_VPN_SETTING_NAME) {
|
||||||
// This list is guaranteed to have one device in it.
|
// This list is guaranteed to have one device in it.
|
||||||
@ -1819,7 +1910,11 @@ const NMApplet = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._mainConnection = activating || default_ip4 || default_ip6 || active_any || null;
|
this._mainConnection = activating || default_ip4 || default_ip6 || active_any || null;
|
||||||
this._vpnConnection = active_vpn;
|
|
||||||
|
if (this._mainConnection) {
|
||||||
|
let dev = this._mainConnection._primaryDevice;
|
||||||
|
this._mainConnectionIconChangedId = dev.connect('icon-changed', Lang.bind(this, this._updateIcon));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_notifyActivated: function(activeConnection) {
|
_notifyActivated: function(activeConnection) {
|
||||||
@ -1984,118 +2079,20 @@ const NMApplet = new Lang.Class({
|
|||||||
|
|
||||||
_updateIcon: function() {
|
_updateIcon: function() {
|
||||||
this._syncActiveConnections();
|
this._syncActiveConnections();
|
||||||
let mc = this._mainConnection;
|
|
||||||
let hasApIcon = false;
|
let hasApIcon = false;
|
||||||
let hasMobileIcon = false;
|
let hasMobileIcon = false;
|
||||||
|
|
||||||
if (!mc) {
|
if (!this._mainConnection) {
|
||||||
this.setIcon('network-offline-symbolic');
|
this.setIcon('network-offline-symbolic');
|
||||||
} else if (mc.state == NetworkManager.ActiveConnectionState.ACTIVATING) {
|
|
||||||
switch (mc._section) {
|
|
||||||
case NMConnectionCategory.WWAN:
|
|
||||||
this.setIcon('network-cellular-acquiring-symbolic');
|
|
||||||
break;
|
|
||||||
case NMConnectionCategory.WIRELESS:
|
|
||||||
this.setIcon('network-wireless-acquiring-symbolic');
|
|
||||||
break;
|
|
||||||
case NMConnectionCategory.WIRED:
|
|
||||||
case NMConnectionCategory.VIRTUAL:
|
|
||||||
this.setIcon('network-wired-acquiring-symbolic');
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// fallback to a generic connected icon
|
|
||||||
// (it could be a private connection of some other user)
|
|
||||||
this.setIcon('network-wired-acquiring-symbolic');
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
let dev;
|
let dev = this._mainConnection._primaryDevice;
|
||||||
switch (mc._section) {
|
if (!dev) {
|
||||||
case NMConnectionCategory.WIRELESS:
|
log('Active connection with no primary device?');
|
||||||
dev = mc._primaryDevice;
|
return;
|
||||||
if (dev) {
|
|
||||||
let ap = dev.device.active_access_point;
|
|
||||||
let mode = dev.device.mode;
|
|
||||||
if (!ap) {
|
|
||||||
if (mode != NM80211Mode.ADHOC) {
|
|
||||||
log('An active wireless connection, in infrastructure mode, involves no access point?');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
this.setIcon('network-wireless-connected-symbolic');
|
|
||||||
} else {
|
|
||||||
if (this._activeAccessPoint != ap) {
|
|
||||||
if (this._accessPointUpdateId)
|
|
||||||
this._activeAccessPoint.disconnect(this._accessPointUpdateId);
|
|
||||||
this._activeAccessPoint = ap;
|
|
||||||
this._activeAccessPointUpdateId = ap.connect('notify::strength', Lang.bind(this, function() {
|
|
||||||
this.setIcon('network-wireless-signal-' + signalToIcon(ap.strength) + '-symbolic');
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
this.setIcon('network-wireless-signal-' + signalToIcon(ap.strength) + '-symbolic');
|
|
||||||
hasApIcon = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
log('Active connection with no primary device?');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case NMConnectionCategory.WIRED:
|
|
||||||
case NMConnectionCategory.VIRTUAL:
|
|
||||||
this.setIcon('network-wired-symbolic');
|
|
||||||
break;
|
|
||||||
case NMConnectionCategory.WWAN:
|
|
||||||
dev = mc._primaryDevice;
|
|
||||||
if (!dev) {
|
|
||||||
log('Active connection with no primary device?');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!dev.mobileDevice) {
|
|
||||||
// this can happen for bluetooth in PAN mode
|
|
||||||
this.setIcon('network-cellular-connected-symbolic');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dev.mobileDevice != this._mobileUpdateDevice) {
|
|
||||||
if (this._mobileUpdateId)
|
|
||||||
this._mobileUpdateDevice.disconnect(this._mobileUpdateId);
|
|
||||||
this._mobileUpdateDevice = dev.mobileDevice;
|
|
||||||
this._mobileUpdateId = dev.mobileDevice.connect('notify::signal-quality', Lang.bind(this, function() {
|
|
||||||
this.setIcon('network-cellular-signal-' + signalToIcon(dev.mobileDevice.signal_quality) + '-symbolic');
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
this.setIcon('network-cellular-signal-' + signalToIcon(dev.mobileDevice.signal_quality) + '-symbolic');
|
|
||||||
hasMobileIcon = true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// fallback to a generic connected icon
|
|
||||||
// (it could be a private connection of some other user)
|
|
||||||
this.setIcon('network-wired-symbolic');
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
this.setIcon(dev.getIndicatorIcon());
|
||||||
}
|
}
|
||||||
|
|
||||||
// update VPN indicator
|
this._vpnIcon.icon_name = this._vpnSection.getIndicatorIcon();
|
||||||
if (this._vpnConnection) {
|
|
||||||
if (this._vpnConnection.state == NetworkManager.ActiveConnectionState.ACTIVATING)
|
|
||||||
this._vpnIcon.icon_name = 'network-vpn-acquiring-symbolic';
|
|
||||||
else
|
|
||||||
this._vpnIcon.icon_name = 'network-vpn-symbolic';
|
|
||||||
|
|
||||||
this._vpnIcon.show();
|
|
||||||
} else {
|
|
||||||
this._vpnIcon.hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
// cleanup stale signal connections
|
|
||||||
|
|
||||||
if (!hasApIcon && this._activeAccessPointUpdateId) {
|
|
||||||
this._activeAccessPoint.disconnect(this._activeAccessPointUpdateId);
|
|
||||||
this._activeAccessPoint = null;
|
|
||||||
this._activeAccessPointUpdateId = 0;
|
|
||||||
}
|
|
||||||
if (!hasMobileIcon && this._mobileUpdateId) {
|
|
||||||
this._mobileUpdateDevice.disconnect(this._mobileUpdateId);
|
|
||||||
this._mobileUpdateDevice = null;
|
|
||||||
this._mobileUpdateId = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user