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
This commit is contained in:
Adi Oanca
2005-10-24 16:39:53 +00:00
parent 66156adf92
commit 9e5c574703
2 changed files with 19 additions and 9 deletions
+18 -8
View File
@@ -1535,9 +1535,14 @@ Layer::RequestDraw(const BRegion &reg, 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
+1 -1
View File
@@ -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;