From 9e5c5747036adc5103c3ff8851ebfac8b47b59ab Mon Sep 17 00:00:00 2001 From: Adi Oanca Date: Mon, 24 Oct 2005 16:39:53 +0000 Subject: [PATCH] Layer::SendUpdateMsg() will tell us if sending _UPDATE_ message succeded. We'll use that information to clear WinBorder::fCumulativeRegion(server per-window dirty region) only on success. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14493 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/Layer.cpp | 26 ++++++++++++++++++-------- src/servers/app/Layer.h | 2 +- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/servers/app/Layer.cpp b/src/servers/app/Layer.cpp index 9ff91738ba..52cbfe8197 100644 --- a/src/servers/app/Layer.cpp +++ b/src/servers/app/Layer.cpp @@ -1535,9 +1535,14 @@ Layer::RequestDraw(const BRegion ®, Layer *startFrom) fOwner->cnt++; if (fOwner->cnt != 1) CRITICAL("Layer::RequestDraw(): fOwner->cnt != 1 -> Not Allowed!"); - fOwner->fCumulativeRegion.MakeEmpty(); - fOwner->fRequestSent = true; - SendUpdateMsg(fOwner->fInUpdateRegion); + fOwner->fRequestSent = true; // this is here to avoid a possible de-synchronization + if (SendUpdateMsg(fOwner->fInUpdateRegion) == B_OK) { + fOwner->fCumulativeRegion.MakeEmpty(); + } + else { + fOwner->fRequestSent = false; + fOwner->fInUpdateRegion.MakeEmpty(); + } } } } @@ -1587,9 +1592,14 @@ if (fOwner->cnt != 1) fOwner->cnt++; if (fOwner->cnt != 1) CRITICAL("Layer::RequestDraw(): fOwner->cnt != 1 -> Not Allowed!"); - fOwner->fCumulativeRegion.MakeEmpty(); - fOwner->fRequestSent = true; - SendUpdateMsg(fOwner->fInUpdateRegion); + fOwner->fRequestSent = true; // this is here to avoid a possible de-synchronization + if (SendUpdateMsg(fOwner->fInUpdateRegion) == B_OK) { + fOwner->fCumulativeRegion.MakeEmpty(); + } + else { + fOwner->fRequestSent = false; + fOwner->fInUpdateRegion.MakeEmpty(); + } } } } @@ -1765,7 +1775,7 @@ Layer::SearchForServerWindow() } //! Sends an _UPDATE_ message to the client BWindow -void +status_t Layer::SendUpdateMsg(BRegion& reg) { BMessage msg; @@ -1780,7 +1790,7 @@ Layer::SendUpdateMsg(BRegion& reg) msg.AddRect("debug_rect", reg.Frame()); // msg.AddInt32("_token",fViewToken); - fOwner->Window()->SendMessageToClient(&msg); + return Owner()->Window()->SendMessageToClient(&msg); } // AddToViewsWithInvalidCoords diff --git a/src/servers/app/Layer.h b/src/servers/app/Layer.h index 413e2d4114..54ede89dd3 100644 --- a/src/servers/app/Layer.h +++ b/src/servers/app/Layer.h @@ -372,7 +372,7 @@ friend class OffscreenWinBorder; Layer* startFrom); ServerWindow* SearchForServerWindow(); - void SendUpdateMsg(BRegion& reg); + status_t SendUpdateMsg(BRegion& reg); void AddToViewsWithInvalidCoords() const; void SendViewCoordUpdateMsg() const;