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/+/145587
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/include/svtools/scrolladaptor.hxx b/include/svtools/scrolladaptor.hxx
index d321091..cdc5070 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 7fdb0cc..ca3918a 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 5b2c44e..17a414a 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 14480f0..64799a1 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 0525f81..9a5be55 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