basctl/source/basicide/baside2.cxx  |    2 -
 basctl/source/basicide/baside2.hxx  |   11 +++++----
 basctl/source/basicide/baside2b.cxx |    9 +++----
 basctl/source/basicide/baside3.cxx  |    2 -
 basctl/source/basicide/basidesh.cxx |    4 +--
 basctl/source/basicide/bastypes.cxx |   41 +++++++++++++++++-------------------
 basctl/source/dlged/dlged.cxx       |    6 -----
 basctl/source/dlged/dlgedfunc.cxx   |    8 +++----
 basctl/source/dlged/dlgedview.cxx   |    2 -
 basctl/source/inc/baside3.hxx       |    2 -
 basctl/source/inc/basidesh.hxx      |    5 ++--
 basctl/source/inc/bastypes.hxx      |   16 +++++++-------
 basctl/source/inc/dlged.hxx         |   12 +++++-----
 13 files changed, 59 insertions(+), 61 deletions(-)

New commits:
commit 5ae01ffa70549b1a4d9f166d0528a8d04a5dc858
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Fri Aug 5 11:37:48 2022 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Fri Aug 5 17:05:04 2022 +0200

    tdf#117388 use native scrollbar under gtk in basic editor
    
    Change-Id: Id8f2b4fdc40116bb28053dc6fbbf6fa86e6808fb
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137862
    Tested-by: Caolán McNamara <caol...@redhat.com>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/basctl/source/basicide/baside2.cxx 
b/basctl/source/basicide/baside2.cxx
index e75bb32a6478..1eb4b9027b7b 100644
--- a/basctl/source/basicide/baside2.cxx
+++ b/basctl/source/basicide/baside2.cxx
@@ -1164,7 +1164,7 @@ void ModulWindow::GetState( SfxItemSet &rSet )
     }
 }
 
-void ModulWindow::DoScroll( ScrollBar* pCurScrollBar )
+void ModulWindow::DoScroll( Scrollable* pCurScrollBar )
 {
     if ( ( pCurScrollBar == GetHScrollBar() ) && GetEditView() )
     {
diff --git a/basctl/source/basicide/baside2.hxx 
b/basctl/source/basicide/baside2.hxx
index bf84323a3200..38ca2aec6ea7 100644
--- a/basctl/source/basicide/baside2.hxx
+++ b/basctl/source/basicide/baside2.hxx
@@ -32,6 +32,7 @@
 #include <vcl/weld.hxx>
 
 #include <svtools/colorcfg.hxx>
+#include <svtools/scrolladaptor.hxx>
 #include <o3tl/enumarray.hxx>
 #include <rtl/ustrbuf.hxx>
 
@@ -253,12 +254,12 @@ private:
     VclPtr<BreakPointWindow> aBrkWindow;
     VclPtr<LineNumberWindow> aLineNumberWindow;
     VclPtr<EditorWindow>     aEdtWindow;
-    VclPtr<ScrollBar>        aEWVScrollBar;
+    VclPtr<ScrollAdaptor>    aEWVScrollBar;
 
     virtual void DataChanged(DataChangedEvent const & rDCEvt) override;
 
     virtual void        Resize() override;
-    DECL_LINK( ScrollHdl, ScrollBar*, void );
+    DECL_LINK(ScrollHdl, weld::Scrollbar&, void);
 
 public:
     explicit ComplexEditorWindow( ModulWindow* pParent );
@@ -267,7 +268,7 @@ public:
     BreakPointWindow&   GetBrkWindow()      { return *aBrkWindow; }
     LineNumberWindow&   GetLineNumberWindow() { return *aLineNumberWindow; }
     EditorWindow&       GetEdtWindow()      { return *aEdtWindow; }
-    ScrollBar&          GetEWVScrollBar()   { return *aEWVScrollBar; }
+    ScrollAdaptor&      GetEWVScrollBar()   { return *aEWVScrollBar; }
 
     void SetLineNumberDisplay(bool b);
 };
@@ -294,7 +295,7 @@ protected:
     virtual void    GetFocus() override;
     virtual void    Paint( vcl::RenderContext& rRenderContext, const 
tools::Rectangle& ) override;
     virtual void    DoInit() override;
-    virtual void    DoScroll( ScrollBar* pCurScrollBar ) override;
+    virtual void    DoScroll(Scrollable* pCurScrollBar) override;
 
 public:
     ModulWindow( ModulWindowLayout* pParent, const ScriptDocument& rDocument, 
const OUString& aLibName, const OUString& aName, OUString aModule );
@@ -360,7 +361,7 @@ public:
     EditorWindow&       GetEditorWindow()       { return 
m_aXEditorWindow->GetEdtWindow(); }
     BreakPointWindow&   GetBreakPointWindow()   { return 
m_aXEditorWindow->GetBrkWindow(); }
     LineNumberWindow&   GetLineNumberWindow()   { return 
m_aXEditorWindow->GetLineNumberWindow(); }
-    ScrollBar&          GetEditVScrollBar()     { return 
m_aXEditorWindow->GetEWVScrollBar(); }
+    ScrollAdaptor&      GetEditVScrollBar()     { return 
m_aXEditorWindow->GetEWVScrollBar(); }
     ExtTextEngine*      GetEditEngine()         { return 
GetEditorWindow().GetEditEngine(); }
     TextView*           GetEditView()           { return 
GetEditorWindow().GetEditView(); }
     BreakPointList&     GetBreakPoints()        { return 
GetBreakPointWindow().GetBreakPoints(); }
diff --git a/basctl/source/basicide/baside2b.cxx 
b/basctl/source/basicide/baside2b.cxx
index fbda4447191e..249a636fdee7 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -1940,7 +1940,7 @@ ComplexEditorWindow::ComplexEditorWindow( ModulWindow* 
pParent ) :
     aBrkWindow(VclPtr<BreakPointWindow>::Create(this, pParent)),
     aLineNumberWindow(VclPtr<LineNumberWindow>::Create(this, pParent)),
     aEdtWindow(VclPtr<EditorWindow>::Create(this, pParent)),
-    aEWVScrollBar( VclPtr<ScrollBar>::Create(this, WB_VSCROLL | WB_DRAG) )
+    aEWVScrollBar( VclPtr<ScrollAdaptor>::Create(this, false) )
 {
     aEdtWindow->Show();
     aBrkWindow->Show();
@@ -1995,17 +1995,16 @@ void ComplexEditorWindow::Resize()
     aEWVScrollBar->SetPosSizePixel( Point( aOutSz.Width() - DWBORDER - 
nSBWidth, DWBORDER ), Size( nSBWidth, aSz.Height() ) );
 }
 
-IMPL_LINK(ComplexEditorWindow, ScrollHdl, ScrollBar *, pCurScrollBar, void )
+IMPL_LINK_NOARG(ComplexEditorWindow, ScrollHdl, weld::Scrollbar&, void)
 {
     if (aEdtWindow->GetEditView())
     {
-        DBG_ASSERT( pCurScrollBar == aEWVScrollBar.get(), "Who is scrolling?" 
);
-        tools::Long nDiff = aEdtWindow->GetEditView()->GetStartDocPos().Y() - 
pCurScrollBar->GetThumbPos();
+        tools::Long nDiff = aEdtWindow->GetEditView()->GetStartDocPos().Y() - 
aEWVScrollBar->GetThumbPos();
         aEdtWindow->GetEditView()->Scroll( 0, nDiff );
         aBrkWindow->DoScroll( nDiff );
         aLineNumberWindow->DoScroll( nDiff );
         aEdtWindow->GetEditView()->ShowCursor(false);
-        pCurScrollBar->SetThumbPos( 
aEdtWindow->GetEditView()->GetStartDocPos().Y() );
+        aEWVScrollBar->SetThumbPos( 
aEdtWindow->GetEditView()->GetStartDocPos().Y() );
     }
 }
 
diff --git a/basctl/source/basicide/baside3.cxx 
b/basctl/source/basicide/baside3.cxx
index 1424573b0ea5..be271265f493 100644
--- a/basctl/source/basicide/baside3.cxx
+++ b/basctl/source/basicide/baside3.cxx
@@ -237,7 +237,7 @@ void DialogWindow::DoInit()
     m_pEditor->SetScrollBars( GetHScrollBar(), GetVScrollBar() );
 }
 
-void DialogWindow::DoScroll( ScrollBar*  )
+void DialogWindow::DoScroll( Scrollable*  )
 {
     m_pEditor->DoScroll();
 }
diff --git a/basctl/source/basicide/basidesh.cxx 
b/basctl/source/basicide/basidesh.cxx
index 0e85219824b2..a075b1f8f2db 100644
--- a/basctl/source/basicide/basidesh.cxx
+++ b/basctl/source/basicide/basidesh.cxx
@@ -159,8 +159,8 @@ unsigned Shell::nShellCount = 0;
 Shell::Shell( SfxViewFrame* pFrame_, SfxViewShell* /* pOldShell */ ) :
     SfxViewShell( pFrame_, SfxViewShellFlags::NO_NEWWINDOW ),
     m_aCurDocument( ScriptDocument::getApplicationScriptDocument() ),
-    aHScrollBar( VclPtr<ScrollBar>::Create(&GetViewFrame()->GetWindow(), 
WinBits( WB_HSCROLL | WB_DRAG )) ),
-    aVScrollBar( VclPtr<ScrollBar>::Create(&GetViewFrame()->GetWindow(), 
WinBits( WB_VSCROLL | WB_DRAG )) ),
+    aHScrollBar( VclPtr<ScrollAdaptor>::Create(&GetViewFrame()->GetWindow(), 
true) ),
+    aVScrollBar( VclPtr<ScrollAdaptor>::Create(&GetViewFrame()->GetWindow(), 
false) ),
     aScrollBarBox( VclPtr<ScrollBarBox>::Create(&GetViewFrame()->GetWindow(), 
WinBits( WB_SIZEABLE )) ),
     pLayout(nullptr),
     
aObjectCatalog(VclPtr<ObjectCatalog>::Create(&GetViewFrame()->GetWindow())),
diff --git a/basctl/source/basicide/bastypes.cxx 
b/basctl/source/basicide/bastypes.cxx
index 8d26fc4cacc8..1790c4b5444f 100644
--- a/basctl/source/basicide/bastypes.cxx
+++ b/basctl/source/basicide/bastypes.cxx
@@ -72,49 +72,51 @@ BaseWindow::~BaseWindow()
 
 void BaseWindow::dispose()
 {
-    if ( pShellVScrollBar )
-        pShellVScrollBar->SetScrollHdl( Link<ScrollBar*,void>() );
-    if ( pShellHScrollBar )
-        pShellHScrollBar->SetScrollHdl( Link<ScrollBar*,void>() );
+    if (pShellVScrollBar && !pShellVScrollBar>isDisposed())
+        pShellVScrollBar->SetScrollHdl( Link<weld::Scrollbar&,void>() );
+    if (pShellHScrollBar && !pShellHScrollBar->isDisposed())
+        pShellHScrollBar->SetScrollHdl( Link<weld::Scrollbar&,void>() );
     pShellVScrollBar.clear();
     pShellHScrollBar.clear();
     vcl::Window::dispose();
 }
 
-
 void BaseWindow::Init()
 {
     if ( pShellVScrollBar )
-        pShellVScrollBar->SetScrollHdl( LINK( this, BaseWindow, ScrollHdl ) );
+        pShellVScrollBar->SetScrollHdl( LINK( this, BaseWindow, VertScrollHdl 
) );
     if ( pShellHScrollBar )
-        pShellHScrollBar->SetScrollHdl( LINK( this, BaseWindow, ScrollHdl ) );
+        pShellHScrollBar->SetScrollHdl( LINK( this, BaseWindow, HorzScrollHdl 
) );
     DoInit();   // virtual...
 }
 
-
 void BaseWindow::DoInit()
-{ }
-
+{
+}
 
-void BaseWindow::GrabScrollBars( ScrollBar* pHScroll, ScrollBar* pVScroll )
+void BaseWindow::GrabScrollBars(ScrollAdaptor* pHScroll, ScrollAdaptor* 
pVScroll)
 {
     pShellHScrollBar = pHScroll;
     pShellVScrollBar = pVScroll;
-//  Init(); // does not make sense, leads to flickering and errors...
 }
 
+IMPL_LINK_NOARG(BaseWindow, VertScrollHdl, weld::Scrollbar&, void)
+{
+    DoScroll(pShellVScrollBar);
+}
 
-IMPL_LINK( BaseWindow, ScrollHdl, ScrollBar *, pCurScrollBar, void )
+IMPL_LINK_NOARG(BaseWindow, HorzScrollHdl, weld::Scrollbar&, void)
 {
-    DoScroll( pCurScrollBar );
+    DoScroll(pShellHScrollBar);
 }
 
 void BaseWindow::ExecuteCommand (SfxRequest&)
-{ }
+{
+}
 
 void BaseWindow::ExecuteGlobal (SfxRequest&)
-{ }
-
+{
+}
 
 bool BaseWindow::EventNotify( NotifyEvent& rNEvt )
 {
@@ -145,12 +147,10 @@ bool BaseWindow::EventNotify( NotifyEvent& rNEvt )
     return bDone || Window::EventNotify( rNEvt );
 }
 
-
-void BaseWindow::DoScroll( ScrollBar* )
+void BaseWindow::DoScroll( Scrollable* )
 {
 }
 
-
 void BaseWindow::StoreData()
 {
 }
@@ -160,7 +160,6 @@ bool BaseWindow::AllowUndo()
     return true;
 }
 
-
 void BaseWindow::UpdateData()
 {
 }
diff --git a/basctl/source/dlged/dlged.cxx b/basctl/source/dlged/dlged.cxx
index 81fa3f14e837..e61249650c0f 100644
--- a/basctl/source/dlged/dlged.cxx
+++ b/basctl/source/dlged/dlged.cxx
@@ -237,7 +237,6 @@ DlgEditor::DlgEditor (
     SetDialog(xDialogModel);
 }
 
-
 DlgEditor::~DlgEditor()
 {
     aMarkIdle.Stop();
@@ -245,7 +244,6 @@ DlgEditor::~DlgEditor()
     ::comphelper::disposeComponent( m_xControlContainer );
 }
 
-
 Reference< awt::XControlContainer > const & 
DlgEditor::GetWindowControlContainer()
 {
     if (!m_xControlContainer.is())
@@ -253,8 +251,7 @@ Reference< awt::XControlContainer > const & 
DlgEditor::GetWindowControlContainer
     return m_xControlContainer;
 }
 
-
-void DlgEditor::SetScrollBars( ScrollBar* pHS, ScrollBar* pVS )
+void DlgEditor::SetScrollBars(ScrollAdaptor* pHS, ScrollAdaptor* pVS)
 {
     pHScroll = pHS;
     pVScroll = pVS;
@@ -262,7 +259,6 @@ void DlgEditor::SetScrollBars( ScrollBar* pHS, ScrollBar* 
pVS )
     InitScrollBars();
 }
 
-
 void DlgEditor::InitScrollBars()
 {
     DBG_ASSERT( pHScroll, "DlgEditor::InitScrollBars: no horizontal scroll 
bar!" );
diff --git a/basctl/source/dlged/dlgedfunc.cxx 
b/basctl/source/dlged/dlgedfunc.cxx
index c43b22c8e16a..7f1a0388eeaa 100644
--- a/basctl/source/dlged/dlgedfunc.cxx
+++ b/basctl/source/dlged/dlgedfunc.cxx
@@ -17,7 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#include <vcl/scrbar.hxx>
+#include <svtools/scrolladaptor.hxx>
 #include <svx/svdview.hxx>
 #include <dlgedfunc.hxx>
 #include <dlged.hxx>
@@ -45,8 +45,8 @@ void DlgEdFunc::ForceScroll( const Point& rPos )
     tools::Rectangle aOutRect( aDefPoint, rWindow.GetOutputSizePixel() );
     aOutRect = rWindow.PixelToLogic( aOutRect );
 
-    ScrollBar* pHScroll = rParent.GetHScroll();
-    ScrollBar* pVScroll = rParent.GetVScroll();
+    ScrollAdaptor* pHScroll = rParent.GetHScroll();
+    ScrollAdaptor* pVScroll = rParent.GetVScroll();
     tools::Long nDeltaX = pHScroll->GetLineSize();
     tools::Long nDeltaY = pVScroll->GetLineSize();
 
@@ -294,7 +294,7 @@ bool DlgEdFunc::KeyInput( const KeyEvent& rKEvt )
             else
             {
                 // scroll page
-                ScrollBar* pScrollBar = ( nX != 0 ) ? rParent.GetHScroll() : 
rParent.GetVScroll();
+                ScrollAdaptor* pScrollBar = ( nX != 0 ) ? rParent.GetHScroll() 
: rParent.GetVScroll();
                 if ( pScrollBar )
                 {
                     tools::Long nRangeMin = pScrollBar->GetRangeMin();
diff --git a/basctl/source/dlged/dlgedview.cxx 
b/basctl/source/dlged/dlgedview.cxx
index d6c67b7e9f7a..81271d38f8bd 100644
--- a/basctl/source/dlged/dlgedview.cxx
+++ b/basctl/source/dlged/dlgedview.cxx
@@ -21,8 +21,8 @@
 #include <dlged.hxx>
 #include <dlgedpage.hxx>
 
+#include <svtools/scrolladaptor.hxx>
 #include <vcl/canvastools.hxx>
-#include <vcl/scrbar.hxx>
 
 #include <dlgedobj.hxx>
 
diff --git a/basctl/source/inc/baside3.hxx b/basctl/source/inc/baside3.hxx
index cc53d0f11f69..5b61e1b88748 100644
--- a/basctl/source/inc/baside3.hxx
+++ b/basctl/source/inc/baside3.hxx
@@ -67,7 +67,7 @@ protected:
 
     static void         NotifyUndoActionHdl( std::unique_ptr<SdrUndoAction> );
     virtual void        DoInit() override;
-    virtual void        DoScroll( ScrollBar* pCurScrollBar ) override;
+    virtual void        DoScroll( Scrollable* pCurScrollBar ) override;
     virtual void        DataChanged( const DataChangedEvent& rDCEvt ) override;
     void                InitSettings();
 
diff --git a/basctl/source/inc/basidesh.hxx b/basctl/source/inc/basidesh.hxx
index 2d494cd8d4ee..cecf060c4074 100644
--- a/basctl/source/inc/basidesh.hxx
+++ b/basctl/source/inc/basidesh.hxx
@@ -26,6 +26,7 @@
 #include <sfx2/viewsh.hxx>
 #include <svx/ifaceids.hxx>
 #include <svl/srchitem.hxx>
+#include <svtools/scrolladaptor.hxx>
 #include <vcl/scrbar.hxx>
 #include <map>
 #include <memory>
@@ -68,8 +69,8 @@ private:
     OUString            m_aCurLibName;
     std::shared_ptr<LocalizationMgr> m_pCurLocalizationMgr;
 
-    VclPtr<ScrollBar>    aHScrollBar;
-    VclPtr<ScrollBar>    aVScrollBar;
+    VclPtr<ScrollAdaptor> aHScrollBar;
+    VclPtr<ScrollAdaptor> aVScrollBar;
     VclPtr<ScrollBarBox> aScrollBarBox;
     VclPtr<TabBar>       pTabBar;           // basctl::TabBar
     bool                 bCreatingWindow;
diff --git a/basctl/source/inc/bastypes.hxx b/basctl/source/inc/bastypes.hxx
index 04d308fc7b22..a0809d902969 100644
--- a/basctl/source/inc/bastypes.hxx
+++ b/basctl/source/inc/bastypes.hxx
@@ -21,6 +21,7 @@
 #include "scriptdocument.hxx"
 
 #include "sbxitem.hxx"
+#include <svtools/scrolladaptor.hxx>
 #include <svtools/tabbar.hxx>
 #include <basic/sbdef.hxx>
 #include <vcl/dockwin.hxx>
@@ -155,10 +156,11 @@ class EntryDescriptor;
 class BaseWindow : public vcl::Window
 {
 private:
-    VclPtr<ScrollBar>      pShellHScrollBar;
-    VclPtr<ScrollBar>      pShellVScrollBar;
+    VclPtr<ScrollAdaptor>  pShellHScrollBar;
+    VclPtr<ScrollAdaptor>  pShellVScrollBar;
 
-    DECL_LINK( ScrollHdl, ScrollBar*, void );
+    DECL_LINK( VertScrollHdl, weld::Scrollbar&, void );
+    DECL_LINK( HorzScrollHdl, weld::Scrollbar&, void );
     int nStatus;
 
     ScriptDocument      m_aDocument;
@@ -169,7 +171,7 @@ private:
     friend class DialogWindow;
 
 protected:
-    virtual void    DoScroll( ScrollBar* pCurScrollBar );
+    virtual void    DoScroll(Scrollable* pCurScrollBar);
 
 public:
     BaseWindow( vcl::Window* pParent, ScriptDocument aDocument, OUString 
aLibName, OUString aName );
@@ -180,10 +182,10 @@ public:
     virtual void    DoInit();
     virtual void    Activating () = 0;
     virtual void    Deactivating () = 0;
-    void            GrabScrollBars( ScrollBar* pHScroll, ScrollBar* pVScroll );
+    void            GrabScrollBars(ScrollAdaptor* pHScroll, ScrollAdaptor* 
pVScroll);
 
-    ScrollBar*      GetHScrollBar() const { return pShellHScrollBar; }
-    ScrollBar*      GetVScrollBar() const { return pShellVScrollBar; }
+    ScrollAdaptor*  GetHScrollBar() const { return pShellHScrollBar; }
+    ScrollAdaptor*  GetVScrollBar() const { return pShellVScrollBar; }
 
     virtual void    ExecuteCommand (SfxRequest&);
     virtual void    ExecuteGlobal (SfxRequest&);
diff --git a/basctl/source/inc/dlged.hxx b/basctl/source/inc/dlged.hxx
index 9e5147dfcfc2..0d1c461ad106 100644
--- a/basctl/source/inc/dlged.hxx
+++ b/basctl/source/inc/dlged.hxx
@@ -36,7 +36,7 @@
 
 #include <memory>
 
-class ScrollBar;
+class ScrollAdaptor;
 class Printer;
 class KeyEvent;
 class MouseEvent;
@@ -107,8 +107,8 @@ private:
     static void Print( Printer* pPrinter, const OUString& rTitle );
 
 private:
-    VclPtr<ScrollBar>          pHScroll;
-    VclPtr<ScrollBar>          pVScroll;
+    VclPtr<ScrollAdaptor>      pHScroll;
+    VclPtr<ScrollAdaptor>      pVScroll;
     std::unique_ptr<DlgEdModel> pDlgEdModel; // never nullptr
     DlgEdPage*          pDlgEdPage;  // never nullptr
     std::unique_ptr<DlgEdView> pDlgEdView; // never nullptr
@@ -149,10 +149,10 @@ public:
     css::uno::Reference< css::awt::XControlContainer > const &
                     GetWindowControlContainer();
 
-    void            SetScrollBars( ScrollBar* pHScroll, ScrollBar* pVScroll );
+    void            SetScrollBars(ScrollAdaptor* pHScroll, ScrollAdaptor* 
pVScroll);
     void            InitScrollBars();
-    ScrollBar*      GetHScroll() const { return pHScroll; }
-    ScrollBar*      GetVScroll() const { return pVScroll; }
+    ScrollAdaptor*  GetHScroll() const { return pHScroll; }
+    ScrollAdaptor*  GetVScroll() const { return pVScroll; }
     void            DoScroll();
     void            UpdateScrollBars();
 

Reply via email to