allView, folderView: Only add icons once
FolderView and AllView currently check if the item is present in the BaseAppView._items map, in order to avoid adding the same icon multiple times. Now that BaseAppView._loadApps() has a different role -- it returns a list with all app icons, and BaseAppView diffs with the current list of app icons -- checking the BaseAppView._items map is wrong. Make sure there are no duplicated items in the temporary array returned by all _loadApps() implementations. Remove the now unused BaseAppView.hasItem() method. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/645
This commit is contained in:
parent
1d44bf7ce6
commit
1c172955ee
@ -149,15 +149,8 @@ class BaseAppView {
|
|||||||
return this._allItems;
|
return this._allItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
hasItem(id) {
|
|
||||||
return this._items[id] !== undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
addItem(icon) {
|
addItem(icon) {
|
||||||
let id = icon.id;
|
let id = icon.id;
|
||||||
if (this.hasItem(id))
|
|
||||||
throw new Error(`icon with id ${id} already added to view`);
|
|
||||||
|
|
||||||
this._allItems.push(icon);
|
this._allItems.push(icon);
|
||||||
this._items[id] = icon;
|
this._items[id] = icon;
|
||||||
}
|
}
|
||||||
@ -394,12 +387,13 @@ var AllView = class AllView extends BaseAppView {
|
|||||||
|
|
||||||
let folders = this._folderSettings.get_strv('folder-children');
|
let folders = this._folderSettings.get_strv('folder-children');
|
||||||
folders.forEach(id => {
|
folders.forEach(id => {
|
||||||
if (this.hasItem(id))
|
|
||||||
return;
|
|
||||||
let path = this._folderSettings.path + 'folders/' + id + '/';
|
let path = this._folderSettings.path + 'folders/' + id + '/';
|
||||||
let icon = new FolderIcon(id, path, this);
|
let icon = this._items[id];
|
||||||
icon.connect('name-changed', this._itemNameChanged.bind(this));
|
if (!icon) {
|
||||||
icon.connect('apps-changed', this._refilterApps.bind(this));
|
icon = new FolderIcon(id, path, this);
|
||||||
|
icon.connect('name-changed', this._itemNameChanged.bind(this));
|
||||||
|
icon.connect('apps-changed', this._refilterApps.bind(this));
|
||||||
|
}
|
||||||
newApps.push(icon);
|
newApps.push(icon);
|
||||||
this.folderIcons.push(icon);
|
this.folderIcons.push(icon);
|
||||||
});
|
});
|
||||||
@ -1147,9 +1141,6 @@ var FolderView = class FolderView extends BaseAppView {
|
|||||||
let excludedApps = this._folder.get_strv('excluded-apps');
|
let excludedApps = this._folder.get_strv('excluded-apps');
|
||||||
let appSys = Shell.AppSystem.get_default();
|
let appSys = Shell.AppSystem.get_default();
|
||||||
let addAppId = appId => {
|
let addAppId = appId => {
|
||||||
if (this.hasItem(appId))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (excludedApps.includes(appId))
|
if (excludedApps.includes(appId))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1160,6 +1151,9 @@ var FolderView = class FolderView extends BaseAppView {
|
|||||||
if (!app.get_app_info().should_show())
|
if (!app.get_app_info().should_show())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (apps.some(appIcon => appIcon.id == appId))
|
||||||
|
return;
|
||||||
|
|
||||||
let icon = new AppIcon(app);
|
let icon = new AppIcon(app);
|
||||||
apps.push(icon);
|
apps.push(icon);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user