From a3fde0223224b22b873a3f82ca2f8d17a94fbdfb Mon Sep 17 00:00:00 2001 From: Huu-Tinh Pham Date: Fri, 18 Feb 2022 12:12:41 +0000 Subject: [PATCH] Onetime sync thumbnail Added context menu entry to quick sync thumbnails with the current page. This is handy in case the user is not using "Link the thumbnails with the page" and wants quick sync thumbnails without changing settings or search for the page in the thumbnails view. Before ![image](/uploads/389216ce4720f1891ddc4f2bf8ee14ea/image.png) After ![image](/uploads/b4804d11992695d3a6be6642c9d7ac16/image.png) --- part/part.cpp | 2 ++ part/thumbnaillist.cpp | 9 +++++++-- part/thumbnaillist.h | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/part/part.cpp b/part/part.cpp index ae6ea5eb2..7f514dbd9 100644 --- a/part/part.cpp +++ b/part/part.cpp @@ -2975,6 +2975,8 @@ void Part::showMenu(const Okular::Page *page, const QPoint point, const QString QAction *fitPageWidth = nullptr; if (page) { popup->addAction(new OKMenuTitle(popup, i18n("Page %1", page->number() + 1))); + if (m_thumbnailList->isVisible() && !Okular::Settings::syncThumbnailsViewport()) + popup->addAction(QIcon::fromTheme(QStringLiteral("action-synchronize")), i18n("Sync Thumbnail with Page"), m_thumbnailList.data(), &ThumbnailList::syncThumbnail); if ((!currentPage && m_document->bookmarkManager()->isBookmarked(page->number())) || (currentPage && m_document->bookmarkManager()->isBookmarked(m_document->viewport()))) removeBookmark = popup->addAction(QIcon::fromTheme(QStringLiteral("bookmark-remove"), QIcon::fromTheme(QStringLiteral("edit-delete-bookmark"))), i18n("Remove Bookmark")); else diff --git a/part/thumbnaillist.cpp b/part/thumbnaillist.cpp index 0adc60d72..a8660f6ae 100644 --- a/part/thumbnaillist.cpp +++ b/part/thumbnaillist.cpp @@ -372,8 +372,7 @@ void ThumbnailList::notifyCurrentPageChanged(int previousPage, int currentPage) d->m_selected = *tIt; d->m_selected->setSelected(true); if (Okular::Settings::syncThumbnailsViewport()) { - int yOffset = qMax(viewport()->height() / 4, d->m_selected->height() / 2); - ensureVisible(0, d->m_selected->pos().y() + d->m_selected->height() / 2, 0, yOffset); + syncThumbnail(); } break; } @@ -381,6 +380,12 @@ void ThumbnailList::notifyCurrentPageChanged(int previousPage, int currentPage) } } +void ThumbnailList::syncThumbnail() +{ + int yOffset = qMax(viewport()->height() / 4, d->m_selected->height() / 2); + ensureVisible(0, d->m_selected->pos().y() + d->m_selected->height() / 2, 0, yOffset); +} + void ThumbnailList::notifyPageChanged(int pageNumber, int changedFlags) { static const int interestingFlags = DocumentObserver::Pixmap | DocumentObserver::Bookmark | DocumentObserver::Highlights | DocumentObserver::Annotations; diff --git a/part/thumbnaillist.h b/part/thumbnaillist.h index 1e6f8546f..5f4b9a384 100644 --- a/part/thumbnaillist.h +++ b/part/thumbnaillist.h @@ -47,6 +47,9 @@ public: // redraw visible widgets (useful for refreshing contents...) void updateWidgets(); + // show current page in Thumbnails view + void syncThumbnail(); + public Q_SLOTS: // these are connected to ThumbnailController buttons void slotFilterBookmarks(bool filterOn);