summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hw/xwayland/xwayland-input.c9
-rw-r--r--mi/mipointer.c15
-rw-r--r--mi/mipointer.h6
3 files changed, 22 insertions, 8 deletions
diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
index cbc1bf2da..d1866811a 100644
--- a/hw/xwayland/xwayland-input.c
+++ b/hw/xwayland/xwayland-input.c
@@ -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);
diff --git a/mi/mipointer.c b/mi/mipointer.c
index ada1ab570..7f95cdbad 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -468,6 +468,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.
*
* @param pDev The device to move
diff --git a/mi/mipointer.h b/mi/mipointer.h
index bdeed1242..7ce6409b3 100644
--- a/mi/mipointer.h
+++ b/mi/mipointer.h
@@ -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);