Author: jimtabor
Date: Thu Nov 24 18:18:28 2016
New Revision: 73372
URL:
http://svn.reactos.org/svn/reactos?rev=73372&view=rev
Log:
[Win32SS]
- HAX : Fix paint message spam. See CORE-12169 and related issues.
Modified:
trunk/reactos/win32ss/user/ntuser/message.c
trunk/reactos/win32ss/user/ntuser/painting.c
trunk/reactos/win32ss/user/ntuser/painting.h
Modified: trunk/reactos/win32ss/user/ntuser/message.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/messag…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/message.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/ntuser/message.c [iso-8859-1] Thu Nov 24 18:18:28 2016
@@ -789,8 +789,8 @@
{
Window->state2 &= ~WNDS2_WMPAINTSENT;
/* send a WM_ERASEBKGND if the non-client area is still invalid */
- ERR("Message WM_PAINT\n");
- co_IntPaintWindows( Window, RDW_NOCHILDREN, FALSE );
+ ERR("Message WM_PAINT count %d Internal Paint Set?
%s\n",Window->head.pti->cPaintsReady, Window->state & WNDS_INTERNALPAINT
? "TRUE" : "FALSE");
+ IntPaintWindow( Window );
}
return retval;
Modified: trunk/reactos/win32ss/user/ntuser/painting.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/painti…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/painting.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/ntuser/painting.c [iso-8859-1] Thu Nov 24 18:18:28 2016
@@ -1157,6 +1157,36 @@
return Window;
}
+//
+// Hax around internal painting of windows.
+//
+VOID FASTCALL
+IntPaintWindow( PWND Window )
+{
+ // Handle normal painting.
+ co_IntPaintWindows( Window, RDW_NOCHILDREN, FALSE );
+
+ // Hack to prevent more spamming from misbehaving application.
+ // Handle it like a begin/end paint
+ if (Window->hrgnUpdate != NULL)
+ {
+ ERR("HAX hrgnUpdate not NULL! Dec Paint Count!\n");
+ MsqDecPaintCountQueue(Window->head.pti);
+ IntGdiSetRegionOwner(Window->hrgnUpdate, GDI_OBJ_HMGR_POWNED);
+ GreDeleteObject(Window->hrgnUpdate);
+ Window->state &= ~WNDS_UPDATEDIRTY;
+ Window->hrgnUpdate = NULL;
+ }
+ else
+ {
+ if (!(Window->state & WNDS_INTERNALPAINT))
+ {
+ ERR("HAX WNDS_INTERNALPAINT not set! Dec Paint Count!\n");
+ MsqDecPaintCountQueue(Window->head.pti);
+ }
+ }
+}
+
BOOL FASTCALL
IntGetPaintMessage(
PWND Window,
Modified: trunk/reactos/win32ss/user/ntuser/painting.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/painti…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/painting.h [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/ntuser/painting.h [iso-8859-1] Thu Nov 24 18:18:28 2016
@@ -40,3 +40,4 @@
BOOL UserDrawCaption(PWND,HDC,RECTL*,HFONT,HICON,const PUNICODE_STRING,UINT);
VOID FASTCALL UpdateThreadWindows(PWND,PTHREADINFO,HRGN);
VOID FASTCALL UserSyncAndPaintWindows(PWND pWnd, ULONG Flags);
+VOID FASTCALL IntPaintWindow(PWND);