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
// (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();

View file

@ -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

View file

@ -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;

View file

@ -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();