diff options
author | Radek Doulik <rodo@novell.com> | 2010-09-15 11:03:16 +0200 |
---|---|---|
committer | Jan Holesovsky <kendy@suse.cz> | 2010-09-15 11:03:16 +0200 |
commit | 6b464e0d29c72cf06b5c7bd7e3cc0e42d66b1ec3 (patch) | |
tree | 38a541fd8bc5eb565e282e7e39ff0dcebc6899d9 | |
parent | 8146734ddb4361f66e262b065c5130ae501fbcaa (diff) |
sw-auto-scrollbars.diff: Hide scrollbars in Writer when not necessary.
-rw-r--r-- | sw/source/ui/inc/view.hxx | 1 | ||||
-rw-r--r-- | sw/source/ui/uiview/viewmdi.cxx | 33 | ||||
-rw-r--r-- | sw/source/ui/uiview/viewport.cxx | 5 |
3 files changed, 37 insertions, 2 deletions
diff --git a/sw/source/ui/inc/view.hxx b/sw/source/ui/inc/view.hxx index 039f9ff32c..08e27ac560 100644 --- a/sw/source/ui/inc/view.hxx +++ b/sw/source/ui/inc/view.hxx @@ -330,6 +330,7 @@ class SW_DLLPUBLIC SwView: public SfxViewShell SW_DLLPRIVATE int _CreateScrollbar( BOOL bHori ); SW_DLLPRIVATE DECL_LINK( ScrollHdl, SwScrollbar * ); SW_DLLPRIVATE DECL_LINK( EndScrollHdl, SwScrollbar * ); + SW_DLLPRIVATE DECL_LINK( WindowChildEventListener, VclSimpleEvent* ); SW_DLLPRIVATE BOOL UpdateScrollbars(); SW_DLLPRIVATE void CalcVisArea( const Size &rPixelSz ); diff --git a/sw/source/ui/uiview/viewmdi.cxx b/sw/source/ui/uiview/viewmdi.cxx index f8212d8724..818e5ae62f 100644 --- a/sw/source/ui/uiview/viewmdi.cxx +++ b/sw/source/ui/uiview/viewmdi.cxx @@ -308,6 +308,35 @@ void SwView::SetViewLayout( USHORT nColumns, bool bBookMode, BOOL bViewOnly ) * Scrollbar - Handler */ +IMPL_LINK( SwView, WindowChildEventListener, VclSimpleEvent*, pEvent ) +{ + DBG_ASSERT( pEvent && pEvent->ISA( VclWindowEvent ), "Unknown WindowEvent!" ); + if ( pEvent && pEvent->ISA( VclWindowEvent ) ) + { + VclWindowEvent *pVclEvent = static_cast< VclWindowEvent * >( pEvent ); + DBG_ASSERT( pVclEvent->GetWindow(), "Window???" ); + Window* pChildWin = static_cast< Window* >( pVclEvent->GetData() ); + + switch ( pVclEvent->GetId() ) + { + case VCLEVENT_WINDOW_HIDE: + if( pChildWin == pHScrollbar ) + ShowHScrollbar( FALSE ); + else if( pChildWin == pVScrollbar ) + ShowVScrollbar( FALSE ); + break; + case VCLEVENT_WINDOW_SHOW: + if( pChildWin == pHScrollbar ) + ShowHScrollbar( TRUE ); + else if( pChildWin == pVScrollbar ) + ShowVScrollbar( TRUE ); + break; + } + } + + return 0; +} + int SwView::_CreateScrollbar( BOOL bHori ) { Window *pMDI = &GetViewFrame()->GetWindow(); @@ -328,6 +357,10 @@ int SwView::_CreateScrollbar( BOOL bHori ) (*ppScrollbar)->EnableDrag( TRUE ); + (*ppScrollbar)->SetAuto( TRUE ); + + pMDI->AddChildEventListener( LINK( this, SwView, WindowChildEventListener )); + if(GetWindow()) InvalidateBorder(); diff --git a/sw/source/ui/uiview/viewport.cxx b/sw/source/ui/uiview/viewport.cxx index d47436aae3..6137a00ab0 100644 --- a/sw/source/ui/uiview/viewport.cxx +++ b/sw/source/ui/uiview/viewport.cxx @@ -1135,6 +1135,7 @@ void SwView::OuterResizePixel( const Point &rOfst, const Size &rSize ) { bShowH = pVOpt->IsViewHScrollBar(); bShowV = pVOpt->IsViewVScrollBar(); + bAuto = bHAuto = TRUE; break; } } @@ -1156,10 +1157,10 @@ void SwView::OuterResizePixel( const Point &rOfst, const Size &rSize ) { bShowH = bShowV = bHAuto = bAuto = FALSE; } - if(pHScrollbar->IsVisible(FALSE) != bShowH) + if(pHScrollbar->IsVisible(FALSE) != bShowH && !bHAuto) ShowHScrollbar(bShowH); pHScrollbar->SetAuto( bHAuto ); - if(pVScrollbar->IsVisible(FALSE) != bShowV) + if(pVScrollbar->IsVisible(FALSE) != bShowV && !bAuto) ShowVScrollbar(bShowV); pVScrollbar->SetAuto(bAuto); |