diff --git a/src/servers/app/WindowLayer.cpp b/src/servers/app/WindowLayer.cpp index 18448f7ccd..0e60db14b3 100644 --- a/src/servers/app/WindowLayer.cpp +++ b/src/servers/app/WindowLayer.cpp @@ -676,6 +676,24 @@ WindowLayer::MarkContentDirty(BRegion& regionOnScreen) } +void +WindowLayer::MarkContentDirtyAsync(BRegion& regionOnScreen) +{ + // NOTE: see comments in ProcessDirtyRegion() + if (fHidden) + return; + + regionOnScreen.IntersectWith(&VisibleContentRegion()); + + if (fDirtyRegion.CountRects() == 0) { + ServerWindow()->RequestRedraw(); + } + + fDirtyRegion.Include(®ionOnScreen); + fDirtyCause |= UPDATE_REQUEST; +} + + void WindowLayer::InvalidateView(ViewLayer* layer, BRegion& layerRegion) { diff --git a/src/servers/app/WindowLayer.h b/src/servers/app/WindowLayer.h index c9e001afea..13a25f87b2 100644 --- a/src/servers/app/WindowLayer.h +++ b/src/servers/app/WindowLayer.h @@ -99,8 +99,9 @@ class WindowLayer { // can be used from inside classes that don't // need to know about Desktop (first version uses Desktop) void MarkDirty(BRegion& regionOnScreen); - // this version does not use the Desktop + // these versions do not use the Desktop void MarkContentDirty(BRegion& regionOnScreen); + void MarkContentDirtyAsync(BRegion& regionOnScreen); // shortcut for invalidating just one view void InvalidateView(ViewLayer* view, BRegion& layerRegion);