Commit 3f9015b6 authored by Keith Packard's avatar Keith Packard Committed by Adam Jackson

xwayland: Move sprite invalidation logic into mipointer

This creates a function that invalidates the current sprite and forces
a sprite image reload the next time the sprite is checked, moving that
logic out of the xwayland sources and allowing the miPointerRec
structure to be removed from the server API.
Signed-off-by: Keith Packard's avatarKeith Packard <keithp@keithp.com>
Reviewed-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
parent 4e124203
......@@ -219,7 +219,6 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer,
struct xwl_seat *xwl_seat = data;
DeviceIntPtr dev = xwl_seat->pointer;
DeviceIntPtr master;
miPointerPtr mipointer;
int i;
int sx = wl_fixed_to_int(sx_w);
int sy = wl_fixed_to_int(sy_w);
......@@ -243,13 +242,7 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer,
master = GetMaster(dev, POINTER_OR_FLOAT);
(*pScreen->SetCursorPosition) (dev, pScreen, sx, sy, TRUE);
/* X is very likely to have the wrong idea of what the actual cursor
* sprite is, so in order to force updating the cursor lets set the
* current sprite to some invalid cursor behind its back so that it
* always will think it changed to the not invalid cursor.
*/
mipointer = MIPOINTER(master);
mipointer->pSpriteCursor = (CursorPtr) 1;
miPointerInvalidateSprite(master);
CheckMotion(NULL, master);
......
......@@ -467,6 +467,21 @@ miPointerUpdateSprite(DeviceIntPtr pDev)
}
}
/**
* Invalidate the current sprite and force it to be reloaded on next cursor setting
* operation
*
* @param pDev The device to invalidate the sprite fore
*/
void
miPointerInvalidateSprite(DeviceIntPtr pDev)
{
miPointerPtr pPointer;
pPointer = MIPOINTER(pDev);
pPointer->pSpriteCursor = (CursorPtr) 1;
}
/**
* Set the device to the coordinates on the given screen.
*
......
......@@ -109,6 +109,12 @@ miPointerSetPosition(DeviceIntPtr pDev, int mode, double *x, double *y,
extern _X_EXPORT void
miPointerUpdateSprite(DeviceIntPtr pDev);
/* Invalidate current sprite, forcing reload on next
* sprite setting (window crossing, grab action, etc)
*/
extern _X_EXPORT void
miPointerInvalidateSprite(DeviceIntPtr pDev);
/* Sets whether the sprite should be updated immediately on pointer moves */
extern _X_EXPORT Bool
miPointerSetWaitForUpdate(ScreenPtr pScreen, Bool wait);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment