NetworkMenu/NMConnectionDevice: grab the connection before using it

If the active connection for the device is not the primary or
activating globally, it won't have the _connection and _primaryDevice
expando properties, so grab them from the settings object.

https://bugzilla.gnome.org/show_bug.cgi?id=709043
This commit is contained in:
Giovanni Campagna 2013-10-03 14:20:31 +02:00
parent 843f076225
commit e898e29910

View File

@ -73,6 +73,16 @@ function ssidToLabel(ssid) {
return label; return label;
} }
function ensureActiveConnectionProps(active, settings) {
if (!active._connection) {
active._connection = settings.get_connection_by_path(active.connection);
// This list is guaranteed to have only one device in it.
let device = active.get_devices()[0]._delegate;
active._primaryDevice = device;
}
}
const NMConnectionItem = new Lang.Class({ const NMConnectionItem = new Lang.Class({
Name: 'NMConnectionItem', Name: 'NMConnectionItem',
@ -267,9 +277,10 @@ const NMConnectionDevice = new Lang.Class({
Extends: NMConnectionSection, Extends: NMConnectionSection,
Abstract: true, Abstract: true,
_init: function(client, device) { _init: function(client, device, settings) {
this.parent(client); this.parent(client);
this._device = device; this._device = device;
this._settings = settings;
this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect)); this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect));
this.item.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop'); this.item.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
@ -300,6 +311,7 @@ const NMConnectionDevice = new Lang.Class({
this._activeConnection = this._device.active_connection; this._activeConnection = this._device.active_connection;
if (this._activeConnection) { if (this._activeConnection) {
ensureActiveConnectionProps(this._activeConnection, this._settings);
let item = this._connectionItems.get(this._activeConnection._connection.get_uuid()); let item = this._connectionItems.get(this._activeConnection._connection.get_uuid());
item.setActiveConnection(this._activeConnection); item.setActiveConnection(this._activeConnection);
} }
@ -398,8 +410,8 @@ const NMDeviceModem = new Lang.Class({
Extends: NMConnectionDevice, Extends: NMConnectionDevice,
category: NMConnectionCategory.WWAN, category: NMConnectionCategory.WWAN,
_init: function(client, device) { _init: function(client, device, settings) {
this.parent(client, device); this.parent(client, device, settings);
this._mobileDevice = null; this._mobileDevice = null;
let capabilities = device.current_capabilities; let capabilities = device.current_capabilities;
@ -1425,28 +1437,18 @@ const NMApplet = new Lang.Class({
devices.splice(pos, 1); devices.splice(pos, 1);
}, },
_ensureActiveConnectionProps: function(a) {
if (!a._connection) {
a._connection = this._settings.get_connection_by_path(a.connection);
// This list is guaranteed to have only one device in it.
let device = a.get_devices()[0]._delegate;
a._primaryDevice = device;
}
},
_getMainConnection: function() { _getMainConnection: function() {
let connection; let connection;
connection = this._client.get_primary_connection(); connection = this._client.get_primary_connection();
if (connection) { if (connection) {
this._ensureActiveConnectionProps(connection); ensureActiveConnectionProps(connection, this._settings);
return connection; return connection;
} }
connection = this._client.get_activating_connection(); connection = this._client.get_activating_connection();
if (connection) { if (connection) {
this._ensureActiveConnectionProps(connection); ensureActiveConnectionProps(connection, this._settings);
return connection; return connection;
} }