homescreens/folio: Delete empty page at end if last delegate is deleted

This commit is contained in:
Devin Lin 2024-03-04 22:24:44 -05:00
parent a748ecda5b
commit a4d0894933
4 changed files with 24 additions and 6 deletions

View file

@ -528,9 +528,7 @@ void DragState::onDelegateDropped()
// delete empty pages at the end if they exist // 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) // (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()->deleteEmptyPagesAtEnd();
PageListModel::self()->removePage(PageListModel::self()->rowCount() - 1);
}
// clear ghost position if there is one // clear ghost position if there is one
FavouritesModel::self()->deleteGhostEntry(); FavouritesModel::self()->deleteGhostEntry();

View file

@ -114,6 +114,16 @@ Item {
visible: row >= 0 && row < Folio.HomeScreenState.pageRows && visible: row >= 0 && row < Folio.HomeScreenState.pageRows &&
column >= 0 && column < Folio.HomeScreenState.pageColumns 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 { Loader {
id: loader id: loader
anchors.top: parent.top anchors.top: parent.top
@ -203,7 +213,7 @@ Item {
Kirigami.Action { Kirigami.Action {
icon.name: "emblem-favorite" icon.name: "emblem-favorite"
text: i18n("Remove") text: i18n("Remove")
onTriggered: root.pageModel.removeDelegate(delegate.row, delegate.column) onTriggered: delegate.removeSelf()
} }
] ]
} }
@ -283,7 +293,7 @@ Item {
Kirigami.Action { Kirigami.Action {
icon.name: "emblem-favorite" icon.name: "emblem-favorite"
text: i18n("Remove") text: i18n("Remove")
onTriggered: root.pageModel.removeDelegate(delegate.row, delegate.column) onTriggered: delegate.removeSelf()
} }
] ]
} }
@ -364,7 +374,7 @@ Item {
if (widget.applet) { if (widget.applet) {
widget.destroyApplet(); widget.destroyApplet();
} }
root.pageModel.removeDelegate(delegate.row, delegate.column); delegate.removeSelf();
} }
onClosed: widgetDelegate.editMode = false onClosed: widgetDelegate.editMode = false

View file

@ -94,6 +94,14 @@ bool PageListModel::isLastPageEmpty()
return m_pages.size() == 0 ? true : m_pages[m_pages.size() - 1]->isPageEmpty(); 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 PageListModel::exportToJson()
{ {
QJsonArray arr; QJsonArray arr;

View file

@ -30,7 +30,9 @@ public:
PageModel *getPage(int index); PageModel *getPage(int index);
void removePage(int index); void removePage(int index);
Q_INVOKABLE void addPageAtEnd(); Q_INVOKABLE void addPageAtEnd();
Q_INVOKABLE void deleteEmptyPagesAtEnd();
bool isLastPageEmpty(); bool isLastPageEmpty();
QJsonArray exportToJson(); QJsonArray exportToJson();