- Move WINDOWOBJECT_NEED_INTERNALPAINT flag handling to NtGdiBeginPaint. - Fix IntGetPaintMessage to not return TRUE when no message was returned. - IntIsWindowDirty shouldn't check for the WINDOWOBJECT_NEED_NCPAINT flag (at least not now). Modified: trunk/reactos/subsys/win32k/ntuser/painting.c _____
Modified: trunk/reactos/subsys/win32k/ntuser/painting.c --- trunk/reactos/subsys/win32k/ntuser/painting.c 2005-03-20 23:01:48 UTC (rev 14245) +++ trunk/reactos/subsys/win32k/ntuser/painting.c 2005-03-21 00:55:16 UTC (rev 14246) @@ -144,16 +144,6 @@
Window->Flags & WINDOWOBJECT_NEED_INTERNALPAINT) { IntSendMessage(hWnd, WM_PAINT, 0, 0); - IntLockWindowUpdate(Window); - if (Window->Flags & WINDOWOBJECT_NEED_INTERNALPAINT) - { - Window->Flags &= ~WINDOWOBJECT_NEED_INTERNALPAINT; - if (Window->UpdateRegion == NULL) - { - MsqDecPaintCountQueue(Window->MessageQueue); - } - } - IntUnLockWindowUpdate(Window); } } } @@ -547,8 +537,7 @@ { return (Window->Style & WS_VISIBLE) && ((Window->UpdateRegion != NULL) || - (Window->Flags & WINDOWOBJECT_NEED_INTERNALPAINT) || - (Window->Flags & WINDOWOBJECT_NEED_NCPAINT)); + (Window->Flags & WINDOWOBJECT_NEED_INTERNALPAINT)); }
HWND STDCALL @@ -614,6 +603,10 @@ if (!MessageQueue->PaintPosted) return FALSE;
+ if ((MsgFilterMin != 0 || MsgFilterMax != 0) && + (MsgFilterMin > WM_PAINT || MsgFilterMax < WM_PAINT)) + return FALSE; + if (hWnd) Message->hwnd = IntFindWindowToRepaint(hWnd, PsGetWin32Thread()); else @@ -635,25 +628,10 @@ Window = IntGetWindowObject(Message->hwnd); if (Window != NULL) { - IntLockWindowUpdate(Window); - - if ((MsgFilterMin == 0 && MsgFilterMax == 0) || - (MsgFilterMin <= WM_PAINT && WM_PAINT <= MsgFilterMax)) - { - Message->message = WM_PAINT; - Message->wParam = Message->lParam = 0; - if (Remove && Window->Flags & WINDOWOBJECT_NEED_INTERNALPAINT) - { - Window->Flags &= ~WINDOWOBJECT_NEED_INTERNALPAINT; - if (Window->UpdateRegion == NULL) - { - MsqDecPaintCountQueue(Window->MessageQueue); - } - } - } - IntUnLockWindowUpdate(Window); - + Message->message = WM_PAINT; + Message->wParam = Message->lParam = 0; IntReleaseWindowObject(Window); + return TRUE; }
@@ -779,8 +757,11 @@ } else { + if (Window->Flags & WINDOWOBJECT_NEED_INTERNALPAINT) + MsqDecPaintCountQueue(Window->MessageQueue); IntGetClientRect(Window, &Ps.rcPaint); } + Window->Flags &= ~WINDOWOBJECT_NEED_INTERNALPAINT; IntUnLockWindowUpdate(Window);
if (Window->Flags & WINDOWOBJECT_NEED_ERASEBKGND)