From 975bf990edbd920bbbe326b1519945f7e859c4f6 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Mon, 8 Nov 2021 17:34:14 +0100 Subject: [PATCH] Fix zoom actions not being updated correctly BUGS: 440173 --- part/pageview.cpp | 55 ++++++++++++++++++++++++++++------------------- part/pageview.h | 2 ++ 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/part/pageview.cpp b/part/pageview.cpp index ac5d24e88..cab395171 100644 --- a/part/pageview.cpp +++ b/part/pageview.cpp @@ -1313,23 +1313,7 @@ void PageView::updateActionState(bool haspages, bool hasformwidgets) if (d->aViewContinuous) d->aViewContinuous->setEnabled(haspages); - if (d->aZoomFitWidth) - d->aZoomFitWidth->setEnabled(haspages); - if (d->aZoomFitPage) - d->aZoomFitPage->setEnabled(haspages); - if (d->aZoomAutoFit) - d->aZoomAutoFit->setEnabled(haspages); - - if (d->aZoom) { - d->aZoom->selectableActionGroup()->setEnabled(haspages); - d->aZoom->setEnabled(haspages); - } - if (d->aZoomIn) - d->aZoomIn->setEnabled(haspages); - if (d->aZoomOut) - d->aZoomOut->setEnabled(haspages); - if (d->aZoomActual) - d->aZoomActual->setEnabled(haspages && d->zoomFactor != 1.0); + updateZoomActionsEnabledStatus(); if (d->aColorModeMenu) d->aColorModeMenu->setEnabled(haspages); @@ -3864,8 +3848,8 @@ void PageView::updateZoom(ZoomMode newZoomMode) const float upperZoomLimit = d->document->supportsTiles() ? 100.0 : 4.0; if (newFactor > upperZoomLimit) newFactor = upperZoomLimit; - if (newFactor < 0.1) - newFactor = 0.1; + if (newFactor < kZoomValues[0]) + newFactor = kZoomValues[0]; if (newZoomMode != d->zoomMode || (newZoomMode == ZoomFixed && newFactor != d->zoomFactor)) { // rebuild layout and update the whole viewport @@ -3889,9 +3873,36 @@ void PageView::updateZoom(ZoomMode newZoomMode) } else if (newZoomMode == ZoomFixed && newFactor == d->zoomFactor) updateZoomText(); - d->aZoomIn->setEnabled(d->zoomFactor < upperZoomLimit - 0.001); - d->aZoomOut->setEnabled(d->zoomFactor > 0.101); - d->aZoomActual->setEnabled(d->zoomFactor != 1.0); + updateZoomActionsEnabledStatus(); +} + +void PageView::updateZoomActionsEnabledStatus() +{ + const float upperZoomLimit = d->document->supportsTiles() ? kZoomValues.back() : 4.0; + const bool hasPages = d->document && d->document->pages() > 0; + + if (d->aZoomFitWidth) { + d->aZoomFitWidth->setEnabled(hasPages); + } + if (d->aZoomFitPage) { + d->aZoomFitPage->setEnabled(hasPages); + } + if (d->aZoomAutoFit) { + d->aZoomAutoFit->setEnabled(hasPages); + } + if (d->aZoom) { + d->aZoom->selectableActionGroup()->setEnabled(hasPages); + d->aZoom->setEnabled(hasPages); + } + if (d->aZoomIn) { + d->aZoomIn->setEnabled(hasPages && d->zoomFactor < upperZoomLimit - 0.001); + } + if (d->aZoomOut) { + d->aZoomOut->setEnabled(hasPages && d->zoomFactor > (kZoomValues[0] + 0.001)); + } + if (d->aZoomActual) { + d->aZoomActual->setEnabled(hasPages && d->zoomFactor != 1.0); + } } void PageView::updateZoomText() diff --git a/part/pageview.h b/part/pageview.h index fa1078ca8..5b4f6305b 100644 --- a/part/pageview.h +++ b/part/pageview.h @@ -182,6 +182,8 @@ private: void updateZoom(ZoomMode newZoomMode); // update the text on the label using global zoom value or current page's one void updateZoomText(); + // update the text enabled status of the zoom actions + void updateZoomActionsEnabledStatus(); // update view mode (single, facing...) void updateViewMode(const int nr); void textSelectionClear();