diff --git a/autotests/parttest.cpp b/autotests/parttest.cpp --- a/autotests/parttest.cpp +++ b/autotests/parttest.cpp @@ -17,6 +17,7 @@ #include "../core/page.h" #include "../part.h" #include "../ui/toc.h" +#include "../ui/sidebar.h" #include "../ui/pageview.h" #include "../generators/poppler/config-okular-poppler.h" @@ -95,6 +96,7 @@ void test388288(); void testSaveAs(); void testSaveAs_data(); + void testSidebarItemAfterSaving(); void testSaveAsUndoStackAnnotations(); void testSaveAsUndoStackAnnotations_data(); void testSaveAsUndoStackForms(); @@ -939,6 +941,23 @@ QTest::newRow("jpg") << KDESRCDIR "data/potato.jpg" << "jpg" << false << true; } +void PartTest::testSidebarItemAfterSaving() +{ + QVariantList dummyArgs; + Okular::Part part(nullptr, nullptr, dummyArgs); + QWidget *currentSidebarItem = part.m_sidebar->currentItem(); // thumbnails + openDocument(&part, QStringLiteral(KDESRCDIR "data/tocreload.pdf")); + // since it has TOC it changes to TOC + QVERIFY(currentSidebarItem != part.m_sidebar->currentItem()); + // now change back to thumbnails + part.m_sidebar->setCurrentItem(currentSidebarItem); + + part.saveAs(QUrl::fromLocalFile(QStringLiteral(KDESRCDIR "data/tocreload.pdf"))); + + // Check it is still thumbnails after saving + QCOMPARE(currentSidebarItem, part.m_sidebar->currentItem()); +} + void PartTest::testSaveAsUndoStackAnnotations() { QFETCH(QString, file); diff --git a/part.cpp b/part.cpp --- a/part.cpp +++ b/part.cpp @@ -2730,6 +2730,7 @@ // Make the generator use the new new file instead of the old one if ( m_document->canSwapBackingFile() && !m_documentOpenWithPassword ) { + QWidget *currentSidebarItem = m_sidebar->currentItem(); // this calls openFile internally, which in turn actually calls // m_document->swapBackingFile() instead of the regular loadDocument if ( openUrl( saveUrl, true /* swapInsteadOfOpening */ ) ) @@ -2743,6 +2744,9 @@ { reloadedCorrectly = false; } + + if ( m_sidebar->currentItem() != currentSidebarItem ) + m_sidebar->setCurrentItem( currentSidebarItem ); } else { diff --git a/ui/sidebar.h b/ui/sidebar.h --- a/ui/sidebar.h +++ b/ui/sidebar.h @@ -11,11 +11,12 @@ #define _SIDEBAR_H_ #include +#include "okularpart_export.h" class QIcon; class QListWidgetItem; -class Sidebar : public QWidget +class OKULARPART_EXPORT Sidebar : public QWidget { Q_OBJECT public: