allView, frequentView: Only create icons when necessary
The views (AllView and FrequentView) build a list of all applications they contain. BaseView then diffs between what's currently added, and what needs to be added, and removed. This approach has a problem though: creating an AppIcon or a FolderIcon connects to various signals, and we confuse the garbage collector. When building the list of applications, instead of always creating new icons, try to use already existing icons first. Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1610 Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1694
This commit is contained in:
parent
a85cddada0
commit
d08cd1f523
@ -463,10 +463,15 @@ var AllView = class AllView extends BaseAppView {
|
||||
let favoritesWritable = global.settings.is_writable('favorite-apps');
|
||||
|
||||
apps.forEach(appId => {
|
||||
let app = appSys.lookup_app(appId);
|
||||
let icon = this._items[appId];
|
||||
if (!icon) {
|
||||
let app = appSys.lookup_app(appId);
|
||||
|
||||
icon = new AppIcon(app, {
|
||||
isDraggable: favoritesWritable,
|
||||
});
|
||||
}
|
||||
|
||||
let icon = new AppIcon(app,
|
||||
{ isDraggable: favoritesWritable });
|
||||
newApps.push(icon);
|
||||
});
|
||||
|
||||
@ -918,8 +923,12 @@ var FrequentView = class FrequentView extends BaseAppView {
|
||||
for (let i = 0; i < mostUsed.length; i++) {
|
||||
if (!mostUsed[i].get_app_info().should_show())
|
||||
continue;
|
||||
let appIcon = new AppIcon(mostUsed[i],
|
||||
{ isDraggable: favoritesWritable });
|
||||
let appIcon = this._items[mostUsed[i].get_id()];
|
||||
if (!appIcon) {
|
||||
appIcon = new AppIcon(mostUsed[i], {
|
||||
isDraggable: favoritesWritable,
|
||||
});
|
||||
}
|
||||
apps.push(appIcon);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user