extensionPrefs: Reflect whether extension is requested in active state

To do this, simply use the new isRequested property to properly reflect
the underlying settings key rather than the actual loaded state of the
extension.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/695
This commit is contained in:
Benjamin Berg 2019-08-01 16:48:56 +02:00
parent afefc88e02
commit 5796a5d193

View File

@ -605,8 +605,11 @@ class ExtensionRow extends Gtk.ListBoxRow {
this._extension = ExtensionUtils.deserializeExtension(newState); this._extension = ExtensionUtils.deserializeExtension(newState);
let state = (this._extension.state == ExtensionState.ENABLED); let state = (this._extension.state == ExtensionState.ENABLED);
this._switch.freeze_notify();
this._switch.state = state; this._switch.state = state;
this._switch.active = this._extension.isRequested;
this._switch.sensitive = this._canToggle(); this._switch.sensitive = this._canToggle();
this._switch.thaw_notify();
}); });
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
@ -675,7 +678,6 @@ class ExtensionRow extends Gtk.ListBoxRow {
this._switch = new Gtk.Switch({ this._switch = new Gtk.Switch({
valign: Gtk.Align.CENTER, valign: Gtk.Align.CENTER,
sensitive: this._canToggle(), sensitive: this._canToggle(),
state: this._extension.state === ExtensionState.ENABLED
}); });
this._switch.connect('notify::active', () => { this._switch.connect('notify::active', () => {
if (this._switch.active) if (this._switch.active)
@ -684,6 +686,11 @@ class ExtensionRow extends Gtk.ListBoxRow {
this._app.shellProxy.DisableExtensionRemote(this.uuid); this._app.shellProxy.DisableExtensionRemote(this.uuid);
}); });
this._switch.connect('state-set', () => true); this._switch.connect('state-set', () => true);
this._switch.freeze_notify();
this._switch.state = this._extension.state === ExtensionState.ENABLED;
this._switch.active = this._extension.isRequested;
this._switch.thaw_notify();
hbox.add(this._switch); hbox.add(this._switch);
} }