mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-28 14:43:09 +00:00
homescreens/folio: Homescreen page snapping position Bugfix
This fixes an issue where if the device is rotated on the 2nd or further page, the page would not snap immediately back to the right position, but would instead animate.
This commit is contained in:
parent
df7aae2b4e
commit
f5728e1a21
3 changed files with 13 additions and 31 deletions
|
|
@ -590,7 +590,7 @@ void DragState::onChangePageTimerFinished()
|
|||
// if we are at the left edge, go left
|
||||
int page = m_state->currentPage() - 1;
|
||||
if (page >= 0) {
|
||||
m_state->goToPage(page);
|
||||
m_state->goToPage(page, false);
|
||||
}
|
||||
|
||||
} else if (qAbs(rightPagePosition - x) <= PAGE_CHANGE_THRESHOLD) {
|
||||
|
|
@ -604,7 +604,7 @@ void DragState::onChangePageTimerFinished()
|
|||
|
||||
// go to page if it exists
|
||||
if (page < pageListModel->rowCount()) {
|
||||
m_state->goToPage(page);
|
||||
m_state->goToPage(page, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -316,7 +316,7 @@ void HomeScreenState::setPageWidth(qreal pageWidth)
|
|||
Q_EMIT pageWidthChanged();
|
||||
|
||||
// make sure we snap
|
||||
snapPage();
|
||||
goToPage(m_pageNum, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -712,29 +712,7 @@ void HomeScreenState::closeSearchWidget()
|
|||
m_closeSearchWidgetAnim->start();
|
||||
}
|
||||
|
||||
void HomeScreenState::snapPage()
|
||||
{
|
||||
const int numOfPages = m_homeScreen->pageListModel()->rowCount();
|
||||
|
||||
const int leftPage = qBound(0.0, (m_pageViewX / m_pageWidth), numOfPages - 1.0);
|
||||
const qreal leftPagePos = -leftPage * m_pageWidth;
|
||||
|
||||
if (leftPage == numOfPages + 1) {
|
||||
// if we are past the last page
|
||||
goToPage(leftPage);
|
||||
} else {
|
||||
const qreal rightPagePos = leftPagePos - m_pageWidth;
|
||||
|
||||
// go to the closer page (right or left)
|
||||
if (qAbs(rightPagePos - m_pageViewX) < qAbs(leftPagePos - m_pageViewX)) {
|
||||
goToPage(leftPage + 1);
|
||||
} else {
|
||||
goToPage(leftPage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HomeScreenState::goToPage(int page)
|
||||
void HomeScreenState::goToPage(int page, bool snap)
|
||||
{
|
||||
if (page < 0) {
|
||||
page = 0;
|
||||
|
|
@ -747,7 +725,12 @@ void HomeScreenState::goToPage(int page)
|
|||
|
||||
setCurrentPage(page);
|
||||
|
||||
m_pageAnim->setStartValue(m_pageViewX);
|
||||
if (snap) {
|
||||
// Skip the animation and go straight to the intended page
|
||||
m_pageAnim->setStartValue(-page * m_pageWidth);
|
||||
} else {
|
||||
m_pageAnim->setStartValue(m_pageViewX);
|
||||
}
|
||||
m_pageAnim->setEndValue(-page * m_pageWidth);
|
||||
m_pageAnim->start();
|
||||
}
|
||||
|
|
@ -914,9 +897,9 @@ void HomeScreenState::swipeEnded()
|
|||
|
||||
// m_movingRight refers to finger movement
|
||||
if (m_movingRight || m_pageViewX > 0) {
|
||||
goToPage(page);
|
||||
goToPage(page, false);
|
||||
} else {
|
||||
goToPage(page + 1);
|
||||
goToPage(page + 1, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -316,8 +316,7 @@ public Q_SLOTS:
|
|||
void openSearchWidget();
|
||||
void closeSearchWidget();
|
||||
|
||||
void snapPage(); // snaps to closest page
|
||||
void goToPage(int page);
|
||||
void goToPage(int page, bool snap);
|
||||
|
||||
void goToFolderPage(int page);
|
||||
void openFolder(qreal delegateX, qreal delegateY, FolioApplicationFolder *folder);
|
||||
|
|
|
|||
Loading…
Reference in a new issue