network: Don't assume the active connection has been processed first

`NMConnectionDevice._sync()` is responsible for setting up the active
connection that we'll end up displaying. It expects the active
connection to already be in a map `_connectionItems`. If it isn't in
there, we get a null dereference and the indicator can get into a weird
state where it doesn't display devices / connections properly.

Let's change this expectation. If there is an active connection,
`_deviceAdded()` will eventually get to it and call `_sync()` to set up
the active connection state. We make `_sync()` tolerate there being no
active connection when it's called.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/140
This commit is contained in:
Iain Lane 2018-08-16 11:59:36 +01:00 committed by Florian Müllner
parent 72f5802be9
commit 5d61e2563d

View File

@ -420,12 +420,14 @@ var NMConnectionDevice = new Lang.Class({
this._deactivateItem.actor.visible = this._device.state > NM.DeviceState.DISCONNECTED; this._deactivateItem.actor.visible = this._device.state > NM.DeviceState.DISCONNECTED;
if (this._activeConnection == null) { if (this._activeConnection == null) {
this._activeConnection = this._device.active_connection; let activeConnection = this._device.active_connection;
if (activeConnection && activeConnection.connection) {
if (this._activeConnection) { let item = this._connectionItems.get(activeConnection.connection.get_uuid());
ensureActiveConnectionProps(this._activeConnection, this._client); if (item) {
let item = this._connectionItems.get(this._activeConnection.connection.get_uuid()); this._activeConnection = activeConnection;
item.setActiveConnection(this._activeConnection); ensureActiveConnectionProps(this._activeConnection, this._client);
item.setActiveConnection(this._activeConnection);
}
} }
} }