status/network: Show WireGuard connections in VPN list

With this change, WireGuard connections, and an on/off toggle button
or a status description for each are shown in the VPN section of the
Gnome Shell network status UI.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1995>
This commit is contained in:
Christian Glombek 2021-10-03 19:49:27 +02:00
parent a863c9ee59
commit b5ace213a1

View File

@ -1435,6 +1435,70 @@ var NMDeviceWireless = class {
};
Signals.addSignalMethods(NMDeviceWireless.prototype);
var NMWireguardItem = class extends NMConnectionItem {
_buildUI() {
this.labelItem = new PopupMenu.PopupMenuItem('');
this.labelItem.connect('activate', this._activate.bind(this));
this.radioItem = new PopupMenu.PopupSwitchMenuItem(this._connection.get_id(), false);
this.radioItem.connect('toggled', this._toggle.bind(this));
}
_sync() {
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() {
if (this._activeConnection === null)
return null;
switch (this._activeConnection.state) {
case NM.ActiveConnectionState.UNKNOWN:
return _('unknown');
case NM.ActiveConnectionState.ACTIVATING:
return _('activating…');
case NM.ActiveConnectionState.ACTIVATED:
return null;
case NM.ActiveConnectionState.DEACTIVATING:
return _('deactivating…');
case NM.ActiveConnectionState.DEACTIVATED:
return _('deactivated');
default:
return 'invalid';
}
}
_connectionStateChanged(ac, newstate, reason) {
if (newstate === NM.ActiveConnectionState.DEACTIVATED &&
reason !== NM.ActiveConnectionStateReason.NO_SECRETS) {
// FIXME: if we ever want to show something based on reason,
// we need to convert from NM.ActiveConnectionStateReason
// to NM.DeviceStateReason
this.emit('activation-failed', reason);
}
this.emit('icon-changed');
super._connectionStateChanged();
}
getIndicatorIcon() {
if (this._activeConnection) {
if (this._activeConnection.state === NM.ActiveConnectionState.UNKNOWN)
return '';
else if (this._activeConnection.state < NM.ActiveConnectionState.ACTIVATED)
return 'network-vpn-acquiring-symbolic';
else
return 'network-vpn-symbolic';
} else {
return '';
}
}
};
var NMVpnConnectionItem = class extends NMConnectionItem {
isActive() {
if (this._activeConnection == null)
@ -1577,6 +1641,9 @@ var NMVpnSection = class extends NMConnectionSection {
}
_makeConnectionItem(connection) {
if (connection.get_connection_type() === 'wireguard')
return new NMWireguardItem(this, connection);
return new NMVpnConnectionItem(this, connection);
}
@ -1676,6 +1743,7 @@ class Indicator extends PanelMenu.SystemIndicator {
this._ctypes[NM.SETTING_CDMA_SETTING_NAME] = NMConnectionCategory.WWAN;
this._ctypes[NM.SETTING_GSM_SETTING_NAME] = NMConnectionCategory.WWAN;
this._ctypes[NM.SETTING_VPN_SETTING_NAME] = NMConnectionCategory.VPN;
this._ctypes[NM.SETTING_WIREGUARD_SETTING_NAME] = NMConnectionCategory.VPN;
this._getClient();
}
@ -1913,7 +1981,7 @@ class Indicator extends PanelMenu.SystemIndicator {
_syncVpnConnections() {
let activeConnections = this._client.get_active_connections() || [];
let vpnConnections = activeConnections.filter(
a => a instanceof NM.VpnConnection);
a => a instanceof NM.VpnConnection || a.get_connection_type() === 'wireguard');
vpnConnections.forEach(a => {
ensureActiveConnectionProps(a);
});