From 49ce94f636ba3d6513724fd7b00969cd39f596eb Mon Sep 17 00:00:00 2001 From: Guillaume Munch Date: Fri, 29 Jul 2016 21:27:13 +0100 Subject: [PATCH] Fix "scroll here" feature of scrollbar (#10311) Prevent setRange() from causing a recursive call to scrollTo(). Reduces three calls of scrollTo() to one call for all scrolling functions of the scroll bar (e.g. clicking on the arrow, dragging, or clicking somewhere on the scrollbar). (cherry picked from commit 4d7b912ca1890b5b0b3ed29568b7091a7e7baef0) --- src/BufferView.cpp | 6 ++++++ src/frontends/qt4/GuiWorkArea.cpp | 7 +++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/BufferView.cpp b/src/BufferView.cpp index f304798c82..78abc87894 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -565,6 +565,12 @@ void BufferView::updateScrollbar() d->scrollbarParameters_.max -= minVisiblePart(); else d->scrollbarParameters_.max -= d->scrollbarParameters_.page_step; + + // 0 must be inside the range as it denotes the current position + if (d->scrollbarParameters_.max < 0) + d->scrollbarParameters_.max = 0; + if (d->scrollbarParameters_.min > 0) + d->scrollbarParameters_.min = 0; } diff --git a/src/frontends/qt4/GuiWorkArea.cpp b/src/frontends/qt4/GuiWorkArea.cpp index 7cb732e01a..7b8b088504 100644 --- a/src/frontends/qt4/GuiWorkArea.cpp +++ b/src/frontends/qt4/GuiWorkArea.cpp @@ -675,10 +675,9 @@ void GuiWorkArea::toggleCursor() void GuiWorkArea::Private::updateScrollbar() { ScrollbarParameters const & scroll_ = buffer_view_->scrollbarParameters(); - // WARNING: don't touch at the scrollbar value like this: - // verticalScrollBar()->setValue(scroll_.position); - // because this would cause a recursive signal/slot calling with - // GuiWorkArea::scrollTo + // Block signals to prevent setRange() and setSliderPosition from causing + // recursive calls via the signal valueChanged. (#10311) + QSignalBlocker blocker(p->verticalScrollBar()); p->verticalScrollBar()->setRange(scroll_.min, scroll_.max); p->verticalScrollBar()->setPageStep(scroll_.page_step); p->verticalScrollBar()->setSingleStep(scroll_.single_step); -- 2.39.5