From 9da49606f7ded69e901d5922de7af7ceb31cee60 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 30 Jul 2019 12:15:51 -0300 Subject: [PATCH] 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._loadGrid() 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 _loadGrid() implementations. Remove the now unused BaseAppView.hasItem() method. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/645 --- js/ui/appDisplay.js | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index dc7579264..3b9e68fcd 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -148,15 +148,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; } @@ -402,12 +395,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); }); @@ -1160,9 +1154,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(id)) - return; - if (excludedApps.includes(appId)) return; @@ -1173,6 +1164,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); };