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

Reply via email to