From 9d4fa2c12bf7da453bff470191a144cf4d7cd450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Mon, 21 Jan 2008 16:58:06 +0000 Subject: [PATCH] * Appearantly, we are calling ScreenClipping() on some views who's parent views don't have a valid screen clipping yet. If then later we want to invalidate the clipping of an entire hierarchie, the traversal stops before reaching some of the child views, because the assumption was that for any views with invalid screen clipping, their child views have invalid screen clipping as well. Though this might cost a little performance, we always invalidate the screen clipping of all child views, ignoring the flag of the current view. Fixes ticket #1198 (garbled screen clipping of E-Mail prefs and WonderBrush tool area when switching tabs). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23688 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/ViewLayer.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/servers/app/ViewLayer.cpp b/src/servers/app/ViewLayer.cpp index e1c85a87b9..62be70cf54 100644 --- a/src/servers/app/ViewLayer.cpp +++ b/src/servers/app/ViewLayer.cpp @@ -1596,8 +1596,21 @@ ViewLayer::ScreenClipping(BRegion* windowContentClipping, bool force) const void ViewLayer::InvalidateScreenClipping() { - if (!fScreenClippingValid) - return; +// TODO: appearantly, we are calling ScreenClipping() on +// views who's parents don't have a valid screen clipping yet, +// this messes up the logic that for any given view with +// fScreenClippingValid == false, all children have +// fScreenClippingValid == false too. If this could be made the +// case, we could save some performance here with the commented +// out check, since InvalidateScreenClipping() might be called +// frequently. +// TODO: investigate, if InvalidateScreenClipping() could be +// called in "deep" and "non-deep" mode, ie. see if there are +// any cases where the children would still have valid screen +// clipping, even though the parent's screen clipping becomes +// invalid. +// if (!fScreenClippingValid) +// return; fScreenClippingValid = false; // invalidate the childrens screen clipping as well