This fixes up those update request being lost.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12172 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
fbdc6c450d
commit
4c6f8b572e
@ -557,7 +557,13 @@ void Layer::RequestDraw(const BRegion ®, Layer *startFrom)
|
||||
|
||||
if (fUpdateReg.CountRects() > 0)
|
||||
{
|
||||
SendUpdateMsg();
|
||||
if (!fOwner->fInUpdate)
|
||||
{
|
||||
fOwner->prevInvalid = fUpdateReg;
|
||||
SendUpdateMsg();
|
||||
}
|
||||
else
|
||||
fOwner->zUpdateReg.Include(&fUpdateReg);
|
||||
}
|
||||
|
||||
// we're not that different than other. We too have an
|
||||
@ -657,9 +663,9 @@ void Layer::UpdateStart()
|
||||
fInUpdate = true;
|
||||
if (fClassID == AS_WINBORDER_CLASS)
|
||||
{
|
||||
// NOTE: don't worry, RooLayer is locked here.
|
||||
WinBorder *wb = (WinBorder*)this;
|
||||
wb->yUpdateReg = wb->zUpdateReg;
|
||||
wb->zUpdateReg.MakeEmpty();
|
||||
wb->yUpdateReg = wb->prevInvalid;
|
||||
}
|
||||
fClipReg = &fUpdateReg;
|
||||
}
|
||||
@ -672,6 +678,15 @@ void Layer::UpdateEnd()
|
||||
{
|
||||
WinBorder *wb = (WinBorder*)this;
|
||||
wb->yUpdateReg.MakeEmpty();
|
||||
wb->zUpdateReg.Exclude(&wb->prevInvalid);
|
||||
if (wb->zUpdateReg.CountRects() > 0)
|
||||
{
|
||||
wb->prevInvalid = wb->zUpdateReg;
|
||||
fUpdateReg = wb->zUpdateReg;
|
||||
SendUpdateMsg();
|
||||
}
|
||||
else
|
||||
wb->prevInvalid.MakeEmpty();
|
||||
}
|
||||
|
||||
fInUpdate = false;
|
||||
|
@ -1416,7 +1416,9 @@ void ServerWindow::DispatchMessage(int32 code, LinkMsgReader &link)
|
||||
case AS_END_UPDATE:
|
||||
{
|
||||
DTRACE(("ServerWindowo %s: AS_END_UPDATE\n",fTitle.String()));
|
||||
fWinBorder->GetRootLayer()->Lock();
|
||||
cl->UpdateEnd();
|
||||
fWinBorder->GetRootLayer()->Unlock();
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1649,7 +1651,7 @@ void ServerWindow::DispatchGraphicsMessage(int32 code, LinkMsgReader &link)
|
||||
{
|
||||
fWinBorder->GetRootLayer()->Lock();
|
||||
BRegion rreg(cl->fVisible);
|
||||
rreg.Include(&fWinBorder->zUpdateReg);
|
||||
rreg.Include(&fWinBorder->yUpdateReg);
|
||||
|
||||
desktop->GetDisplayDriver()->ConstrainClippingRegion(&rreg);
|
||||
|
||||
|
@ -114,6 +114,7 @@ protected:
|
||||
|
||||
BRegion zUpdateReg;
|
||||
BRegion yUpdateReg;
|
||||
BRegion prevInvalid;
|
||||
|
||||
int32 fMouseButtons;
|
||||
int32 fKeyModifiers;
|
||||
|
Loading…
Reference in New Issue
Block a user