mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-24 18:43:37 +00:00
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 4d7b912ca1
)
This commit is contained in:
parent
8acc5b85c4
commit
49ce94f636
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user