summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadek Doulik <rodo@novell.com>2010-09-15 11:03:16 +0200
committerJan Holesovsky <kendy@suse.cz>2010-09-15 11:03:16 +0200
commit6b464e0d29c72cf06b5c7bd7e3cc0e42d66b1ec3 (patch)
tree38a541fd8bc5eb565e282e7e39ff0dcebc6899d9
parent8146734ddb4361f66e262b065c5130ae501fbcaa (diff)
sw-auto-scrollbars.diff: Hide scrollbars in Writer when not necessary.
-rw-r--r--sw/source/ui/inc/view.hxx1
-rw-r--r--sw/source/ui/uiview/viewmdi.cxx33
-rw-r--r--sw/source/ui/uiview/viewport.cxx5
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);