mirror of
https://github.com/reactos/reactos.git
synced 2024-10-06 01:13:38 +00:00
[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 svn path=/branches/reactos-yarotows/; revision=46976
This commit is contained in:
parent
634c608726
commit
2250e691f1
|
@ -11,7 +11,6 @@ requirements before it can be handled.
|
||||||
Before the merge:
|
Before the merge:
|
||||||
-----------------
|
-----------------
|
||||||
# Fix mouse pointer regression
|
# Fix mouse pointer regression
|
||||||
# Hide the mouse pointer during mode switch
|
|
||||||
# Resize the desktop window after mode switch
|
# Resize the desktop window after mode switch
|
||||||
# Update mouse area after mode switch
|
# Update mouse area after mode switch
|
||||||
# Invalidate the whole Window content after mode switch
|
# Invalidate the whole Window content after mode switch
|
||||||
|
|
|
@ -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
|
ULONG APIENTRY
|
||||||
IntEngSetPointerShape(
|
IntEngSetPointerShape(
|
||||||
IN SURFOBJ *pso,
|
IN SURFOBJ *pso,
|
||||||
|
@ -694,14 +680,22 @@ GreMovePointer(
|
||||||
}
|
}
|
||||||
ASSERT(pdc->dctype == DCTYPE_DIRECT);
|
ASSERT(pdc->dctype == DCTYPE_DIRECT);
|
||||||
|
|
||||||
|
/* Acquire PDEV lock */
|
||||||
EngAcquireSemaphore(pdc->ppdev->hsemDevLock);
|
EngAcquireSemaphore(pdc->ppdev->hsemDevLock);
|
||||||
/* Store the cursor exclude position in the PDEV */
|
|
||||||
prcl = &pdc->ppdev->Pointer.Exclude;
|
|
||||||
|
|
||||||
/* Call Eng/Drv function */
|
/* Check if we need to move it */
|
||||||
IntEngMovePointer(&pdc->ppdev->pSurface->SurfObj, x, y, prcl);
|
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);
|
EngReleaseSemaphore(pdc->ppdev->hsemDevLock);
|
||||||
|
|
||||||
/* Unlock the DC */
|
/* Unlock the DC */
|
||||||
DC_UnlockDc(pdc);
|
DC_UnlockDc(pdc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -674,6 +674,7 @@ NtUserEnumDisplaySettings(
|
||||||
|
|
||||||
BOOL APIENTRY UserClipCursor(RECTL *prcl);
|
BOOL APIENTRY UserClipCursor(RECTL *prcl);
|
||||||
VOID APIENTRY UserRedrawDesktop();
|
VOID APIENTRY UserRedrawDesktop();
|
||||||
|
HCURSOR FASTCALL UserSetCursor(PCURICON_OBJECT NewCursor, BOOL ForceChange);
|
||||||
|
|
||||||
LONG
|
LONG
|
||||||
APIENTRY
|
APIENTRY
|
||||||
|
@ -753,7 +754,17 @@ UserChangeDisplaySettings(
|
||||||
{
|
{
|
||||||
ULONG ulResult;
|
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");
|
DPRINT1("failed to set mode\n");
|
||||||
lResult = (lResult == DISP_CHANGE_NOTUPDATED) ?
|
lResult = (lResult == DISP_CHANGE_NOTUPDATED) ?
|
||||||
|
@ -765,11 +776,11 @@ UserChangeDisplaySettings(
|
||||||
/* Update the system metrics */
|
/* Update the system metrics */
|
||||||
InitMetrics();
|
InitMetrics();
|
||||||
|
|
||||||
|
//IntvGetDeviceCaps(&PrimarySurface, &GdiHandleTable->DevCaps);
|
||||||
|
|
||||||
/* Remove all cursor clipping */
|
/* Remove all cursor clipping */
|
||||||
UserClipCursor(NULL);
|
UserClipCursor(NULL);
|
||||||
|
|
||||||
//IntvGetDeviceCaps(&PrimarySurface, &GdiHandleTable->DevCaps);
|
|
||||||
|
|
||||||
pdesk = IntGetActiveDesktop();
|
pdesk = IntGetActiveDesktop();
|
||||||
//IntHideDesktop(pdesk);
|
//IntHideDesktop(pdesk);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue