- 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

svn path=/branches/reactos-yarotows/; revision=46976
This commit is contained in:
Timo Kreuzer 2010-04-21 13:44:06 +00:00
parent 634c608726
commit 2250e691f1
3 changed files with 26 additions and 22 deletions

View file

@ -11,7 +11,6 @@ requirements before it can be handled.
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

View file

@ -514,20 +514,6 @@ EngMovePointer(
}
}
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 @@ GreMovePointer(
}
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);
}

View file

@ -674,6 +674,7 @@ NtUserEnumDisplaySettings(
BOOL APIENTRY UserClipCursor(RECTL *prcl);
VOID APIENTRY UserRedrawDesktop();
HCURSOR FASTCALL UserSetCursor(PCURICON_OBJECT NewCursor, BOOL ForceChange);
LONG
APIENTRY
@ -753,7 +754,17 @@ UserChangeDisplaySettings(
{
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,11 +776,11 @@ UserChangeDisplaySettings(
/* Update the system metrics */
InitMetrics();
//IntvGetDeviceCaps(&PrimarySurface, &GdiHandleTable->DevCaps);
/* Remove all cursor clipping */
UserClipCursor(NULL);
//IntvGetDeviceCaps(&PrimarySurface, &GdiHandleTable->DevCaps);
pdesk = IntGetActiveDesktop();
//IntHideDesktop(pdesk);