diff options
Diffstat (limited to 'vcl/source/window/clipmgr.cxx')
-rw-r--r-- | vcl/source/window/clipmgr.cxx | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/vcl/source/window/clipmgr.cxx b/vcl/source/window/clipmgr.cxx index c7a74c52bef5..0d48fc4e3988 100644 --- a/vcl/source/window/clipmgr.cxx +++ b/vcl/source/window/clipmgr.cxx @@ -92,14 +92,14 @@ void ClipManager::ClipBoundaries( Window* pWindow, Region& rRegion, bool bThis, if ( pWindow->mpWindowImpl->mbReallyVisible ) pWindow->ImplExcludeWindowRegion( rRegion ); - ImplExcludeOverlapWindows( rRegion ); + excludeOverlapWindows( pWindow, rRegion ); pOverlapWindow = pOverlapWindow->mpWindowImpl->mpNext; } pStartOverlapWindow = pStartOverlapWindow->mpWindowImpl->mpOverlapWindow; } - // Clip Child Overlap Windows - pWindow->ImplExcludeOverlapWindows( rRegion ); + // Clip child overlap windows + excludeOverlapWindows( pWindow, rRegion ); } } else @@ -108,6 +108,21 @@ void ClipManager::ClipBoundaries( Window* pWindow, Region& rRegion, bool bThis, } } +void ClipManager::excludeOverlapWindows( Window *pWindow, Region& rRegion ) +{ + Window* pOverlapWindow = pWindow->mpWindowImpl->mpFirstOverlap; + while ( pOverlapWindow ) + { + if ( pOverlapWindow->mpWindowImpl->mbReallyVisible ) + { + pOverlapWindow->ImplExcludeWindowRegion( rRegion ); + excludeOverlapWindows( pOverlapWindow, rRegion ); + } + + pOverlapWindow = pOverlapWindow->mpWindowImpl->mpNext; + } +} + void ClipManager::intersectClipRegion( Window* pWindow, Region& rRegion ) { ClipManager *clipMgr = ClipManager::GetInstance(); |