extensionPrefs: Sync list visibility on status changes

We only show the list of system- and user extensions if corresponding
extensions are installed, however we only update the visibility
after loading the initial list of extensions.

As it's possible for the first user extension to be installed while the
app is open or the last one to be removed, we should also update the
list visibility after extension state changes.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1088
This commit is contained in:
Florian Müllner 2020-03-12 22:55:43 +01:00 committed by Florian Müllner
parent eb3c857f23
commit 7d94bfa642

View File

@ -423,11 +423,13 @@ var ExtensionsWindow = GObject.registerClass({
if (row) {
if (extension.state === ExtensionState.UNINSTALLED)
row.destroy();
return; // we only deal with new and deleted extensions here
}
} else {
this._addExtensionRow(extension);
}
this._syncListVisibility();
}
_scanExtensions() {
this._shellProxy.ListExtensionsRemote(([extensionsMap], e) => {
if (e) {
@ -471,6 +473,16 @@ var ExtensionsWindow = GObject.registerClass({
});
}
_syncListVisibility() {
this._userList.visible = this._userList.get_children().length > 0;
this._systemList.visible = this._systemList.get_children().length > 0;
if (this._userList.visible || this._systemList.visible)
this._mainStack.visible_child_name = 'main';
else
this._mainStack.visible_child_name = 'placeholder';
}
_checkUpdates() {
let nUpdates = this._userList.get_children().filter(c => c.hasUpdate).length;
@ -482,14 +494,7 @@ var ExtensionsWindow = GObject.registerClass({
}
_extensionsLoaded() {
this._userList.visible = this._userList.get_children().length > 0;
this._systemList.visible = this._systemList.get_children().length > 0;
if (this._userList.visible || this._systemList.visible)
this._mainStack.visible_child_name = 'main';
else
this._mainStack.visible_child_name = 'placeholder';
this._syncListVisibility();
this._checkUpdates();
if (this._startupUuid)