diff options
author | Joni Poikelin <joni.poikelin@qt.io> | 2023-04-04 13:04:29 +0300 |
---|---|---|
committer | Axel Spoerl <axel.spoerl@qt.io> | 2023-04-20 20:42:04 +0000 |
commit | 54ea7b5a2a1364b8fcdef859229ca58afe8d87ad (patch) | |
tree | c7fe3c4052231b668067d977f4c570ca75cf9c37 | |
parent | 97c3782e2f5ecd3115aab1d0216b989b55f54f21 (diff) | |
download | qtwebengine-54ea7b5a2a1364b8fcdef859229ca58afe8d87ad.tar.gz |
QPdfNavigator: emit forward/backAvailableChanged when jumping pages
QPdfPageNavigator did not emit the page history signals when pages were
jumped.
This patch ensures correct signal emission in all cases.
It adds a new auto test class for QPdfPageNavigator.
Fixes: QTBUG-112614
Pick-to: 6.5 6.2
Change-Id: I67af5a4d22a8e76b9c12c72c168fa5b3b4390f2c
Reviewed-by: Yigit Akcay <yigit.akcay@qt.io>
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
-rw-r--r-- | src/pdf/qpdfpagenavigator.cpp | 8 | ||||
-rw-r--r-- | tests/auto/pdf/CMakeLists.txt | 4 | ||||
-rw-r--r-- | tests/auto/pdf/qpdfpagenavigator/CMakeLists.txt | 14 | ||||
-rw-r--r-- | tests/auto/pdf/qpdfpagenavigator/pdf-sample.bookmarks_pages.pdf | bin | 0 -> 27523 bytes | |||
-rw-r--r-- | tests/auto/pdf/qpdfpagenavigator/tst_qpdfpagenavigator.cpp | 70 |
5 files changed, 91 insertions, 5 deletions
diff --git a/src/pdf/qpdfpagenavigator.cpp b/src/pdf/qpdfpagenavigator.cpp index 253c1dff8..e077e2184 100644 --- a/src/pdf/qpdfpagenavigator.cpp +++ b/src/pdf/qpdfpagenavigator.cpp @@ -207,9 +207,9 @@ void QPdfPageNavigator::jump(QPdfLink destination) emit currentLocationChanged(currentLocation()); if (d->changing) return; - if (!backAvailableWas) + if (backAvailableWas != backAvailable()) emit backAvailableChanged(backAvailable()); - if (forwardAvailableWas) + if (forwardAvailableWas != forwardAvailable()) emit forwardAvailableChanged(forwardAvailable()); emit jumped(currentLink()); qCDebug(qLcNav) << "push: index" << d->currentHistoryIndex << destination << "-> history" << @@ -263,9 +263,9 @@ void QPdfPageNavigator::jump(int page, const QPointF &location, qreal zoom) emit currentLocationChanged(currentLocation()); if (d->changing) return; - if (!backAvailableWas) + if (backAvailableWas != backAvailable()) emit backAvailableChanged(backAvailable()); - if (forwardAvailableWas) + if (forwardAvailableWas != forwardAvailable()) emit forwardAvailableChanged(forwardAvailable()); emit jumped(currentLink()); qCDebug(qLcNav) << "push: index" << d->currentHistoryIndex << "page" << page diff --git a/tests/auto/pdf/CMakeLists.txt b/tests/auto/pdf/CMakeLists.txt index 8bda0c3c3..2f3f73961 100644 --- a/tests/auto/pdf/CMakeLists.txt +++ b/tests/auto/pdf/CMakeLists.txt @@ -2,7 +2,9 @@ # SPDX-License-Identifier: BSD-3-Clause add_subdirectory(qpdfbookmarkmodel) -#add_subdirectory(qpdfpagenavigator) +if (TARGET Qt::PdfWidgets) + add_subdirectory(qpdfpagenavigator) +endif() add_subdirectory(qpdfpagerenderer) if(TARGET Qt::PrintSupport) add_subdirectory(qpdfdocument) diff --git a/tests/auto/pdf/qpdfpagenavigator/CMakeLists.txt b/tests/auto/pdf/qpdfpagenavigator/CMakeLists.txt new file mode 100644 index 000000000..3e8b8f416 --- /dev/null +++ b/tests/auto/pdf/qpdfpagenavigator/CMakeLists.txt @@ -0,0 +1,14 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +qt_internal_add_test(tst_qpdfpagenavigator.cpp + SOURCES + tst_qpdfpagenavigator.cpp + LIBRARIES + Qt::Gui + Qt::Network + Qt::Pdf + Qt::PdfWidgets + TESTDATA + pdf-sample.bookmarks_pages.pdf +) diff --git a/tests/auto/pdf/qpdfpagenavigator/pdf-sample.bookmarks_pages.pdf b/tests/auto/pdf/qpdfpagenavigator/pdf-sample.bookmarks_pages.pdf Binary files differnew file mode 100644 index 000000000..c4e1aa36e --- /dev/null +++ b/tests/auto/pdf/qpdfpagenavigator/pdf-sample.bookmarks_pages.pdf diff --git a/tests/auto/pdf/qpdfpagenavigator/tst_qpdfpagenavigator.cpp b/tests/auto/pdf/qpdfpagenavigator/tst_qpdfpagenavigator.cpp new file mode 100644 index 000000000..327a9f36a --- /dev/null +++ b/tests/auto/pdf/qpdfpagenavigator/tst_qpdfpagenavigator.cpp @@ -0,0 +1,70 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + + +#include <QtTest/QtTest> + +#include <QPdfDocument> +#include <QPdfView> +#include <QPdfPageNavigator> + +class tst_QPdfPageNavigator: public QObject +{ + Q_OBJECT + +private slots: + void offScreenSignals(); +}; + +void tst_QPdfPageNavigator::offScreenSignals() +{ + QPdfDocument document; + QPdfView pdfView; + QPdfPageNavigator *navigator = pdfView.pageNavigator(); + + QSignalSpy currentPageChanged(navigator, &QPdfPageNavigator::currentPageChanged); + QSignalSpy currentLocationChanged(navigator, &QPdfPageNavigator::currentLocationChanged); + QSignalSpy backAvailableChanged(navigator, &QPdfPageNavigator::backAvailableChanged); + QSignalSpy forwardAvailableChanged(navigator, &QPdfPageNavigator::forwardAvailableChanged); + QSignalSpy jumped(navigator, &QPdfPageNavigator::jumped); + + QCOMPARE(document.load(QFINDTESTDATA("pdf-sample.bookmarks_pages.pdf")), QPdfDocument::Error::None); + QVERIFY2(document.pageCount() == 3, "Test document has changed! 3 pages expected."); + pdfView.setDocument(&document); + + // Start with a clean history + QCOMPARE(forwardAvailableChanged.count(), 0); + QCOMPARE(backAvailableChanged.count(), 0); + + navigator->jump(3, QPoint()); + QCOMPARE(forwardAvailableChanged.count(), 0); + QCOMPARE(backAvailableChanged.count(), 1); + QCOMPARE(currentPageChanged.count(), 1); + QCOMPARE(currentLocationChanged.count(), 0); + QCOMPARE(jumped.count(), 1); + + navigator->jump(1, QPoint()); + QCOMPARE(forwardAvailableChanged.count(), 0); + QCOMPARE(backAvailableChanged.count(), 1); + QCOMPARE(currentPageChanged.count(), 2); + QCOMPARE(currentLocationChanged.count(), 0); + QCOMPARE(jumped.count(), 2); + + navigator->back(); + QCOMPARE(forwardAvailableChanged.count(), 1); + QCOMPARE(backAvailableChanged.count(), 1); + QCOMPARE(currentPageChanged.count(), 3); + QCOMPARE(currentLocationChanged.count(), 0); + QCOMPARE(jumped.count(), 3); + + navigator->forward(); + QCOMPARE(forwardAvailableChanged.count(), 2); + QCOMPARE(backAvailableChanged.count(), 1); + QCOMPARE(currentPageChanged.count(), 4); + QCOMPARE(currentLocationChanged.count(), 0); + QCOMPARE(jumped.count(), 4); +} + +QTEST_MAIN(tst_QPdfPageNavigator) + +#include "tst_qpdfpagenavigator.moc" |