diff --git a/containments/homescreens/folio/dragstate.cpp b/containments/homescreens/folio/dragstate.cpp index f5dc8f8f..010004f2 100644 --- a/containments/homescreens/folio/dragstate.cpp +++ b/containments/homescreens/folio/dragstate.cpp @@ -528,9 +528,7 @@ void DragState::onDelegateDropped() // delete empty pages at the end if they exist // (it can be created if user drags app to new page, but doesn't place it there) - while (PageListModel::self()->isLastPageEmpty() && PageListModel::self()->rowCount() > 1) { - PageListModel::self()->removePage(PageListModel::self()->rowCount() - 1); - } + PageListModel::self()->deleteEmptyPagesAtEnd(); // clear ghost position if there is one FavouritesModel::self()->deleteGhostEntry(); diff --git a/containments/homescreens/folio/package/contents/ui/HomeScreenPage.qml b/containments/homescreens/folio/package/contents/ui/HomeScreenPage.qml index e90d4cee..38a05732 100644 --- a/containments/homescreens/folio/package/contents/ui/HomeScreenPage.qml +++ b/containments/homescreens/folio/package/contents/ui/HomeScreenPage.qml @@ -114,6 +114,16 @@ Item { visible: row >= 0 && row < Folio.HomeScreenState.pageRows && column >= 0 && column < Folio.HomeScreenState.pageColumns + // called when we want to delete this delegate + function removeSelf() { + // remove from model + root.pageModel.removeDelegate(delegate.row, delegate.column); + + // delete empty pages at the end, and snap position to page that exists + Folio.PageListModel.deleteEmptyPagesAtEnd(); + Folio.HomeScreenState.snapPage(); + } + Loader { id: loader anchors.top: parent.top @@ -203,7 +213,7 @@ Item { Kirigami.Action { icon.name: "emblem-favorite" text: i18n("Remove") - onTriggered: root.pageModel.removeDelegate(delegate.row, delegate.column) + onTriggered: delegate.removeSelf() } ] } @@ -283,7 +293,7 @@ Item { Kirigami.Action { icon.name: "emblem-favorite" text: i18n("Remove") - onTriggered: root.pageModel.removeDelegate(delegate.row, delegate.column) + onTriggered: delegate.removeSelf() } ] } @@ -364,7 +374,7 @@ Item { if (widget.applet) { widget.destroyApplet(); } - root.pageModel.removeDelegate(delegate.row, delegate.column); + delegate.removeSelf(); } onClosed: widgetDelegate.editMode = false diff --git a/containments/homescreens/folio/pagelistmodel.cpp b/containments/homescreens/folio/pagelistmodel.cpp index f99d65cb..4825ca72 100644 --- a/containments/homescreens/folio/pagelistmodel.cpp +++ b/containments/homescreens/folio/pagelistmodel.cpp @@ -94,6 +94,14 @@ bool PageListModel::isLastPageEmpty() return m_pages.size() == 0 ? true : m_pages[m_pages.size() - 1]->isPageEmpty(); } +void PageListModel::deleteEmptyPagesAtEnd() +{ + // delete empty pages at the end if they exist + while (PageListModel::self()->isLastPageEmpty() && PageListModel::self()->rowCount() > 1) { + PageListModel::self()->removePage(PageListModel::self()->rowCount() - 1); + } +} + QJsonArray PageListModel::exportToJson() { QJsonArray arr; diff --git a/containments/homescreens/folio/pagelistmodel.h b/containments/homescreens/folio/pagelistmodel.h index ae5c34b7..bbab3893 100644 --- a/containments/homescreens/folio/pagelistmodel.h +++ b/containments/homescreens/folio/pagelistmodel.h @@ -30,7 +30,9 @@ public: PageModel *getPage(int index); void removePage(int index); + Q_INVOKABLE void addPageAtEnd(); + Q_INVOKABLE void deleteEmptyPagesAtEnd(); bool isLastPageEmpty(); QJsonArray exportToJson();