diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index ebcec49507..1ae957aa4c 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -705,16 +705,14 @@ ServerWindow::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link) { STRACE(("ServerWindow %s: Message AS_ENABLE_UPDATES unimplemented\n", Title())); -// TODO: AS_ENABLE_UPDATES - //fWindowLayer->EnableUpdateRequests(); + fWindowLayer->EnableUpdateRequests(); break; } case AS_DISABLE_UPDATES: { STRACE(("ServerWindow %s: Message AS_DISABLE_UPDATES unimplemented\n", Title())); -// TODO: AS_DISABLE_UPDATES - //fWindowLayer->DisableUpdateRequests(); + fWindowLayer->DisableUpdateRequests(); break; } case AS_NEEDS_UPDATE: diff --git a/src/servers/app/WindowLayer.cpp b/src/servers/app/WindowLayer.cpp index c3cb47b7cb..aa9918d5a1 100644 --- a/src/servers/app/WindowLayer.cpp +++ b/src/servers/app/WindowLayer.cpp @@ -111,6 +111,7 @@ WindowLayer::WindowLayer(const BRect& frame, const char *name, fPendingUpdateSession(&fUpdateSessions[1]), fUpdateRequested(false), fInUpdate(false), + fUpdatesEnabled(true), // windows start hidden fHidden(true), @@ -701,18 +702,23 @@ WindowLayer::InvalidateView(ViewLayer* layer, BRegion& layerRegion) } } +// DisableUpdateRequests +void +WindowLayer::DisableUpdateRequests() +{ + fUpdatesEnabled = false; +} + + // EnableUpdateRequests void WindowLayer::EnableUpdateRequests() { -// fUpdateRequestsEnabled = true; -/* if (fCumulativeRegion.CountRects() > 0) { - GetRootLayer()->MarkForRedraw(fCumulativeRegion); - GetRootLayer()->TriggerRedraw(); - }*/ + fUpdatesEnabled = true; + if (!fUpdateRequested && fPendingUpdateSession->IsUsed()) + _SendUpdateMessage(); } - // #pragma mark - @@ -1814,6 +1820,9 @@ WindowLayer::_TransferToUpdateSession(BRegion* contentDirtyRegion) void WindowLayer::_SendUpdateMessage() { + if (!fUpdatesEnabled) + return; + BMessage message(_UPDATE_); ServerWindow()->SendMessageToClient(&message); diff --git a/src/servers/app/WindowLayer.h b/src/servers/app/WindowLayer.h index b2feb91133..bc232c867b 100644 --- a/src/servers/app/WindowLayer.h +++ b/src/servers/app/WindowLayer.h @@ -104,8 +104,8 @@ class WindowLayer { // shortcut for invalidating just one view void InvalidateView(ViewLayer* view, BRegion& layerRegion); - void EnableUpdateRequests(); void DisableUpdateRequests(); + void EnableUpdateRequests(); void BeginUpdate(BPrivate::PortLink& link); void EndUpdate(); @@ -335,6 +335,7 @@ class WindowLayer { // and consistent update session bool fUpdateRequested : 1; bool fInUpdate : 1; + bool fUpdatesEnabled : 1; bool fHidden : 1; bool fMinimized : 1;