diff options
Diffstat (limited to 'xorg-server/hw/xwin/wincursor.c')
-rw-r--r-- | xorg-server/hw/xwin/wincursor.c | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/xorg-server/hw/xwin/wincursor.c b/xorg-server/hw/xwin/wincursor.c index 92775e404..4fa7c0929 100644 --- a/xorg-server/hw/xwin/wincursor.c +++ b/xorg-server/hw/xwin/wincursor.c @@ -62,7 +62,7 @@ extern Bool g_fSoftwareCursor; */ static void -winPointerWarpCursor (ScreenPtr pScreen, int x, int y); +winPointerWarpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y); static Bool winCursorOffScreen (ScreenPtr *ppScreen, int *x, int *y); @@ -79,7 +79,7 @@ miPointerScreenFuncRec g_winPointerCursorFuncs = static void -winPointerWarpCursor (ScreenPtr pScreen, int x, int y) +winPointerWarpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y) { winScreenPriv(pScreen); RECT rcClient; @@ -99,8 +99,16 @@ winPointerWarpCursor (ScreenPtr pScreen, int x, int y) return; } - /* Only update the Windows cursor position if we are active */ - if (pScreenPriv->hwndScreen == GetForegroundWindow ()) + /* + Only update the Windows cursor position if root window is active, + or we are in a rootless mode + */ + if ((pScreenPriv->hwndScreen == GetForegroundWindow ()) + || pScreenPriv->pScreenInfo->fRootless +#ifdef XWIN_MULTIWINDOW + || pScreenPriv->pScreenInfo->fMultiWindow +#endif + ) { /* Get the client area coordinates */ GetClientRect (pScreenPriv->hwndScreen, &rcClient); @@ -119,7 +127,7 @@ winPointerWarpCursor (ScreenPtr pScreen, int x, int y) } /* Call the mi warp procedure to do the actual warping in X. */ - miPointerWarpCursor (pScreen, x, y); + miPointerWarpCursor (pDev, pScreen, x, y); } static Bool @@ -436,7 +444,7 @@ winLoadCursor (ScreenPtr pScreen, CursorPtr pCursor, int screen) * Convert the X cursor representation to native format if possible. */ static Bool -winRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) +winRealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) { if(pCursor == NULL || pCursor->bits == NULL) return FALSE; @@ -452,7 +460,7 @@ winRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor) * Free the storage space associated with a realized cursor. */ static Bool -winUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor) +winUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) { return TRUE; } @@ -463,7 +471,7 @@ winUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor) * Set the cursor sprite and position. */ static void -winSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y) +winSetCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, int x, int y) { POINT ptCurPos, ptTemp; HWND hwnd; @@ -541,16 +549,27 @@ winSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y) * Move the cursor. This is a noop for us. */ static void -winMoveCursor (ScreenPtr pScreen, int x, int y) +winMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y) { } +static Bool +winDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen) +{ + return TRUE; +} +static void +winDeviceCleanup(DeviceIntPtr pDev, ScreenPtr pScreen) +{ +} static miPointerSpriteFuncRec winSpriteFuncsRec = { winRealizeCursor, winUnrealizeCursor, winSetCursor, - winMoveCursor + winMoveCursor, + winDeviceInitialize, + winDeviceCleanup }; @@ -600,9 +619,11 @@ winInitCursor (ScreenPtr pScreen) pPointPriv = (miPointerScreenPtr) dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey); + if (pPointPriv) + { pScreenPriv->cursor.spriteFuncs = pPointPriv->spriteFuncs; pPointPriv->spriteFuncs = &winSpriteFuncsRec; - + } pScreenPriv->cursor.handle = NULL; pScreenPriv->cursor.visible = FALSE; |