summaryrefslogtreecommitdiff
path: root/vcl/source/window/clipmgr.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/source/window/clipmgr.cxx')
-rw-r--r--vcl/source/window/clipmgr.cxx21
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();