From 2566f938e6f270d7c8806859e21addb46fc5d5c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Fri, 24 Jun 2022 16:02:54 +0200 Subject: [PATCH] appDisplay: Move findBestPageToAppend() behavior to IconGrid This behavior makes more sense to have in the iconGrid itself: When a page is filled up with items, the new item should never go to the start of the next page, but always to next empty slot. Part-of: --- js/ui/appDisplay.js | 21 ++++++++++++--------- js/ui/iconGrid.js | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 7fbb83b32..91c428a07 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -1074,11 +1074,6 @@ var BaseAppView = GObject.registerClass({ } _addItem(item, page, position) { - // Append icons to the first page with empty slot, starting from - // the second page - if (this._grid.nPages > 1 && page === -1 && position === -1) - page = this._findBestPageToAppend(); - this._items.set(item.id, item); this._grid.addItem(item, page, position); @@ -1125,10 +1120,18 @@ var BaseAppView = GObject.registerClass({ // Add new app icons, or move existing ones newApps.forEach(icon => { const [page, position] = this._getItemPosition(icon); - if (addedApps.includes(icon)) - this._addItem(icon, page, position); - else if (page !== -1 && position !== -1) + if (addedApps.includes(icon)) { + // If there's two pages, newly installed apps should not appear + // on page 0 + if (page === -1 && position === -1 && this._grid.nPages > 1) + this._addItem(icon, 1, -1); + else + this._addItem(icon, page, position); + } else if (page !== -1 && position !== -1) { this._moveItem(icon, page, position); + } else { + // App is part of a folder + } }); this.emit('view-loaded'); @@ -1484,7 +1487,7 @@ class AppDisplay extends BaseAppView { let [page, position] = this._grid.getItemPosition(item); if (page === -1) - page = this._findBestPageToAppend(this._grid.currentPage); + page = this._grid.currentPage; return [page, position]; } diff --git a/js/ui/iconGrid.js b/js/ui/iconGrid.js index 7030ed87c..523237782 100644 --- a/js/ui/iconGrid.js +++ b/js/ui/iconGrid.js @@ -798,6 +798,19 @@ var IconGridLayout = GObject.registerClass({ this._shouldEaseItems = false; } + _findBestPageToAppend(startPage) { + const itemsPerPage = this.columnsPerPage * this.rowsPerPage; + + for (let i = startPage; i < this._pages.length; i++) { + const visibleItems = this._pages[i].visibleChildren; + + if (visibleItems.length < itemsPerPage) + return i; + } + + return this._pages.length; + } + /** * addItem: * @param {Clutter.Actor} item: item to append to the grid @@ -822,6 +835,9 @@ var IconGridLayout = GObject.registerClass({ if (!this._container) return; + if (page !== -1 && index === -1) + page = this._findBestPageToAppend(page); + this._shouldEaseItems = true; this._container.add_child(item); @@ -853,6 +869,10 @@ var IconGridLayout = GObject.registerClass({ this._shouldEaseItems = true; this._removeItemData(item); + + if (newPage !== -1 && newPosition === -1) + newPage = this._findBestPageToAppend(newPage); + this._addItemToPage(item, newPage, newPosition); }