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:
Georges Basile Stavracas Neto 2019-07-30 12:15:51 -03:00
parent 1d44bf7ce6
commit 1c172955ee
No known key found for this signature in database
GPG Key ID: 886C17EE170D1385

View File

@ -149,15 +149,8 @@ class BaseAppView {
return this._allItems;
}
hasItem(id) {
return this._items[id] !== undefined;
}
addItem(icon) {
let id = icon.id;
if (this.hasItem(id))
throw new Error(`icon with id ${id} already added to view`);
this._allItems.push(icon);
this._items[id] = icon;
}
@ -394,12 +387,13 @@ var AllView = class AllView extends BaseAppView {
let folders = this._folderSettings.get_strv('folder-children');
folders.forEach(id => {
if (this.hasItem(id))
return;
let path = this._folderSettings.path + 'folders/' + id + '/';
let icon = new FolderIcon(id, path, this);
icon.connect('name-changed', this._itemNameChanged.bind(this));
icon.connect('apps-changed', this._refilterApps.bind(this));
let icon = this._items[id];
if (!icon) {
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);
this.folderIcons.push(icon);
});
@ -1147,9 +1141,6 @@ var FolderView = class FolderView extends BaseAppView {
let excludedApps = this._folder.get_strv('excluded-apps');
let appSys = Shell.AppSystem.get_default();
let addAppId = appId => {
if (this.hasItem(appId))
return;
if (excludedApps.includes(appId))
return;
@ -1160,6 +1151,9 @@ var FolderView = class FolderView extends BaseAppView {
if (!app.get_app_info().should_show())
return;
if (apps.some(appIcon => appIcon.id == appId))
return;
let icon = new AppIcon(app);
apps.push(icon);
};