tdf#117388 use native scrollbar under gtk in writer's html source view

Change-Id: I233745165140ff47d9bb462ad2248fdb8d9dd3e1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137854
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/sw/source/uibase/docvw/srcedtw.cxx b/sw/source/uibase/docvw/srcedtw.cxx
index cbd0f13..71ee88e 100644
--- a/sw/source/uibase/docvw/srcedtw.cxx
+++ b/sw/source/uibase/docvw/srcedtw.cxx
@@ -33,7 +33,6 @@
#include <vcl/event.hxx>
#include <vcl/svapp.hxx>
#include <vcl/textview.hxx>
#include <vcl/scrbar.hxx>
#include <vcl/ptrstyle.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/viewfrm.hxx>
@@ -44,6 +43,7 @@
#include <editeng/flstitem.hxx>
#include <vcl/metric.hxx>
#include <svtools/ctrltool.hxx>
#include <svtools/scrolladaptor.hxx>
#include <tools/time.hxx>
#include <swmodule.hxx>
#include <docsh.hxx>
@@ -490,15 +490,14 @@ void SwSrcEditWindow::CreateTextEngine()
    m_pOutWin->Show();

    // create Scrollbars
    m_pHScrollbar = VclPtr<ScrollBar>::Create(this, WB_3DLOOK |WB_HSCROLL|WB_DRAG);
    m_pHScrollbar = VclPtr<ScrollAdaptor>::Create(this, true);
    m_pHScrollbar->EnableRTL( false );
    m_pHScrollbar->SetScrollHdl(LINK(this, SwSrcEditWindow, ScrollHdl));
    m_pHScrollbar->SetScrollHdl(LINK(this, SwSrcEditWindow, HorzScrollHdl));
    m_pHScrollbar->Show();

    m_pVScrollbar = VclPtr<ScrollBar>::Create(this, WB_3DLOOK |WB_VSCROLL|WB_DRAG);
    m_pVScrollbar = VclPtr<ScrollAdaptor>::Create(this, false);
    m_pVScrollbar->EnableRTL( false );
    m_pVScrollbar->SetScrollHdl(LINK(this, SwSrcEditWindow, ScrollHdl));
    m_pHScrollbar->EnableDrag();
    m_pVScrollbar->SetScrollHdl(LINK(this, SwSrcEditWindow, VertScrollHdl));
    m_pVScrollbar->Show();

    m_pTextEngine.reset(new ExtTextEngine);
@@ -555,22 +554,21 @@ void SwSrcEditWindow::InitScrollBars()

}

IMPL_LINK(SwSrcEditWindow, ScrollHdl, ScrollBar*, pScroll, void)
IMPL_LINK_NOARG(SwSrcEditWindow, HorzScrollHdl, weld::Scrollbar&, void)
{
    if(pScroll == m_pVScrollbar)
    {
        tools::Long nDiff = m_pTextView->GetStartDocPos().Y() - pScroll->GetThumbPos();
        GetTextView()->Scroll( 0, nDiff );
        m_pTextView->ShowCursor( false );
        pScroll->SetThumbPos( m_pTextView->GetStartDocPos().Y() );
    }
    else
    {
        tools::Long nDiff = m_pTextView->GetStartDocPos().X() - pScroll->GetThumbPos();
        GetTextView()->Scroll( nDiff, 0 );
        m_pTextView->ShowCursor( false );
        pScroll->SetThumbPos( m_pTextView->GetStartDocPos().X() );
    }
    tools::Long nDiff = m_pTextView->GetStartDocPos().X() - m_pHScrollbar->GetThumbPos();
    GetTextView()->Scroll( nDiff, 0 );
    m_pTextView->ShowCursor( false );
    m_pHScrollbar->SetThumbPos( m_pTextView->GetStartDocPos().X() );
    GetSrcView()->GetViewFrame()->GetBindings().Invalidate( SID_TABLE_CELL );
}

IMPL_LINK_NOARG(SwSrcEditWindow, VertScrollHdl, weld::Scrollbar&, void)
{
    tools::Long nDiff = m_pTextView->GetStartDocPos().Y() - m_pVScrollbar->GetThumbPos();
    GetTextView()->Scroll( 0, nDiff );
    m_pTextView->ShowCursor( false );
    m_pVScrollbar->SetThumbPos( m_pTextView->GetStartDocPos().Y() );
    GetSrcView()->GetViewFrame()->GetBindings().Invalidate( SID_TABLE_CELL );
}

diff --git a/sw/source/uibase/inc/srcedtw.hxx b/sw/source/uibase/inc/srcedtw.hxx
index 0042060..030f510 100644
--- a/sw/source/uibase/inc/srcedtw.hxx
+++ b/sw/source/uibase/inc/srcedtw.hxx
@@ -29,7 +29,8 @@
#include <set>

namespace com::sun::star::beans { class XMultiPropertySet; }
class ScrollBar;
namespace weld { class Scrollbar; }
class ScrollAdaptor;
class SwSrcView;
class SwSrcEditWindow;
class TextEngine;
@@ -65,7 +66,7 @@ private:
    std::unique_ptr<ExtTextEngine>  m_pTextEngine;

    VclPtr<TextViewOutWin> m_pOutWin;
    VclPtr<ScrollBar>      m_pHScrollbar,
    VclPtr<ScrollAdaptor>  m_pHScrollbar,
                           m_pVScrollbar;

    SwSrcView*      m_pSrcView;
@@ -95,14 +96,14 @@ private:
    virtual void    Resize() override;
    virtual void    DataChanged( const DataChangedEvent& ) override;
    virtual void    GetFocus() override;
//  virtual void    LoseFocus();

    void            CreateTextEngine();
    void            DoSyntaxHighlight( sal_uInt16 nPara );

    virtual void    Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;

    DECL_LINK(ScrollHdl, ScrollBar*, void);
    DECL_LINK(HorzScrollHdl, weld::Scrollbar&, void);
    DECL_LINK(VertScrollHdl, weld::Scrollbar&, void);

public:
                    SwSrcEditWindow( vcl::Window* pParent, SwSrcView* pParentView );