[PATCH xserver 1/2] xwayland: Move sprite invalidation logic into mipointer

Pekka Paalanen ppaalanen at gmail.com
Thu May 19 07:03:50 UTC 2016


On Wed, 18 May 2016 16:03:47 -0500
Keith Packard <keithp at keithp.com> wrote:

> 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 at keithp.com>
> ---
>  hw/xwayland/xwayland-input.c |  9 +--------
>  mi/mipointer.c               | 15 +++++++++++++++
>  mi/mipointer.h               |  6 ++++++
>  3 files changed, 22 insertions(+), 8 deletions(-)

Hi,

FWIW as I'm so not familiar with Xserver code nor even compile-tested
this, but still looks good to me:

Reviewed-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

for both patches.


Thanks,
pq

> diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
> index cbc1bf2..d186681 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 ada1ab5..7f95cdb 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 bdeed12..7ce6409 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);

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 811 bytes
Desc: OpenPGP digital signature
URL: <https://lists.x.org/archives/xorg-devel/attachments/20160519/97df9a41/attachment-0001.sig>


More information about the xorg-devel mailing list