summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2016-05-18 16:03:47 -0500
committerAdam Jackson <ajax@redhat.com>2016-05-25 11:00:56 -0400
commit3f9015b6dc9e7e9c97f8717dea6af9f4d8523f2e (patch)
tree2af3c7d519d0e9f4b571f8aa735812b7e13fa50b
parent4e124203f2260daaf54155f4a05fe469733e0b97 (diff)
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 <keithp@keithp.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-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);