include/svtools/scrolladaptor.hxx | 1 + sc/source/ui/inc/tabview.hxx | 1 + sc/source/ui/view/tabview.cxx | 11 +++++++++++ svtools/source/control/scrolladaptor.cxx | 5 +++++ vcl/unx/gtk3/gtkinst.cxx | 3 ++- 5 files changed, 20 insertions(+), 1 deletion(-)
New commits: commit 2e2e1096c37b9fc9ebc84a0250a59038a2c7dead Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Mon Jan 16 21:11:04 2023 +0000 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Wed Jan 18 11:41:16 2023 +0000 Resolves: tdf#153049 cell range not expanding while scrolling use ScrollType::DontKnow for a mouse wheel spin use has_grab() to try and distinguish these and UpdateScrollBars on mouse release which is what the old code effectively did Change-Id: I19b6de0a0015420d1802969064b3338ce6ae1638 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145664 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/include/svtools/scrolladaptor.hxx b/include/svtools/scrolladaptor.hxx index d321091ac4de..cdc507078cf8 100644 --- a/include/svtools/scrolladaptor.hxx +++ b/include/svtools/scrolladaptor.hxx @@ -54,6 +54,7 @@ public: virtual tools::Long GetThumbPos() const override; void SetScrollHdl(const Link<weld::Scrollbar&, void>& rLink); + void SetMouseReleaseHdl(const Link<const MouseEvent&, bool>& rLink); // what is it bool IsHoriScroll() const { return m_bHori; } diff --git a/sc/source/ui/inc/tabview.hxx b/sc/source/ui/inc/tabview.hxx index 7fdb0cc3c2c2..ca3918aae325 100644 --- a/sc/source/ui/inc/tabview.hxx +++ b/sc/source/ui/inc/tabview.hxx @@ -226,6 +226,7 @@ private: DECL_LINK(HScrollRightHdl, weld::Scrollbar&, void ); DECL_LINK(VScrollTopHdl, weld::Scrollbar&, void ); DECL_LINK(VScrollBottomHdl, weld::Scrollbar&, void ); + DECL_LINK(EndScrollHdl, const MouseEvent&, bool); void ScrollHdl(ScrollAdaptor* rScrollBar); DECL_LINK(SplitHdl, Splitter*, void); diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx index 5b2c44ee4875..17a414a5f5e4 100644 --- a/sc/source/ui/view/tabview.cxx +++ b/sc/source/ui/view/tabview.cxx @@ -228,6 +228,7 @@ void ScTabView::InitScrollBar(ScrollAdaptor& rScrollBar, tools::Long nMaxVal, co rScrollBar.SetVisibleSize( 10 ); // is reset by Resize rScrollBar.SetScrollHdl(rLink); + rScrollBar.SetMouseReleaseHdl(LINK(this, ScTabView, EndScrollHdl)); rScrollBar.EnableRTL( aViewData.GetDocument().IsLayoutRTL( aViewData.GetTabNo() ) ); } @@ -1054,6 +1055,16 @@ IMPL_LINK_NOARG(ScTabView, VScrollBottomHdl, weld::Scrollbar&, void) ScrollHdl(aVScrollBottom.get()); } +IMPL_LINK_NOARG(ScTabView, EndScrollHdl, const MouseEvent&, bool) +{ + if (bDragging) + { + UpdateScrollBars(); + bDragging = false; + } + return false; +} + void ScTabView::ScrollHdl(ScrollAdaptor* pScroll) { bool bHoriz = ( pScroll == aHScrollLeft.get() || pScroll == aHScrollRight.get() ); diff --git a/svtools/source/control/scrolladaptor.cxx b/svtools/source/control/scrolladaptor.cxx index 14480f0c7d2d..64799a15e96d 100644 --- a/svtools/source/control/scrolladaptor.cxx +++ b/svtools/source/control/scrolladaptor.cxx @@ -106,6 +106,11 @@ void ScrollAdaptor::SetScrollHdl(const Link<weld::Scrollbar&, void>& rLink) m_xScrollBar->connect_adjustment_changed(rLink); } +void ScrollAdaptor::SetMouseReleaseHdl(const Link<const MouseEvent&, bool>& rLink) +{ + m_xScrollBar->connect_mouse_release(rLink); +} + tools::Long ScrollAdaptor::DoScroll(tools::Long nNewPos) { const auto nOrig = m_xScrollBar->adjustment_get_value(); diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 0525f8118531..9a5be553501f 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -8655,7 +8655,8 @@ public: virtual ScrollType get_scroll_type() const override { - return ScrollType::Drag; + // tdf#153049 want a mousewheel spin to be treated as DontKnow + return has_grab() ? ScrollType::Drag : ScrollType::DontKnow; } virtual int get_scroll_thickness() const override