tdf#117388 use native scrollbar under gtk in database scrolled window

Change-Id: I84486f8c8761b80fc45cdccc620485b67afdd048
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137879
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/dbaccess/source/ui/inc/JoinTableView.hxx b/dbaccess/source/ui/inc/JoinTableView.hxx
index 80de958..4dedc70 100644
--- a/dbaccess/source/ui/inc/JoinTableView.hxx
+++ b/dbaccess/source/ui/inc/JoinTableView.hxx
@@ -18,6 +18,7 @@
 */
#pragma once

#include <svtools/scrolladaptor.hxx>
#include <vcl/window.hxx>
#include <vcl/timer.hxx>
#include <vcl/idle.hxx>
@@ -50,8 +51,8 @@ namespace dbaui
    class OJoinTableView;
    class OScrollWindowHelper : public vcl::Window
    {
        VclPtr<ScrollBar>          m_aHScrollBar;
        VclPtr<ScrollBar>          m_aVScrollBar;
        VclPtr<ScrollAdaptor>      m_aHScrollBar;
        VclPtr<ScrollAdaptor>      m_aVScrollBar;
        VclPtr<vcl::Window>        m_pCornerWindow;
        VclPtr<OJoinTableView>     m_pTableView;

@@ -68,8 +69,8 @@ namespace dbaui
        void resetRange(const Point& _aSize);

        // own methods
        ScrollBar& GetHScrollBar() { return *m_aHScrollBar; }
        ScrollBar& GetVScrollBar() { return *m_aVScrollBar; }
        ScrollAdaptor& GetHScrollBar() { return *m_aHScrollBar; }
        ScrollAdaptor& GetVScrollBar() { return *m_aVScrollBar; }
    };


@@ -121,9 +122,10 @@ namespace dbaui
        virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;

        // own methods
        ScrollBar& GetHScrollBar() { return static_cast<OScrollWindowHelper*>(GetParent())->GetHScrollBar(); }
        ScrollBar& GetVScrollBar() { return static_cast<OScrollWindowHelper*>(GetParent())->GetVScrollBar(); }
        DECL_LINK( ScrollHdl, ScrollBar*, void );
        ScrollAdaptor& GetHScrollBar() { return static_cast<OScrollWindowHelper*>(GetParent())->GetHScrollBar(); }
        ScrollAdaptor& GetVScrollBar() { return static_cast<OScrollWindowHelper*>(GetParent())->GetVScrollBar(); }
        DECL_LINK(VertScrollHdl, weld::Scrollbar&, void);
        DECL_LINK(HorzScrollHdl, weld::Scrollbar&, void);

        void DrawConnections(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect);
        void InvalidateConnections();
diff --git a/dbaccess/source/ui/querydesign/JoinTableView.cxx b/dbaccess/source/ui/querydesign/JoinTableView.cxx
index 0556281..5cd3ec1 100644
--- a/dbaccess/source/ui/querydesign/JoinTableView.cxx
+++ b/dbaccess/source/ui/querydesign/JoinTableView.cxx
@@ -66,12 +66,11 @@ using namespace ::com::sun::star::lang;
#define TABWIN_HEIGHT_STD   120

OScrollWindowHelper::OScrollWindowHelper( vcl::Window* pParent) : Window( pParent)
    ,m_aHScrollBar( VclPtr<ScrollBar>::Create(this, WB_HSCROLL|WB_REPEAT|WB_DRAG) )
    ,m_aVScrollBar( VclPtr<ScrollBar>::Create(this, WB_VSCROLL|WB_REPEAT|WB_DRAG) )
    ,m_aHScrollBar( VclPtr<ScrollAdaptor>::Create(this, true) )
    ,m_aVScrollBar( VclPtr<ScrollAdaptor>::Create(this, false) )
    ,m_pCornerWindow(VclPtr<ScrollBarBox>::Create(this, WB_3DLOOK))
    ,m_pTableView(nullptr)
{

    // ScrollBars

    GetHScrollBar().SetRange( Range(0, 1000) );
@@ -106,8 +105,8 @@ void OScrollWindowHelper::setTableView(OJoinTableView* _pTableView)
{
    m_pTableView = _pTableView;
    // ScrollBars
    GetHScrollBar().SetScrollHdl( LINK(m_pTableView, OJoinTableView, ScrollHdl) );
    GetVScrollBar().SetScrollHdl( LINK(m_pTableView, OJoinTableView, ScrollHdl) );
    GetHScrollBar().SetScrollHdl( LINK(m_pTableView, OJoinTableView, HorzScrollHdl) );
    GetVScrollBar().SetScrollHdl( LINK(m_pTableView, OJoinTableView, VertScrollHdl) );
}

void OScrollWindowHelper::resetRange(const Point& _aSize)
@@ -201,10 +200,16 @@ void OJoinTableView::dispose()
    vcl::Window::dispose();
}

IMPL_LINK( OJoinTableView, ScrollHdl, ScrollBar*, pScrollBar, void )
IMPL_LINK(OJoinTableView, HorzScrollHdl, weld::Scrollbar&, rScrollbar, void)
{
    // move all windows
    ScrollPane( pScrollBar->GetDelta(), (pScrollBar == &GetHScrollBar()), false );
    ScrollPane(m_aScrollOffset.X() - rScrollbar.adjustment_get_value(), true, false);
}

IMPL_LINK(OJoinTableView, VertScrollHdl, weld::Scrollbar&, rScrollbar, void)
{
    // move all windows
    ScrollPane(m_aScrollOffset.Y() - rScrollbar.adjustment_get_value(), false, false);
}

void OJoinTableView::Resize()
@@ -405,7 +410,7 @@ namespace
    bool isScrollAllowed( OJoinTableView* _pView,tools::Long nDelta, bool bHoriz)
    {
        // adjust ScrollBar-Positions
        ScrollBar& rBar = bHoriz ? _pView->GetHScrollBar() : _pView->GetVScrollBar() ;
        ScrollAdaptor& rBar = bHoriz ? _pView->GetHScrollBar() : _pView->GetVScrollBar();

        tools::Long nOldThumbPos = rBar.GetThumbPos();
        tools::Long nNewThumbPos = nOldThumbPos + nDelta;