QtQuick: Adopt more assertive behavior upon document change

Don't change all pages to 0, it should be the application currentPage to
change. Otherwise we get to having 3 items at page 0.
This commit is contained in:
Aleix Pol 2018-04-25 15:55:30 +02:00
parent 19222f27ca
commit a7b165c0f2
3 changed files with 18 additions and 16 deletions

View file

@ -46,6 +46,7 @@ Kirigami.AbstractApplicationWindow {
Okular.DocumentItem {
id: documentItem
onPathChanged: currentPage = 0
onWindowTitleForDocumentChanged: {
fileBrowserRoot.title = windowTitleForDocument
}

View file

@ -120,7 +120,7 @@ void PageItem::setDocument(DocumentItem *doc)
emit documentChanged();
m_redrawTimer->start();
connect(doc, &DocumentItem::pathChanged, this, &PageItem::documentPathChanged);
connect(doc, &DocumentItem::pathChanged, this, &PageItem::refreshPage);
}
int PageItem::pageNumber() const
@ -133,18 +133,27 @@ void PageItem::setPageNumber(int number)
if ((m_page && m_viewPort.pageNumber == number) ||
!m_documentItem ||
!m_documentItem.data()->isOpened() ||
number < 0 ||
(uint)number >= m_documentItem.data()->document()->pages()) {
number < 0) {
return;
}
m_viewPort.pageNumber = number;
m_page = m_documentItem.data()->document()->page(number);
refreshPage();
emit pageNumberChanged();
checkBookmarksChanged();
}
void PageItem::refreshPage()
{
if (uint(m_viewPort.pageNumber) < m_documentItem.data()->document()->pages()) {
m_page = m_documentItem.data()->document()->page(m_viewPort.pageNumber);
} else {
m_page = nullptr;
}
emit implicitWidthChanged();
emit implicitHeightChanged();
checkBookmarksChanged();
m_redrawTimer->start();
}
@ -396,15 +405,6 @@ void PageItem::contentYChanged()
m_viewPort.rePos.normalizedY = m_flickable.data()->property("contentY").toReal() / (height() - m_flickable.data()->height());
}
void PageItem::documentPathChanged()
{
m_page = nullptr;
setPageNumber(0);
m_redrawTimer->start();
}
void PageItem::setIsThumbnail(bool thumbnail)
{
if (thumbnail == m_isThumbnail) {

View file

@ -154,13 +154,14 @@ protected:
private Q_SLOTS:
void delayedRedraw();
void documentPathChanged();
void pageHasChanged(int page, int flags);
void checkBookmarksChanged();
void contentXChanged();
void contentYChanged();
private:
void refreshPage();
const Okular::Page *m_page;
bool m_smooth;
bool m_intentionalDraw;