diff --git a/src/servers/app/ViewLayer.cpp b/src/servers/app/ViewLayer.cpp index 2bbb1ec913..bb68f85ade 100644 --- a/src/servers/app/ViewLayer.cpp +++ b/src/servers/app/ViewLayer.cpp @@ -522,6 +522,9 @@ ViewLayer::_UpdateOverlayView() const void ViewLayer::UpdateOverlay() { + if (!IsVisible()) + return; + if (_Overlay() != NULL) { _UpdateOverlayView(); } else { @@ -1262,9 +1265,10 @@ ViewLayer::UpdateVisibleDeep(bool parentVisible) if (overlay == NULL) return; - if (fVisible && !overlay->IsVisible()) + if (fVisible && !overlay->IsVisible()) { + _UpdateOverlayView(); overlay->Show(); - else if (!fVisible && overlay->IsVisible()) + } else if (!fVisible && overlay->IsVisible()) overlay->Hide(); } diff --git a/src/servers/app/drawing/Overlay.cpp b/src/servers/app/drawing/Overlay.cpp index 620621b40a..04e499876a 100644 --- a/src/servers/app/drawing/Overlay.cpp +++ b/src/servers/app/drawing/Overlay.cpp @@ -20,7 +20,8 @@ Overlay::Overlay(HWInterface& interface) fHWInterface(interface), fOverlayBuffer(NULL), fClientData(NULL), - fOverlayToken(NULL) + fOverlayToken(NULL), + fVisible(false) { fSemaphore = create_sem(1, "overlay lock"); fColor.SetColor(21, 16, 21, 16); @@ -118,6 +119,7 @@ Overlay::Show() return; } + fVisible = true; fHWInterface.ShowOverlay(this); } @@ -128,6 +130,7 @@ Overlay::Hide() if (fOverlayToken == NULL) return; + fVisible = false; fHWInterface.HideOverlay(this); } @@ -186,6 +189,7 @@ Overlay::SetView(const BRect& source, const BRect& destination) fWindow.width = (uint16)destination.IntegerWidth() + 1; fWindow.height = (uint16)destination.IntegerHeight() + 1; - fHWInterface.UpdateOverlay(this); + if (fVisible) + fHWInterface.UpdateOverlay(this); } diff --git a/src/servers/app/drawing/Overlay.h b/src/servers/app/drawing/Overlay.h index f012d10b60..b95f8224df 100644 --- a/src/servers/app/drawing/Overlay.h +++ b/src/servers/app/drawing/Overlay.h @@ -47,8 +47,6 @@ class Overlay { const RGBColor& Color() const { return fColor; } - void SetVisible(bool visible) - { fVisible = visible; } bool IsVisible() const { return fVisible; }