Author: tkreuzer Date: Wed Apr 21 15:44:06 2010 New Revision: 46976
URL: http://svn.reactos.org/svn/reactos?rev=46976&view=rev Log: [WIN32K] - move IntEngMovePointer code into GreMovePointer - Delete the mouse cursor before mode switch, to force setting a new one after a mode switch. Fixes cursor artifacts after mode change. - Update TODO.txt
Modified: branches/reactos-yarotows/subsystems/win32/win32k/TODO.txt branches/reactos-yarotows/subsystems/win32/win32k/eng/mouse.c branches/reactos-yarotows/subsystems/win32/win32k/ntuser/display.c
Modified: branches/reactos-yarotows/subsystems/win32/win32k/TODO.txt URL: http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win3... ============================================================================== --- branches/reactos-yarotows/subsystems/win32/win32k/TODO.txt [iso-8859-1] (original) +++ branches/reactos-yarotows/subsystems/win32/win32k/TODO.txt [iso-8859-1] Wed Apr 21 15:44:06 2010 @@ -11,7 +11,6 @@ Before the merge: ----------------- # Fix mouse pointer regression -# Hide the mouse pointer during mode switch # Resize the desktop window after mode switch # Update mouse area after mode switch # Invalidate the whole Window content after mode switch
Modified: branches/reactos-yarotows/subsystems/win32/win32k/eng/mouse.c URL: http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win3... ============================================================================== --- branches/reactos-yarotows/subsystems/win32/win32k/eng/mouse.c [iso-8859-1] (original) +++ branches/reactos-yarotows/subsystems/win32/win32k/eng/mouse.c [iso-8859-1] Wed Apr 21 15:44:06 2010 @@ -514,20 +514,6 @@ } }
-VOID APIENTRY -IntEngMovePointer( - IN SURFOBJ *pso, - IN LONG x, - IN LONG y, - IN RECTL *prcl) -{ - PPDEVOBJ ppdev = (PPDEVOBJ)pso->hdev; - if(ppdev->SafetyRemoveLevel) - return ; - - ppdev->pfnMovePointer(pso, x, y, prcl); -} - ULONG APIENTRY IntEngSetPointerShape( IN SURFOBJ *pso, @@ -694,14 +680,22 @@ } ASSERT(pdc->dctype == DCTYPE_DIRECT);
+ /* Acquire PDEV lock */ EngAcquireSemaphore(pdc->ppdev->hsemDevLock); - /* Store the cursor exclude position in the PDEV */ - prcl = &pdc->ppdev->Pointer.Exclude; - - /* Call Eng/Drv function */ - IntEngMovePointer(&pdc->ppdev->pSurface->SurfObj, x, y, prcl); - + + /* Check if we need to move it */ + if(pdc->ppdev->SafetyRemoveLevel == 0) + { + /* Store the cursor exclude position in the PDEV */ + prcl = &pdc->ppdev->Pointer.Exclude; + + /* Call Eng/Drv function */ + pdc->ppdev->pfnMovePointer(&pdc->ppdev->pSurface->SurfObj, x, y, prcl); + } + + /* Release PDEV lock */ EngReleaseSemaphore(pdc->ppdev->hsemDevLock); + /* Unlock the DC */ DC_UnlockDc(pdc); }
Modified: branches/reactos-yarotows/subsystems/win32/win32k/ntuser/display.c URL: http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win3... ============================================================================== --- branches/reactos-yarotows/subsystems/win32/win32k/ntuser/display.c [iso-8859-1] (original) +++ branches/reactos-yarotows/subsystems/win32/win32k/ntuser/display.c [iso-8859-1] Wed Apr 21 15:44:06 2010 @@ -674,6 +674,7 @@
BOOL APIENTRY UserClipCursor(RECTL *prcl); VOID APIENTRY UserRedrawDesktop(); +HCURSOR FASTCALL UserSetCursor(PCURICON_OBJECT NewCursor, BOOL ForceChange);
LONG APIENTRY @@ -753,7 +754,17 @@ { ULONG ulResult;
- if (!PDEVOBJ_bSwitchMode(ppdev, pdm)) + /* Remove mouse pointer */ + UserSetCursor(NULL, TRUE); + + /* Do the mode switch */ + ulResult = PDEVOBJ_bSwitchMode(ppdev, pdm); + + /* Restore mouse pointer */ + UserSetCursorPos(gpsi->ptCursor.x, gpsi->ptCursor.y); + + /* Check for failure */ + if (!ulResult) { DPRINT1("failed to set mode\n"); lResult = (lResult == DISP_CHANGE_NOTUPDATED) ? @@ -765,10 +776,10 @@ /* Update the system metrics */ InitMetrics();
+ //IntvGetDeviceCaps(&PrimarySurface, &GdiHandleTable->DevCaps); + /* Remove all cursor clipping */ UserClipCursor(NULL); - - //IntvGetDeviceCaps(&PrimarySurface, &GdiHandleTable->DevCaps);
pdesk = IntGetActiveDesktop(); //IntHideDesktop(pdesk);