Author: rharabien
Date: Fri Oct 7 20:23:24 2011
New Revision: 54051
URL:
http://svn.reactos.org/svn/reactos?rev=54051&view=rev
Log:
[WIN32K]
- Do not call UserSetCursor in MsqCleanupMessageQueue because it uses current thread queue
instead of queue in cleanup (they can be different).
See issue #6530 for more details.
Modified:
trunk/reactos/subsystems/win32/win32k/main/dllmain.c
trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c
Modified: trunk/reactos/subsystems/win32/win32k/main/dllmain.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ma…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/main/dllmain.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/main/dllmain.c [iso-8859-1] Fri Oct 7 20:23:24
2011
@@ -399,8 +399,6 @@
/* Do now some process cleanup that requires a valid win32 thread */
if(ptiCurrent->ppi->cThreads == 0)
{
- UserSetCursor(NULL, TRUE);
-
/* Check if we have registered the user api hook */
if(ptiCurrent->ppi == ppiUahServer)
{
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/nt…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c [iso-8859-1] Fri Oct 7
20:23:24 2011
@@ -2094,9 +2094,19 @@
{
PCURICON_OBJECT pCursor = MessageQueue->CursorObject;
- /* Change to another cursor if we going to dereference current one */
+ /* Change to another cursor if we going to dereference current one
+ Note: we can't use UserSetCursor because it uses current thread
+ message queue instead of queue given for cleanup */
if (IntGetSysCursorInfo()->CurrentCursorObject == pCursor)
- UserSetCursor(NULL, TRUE);
+ {
+ HDC hdcScreen;
+
+ /* Get the screen DC */
+ hdcScreen = IntGetScreenDC();
+ if (hdcScreen)
+ GreMovePointer(hdcScreen, -1, -1);
+ IntGetSysCursorInfo()->CurrentCursorObject = NULL;
+ }
UserDereferenceObject(pCursor);
}