[PATCH] Fixes v5: Pointer barriers
Peter Hutterer
peter.hutterer at who-t.net
Wed Dec 8 16:20:34 PST 2010
On Wed, Dec 08, 2010 at 05:35:06PM -0500, Adam Jackson wrote:
> v2: Review fixes:
> - Take any drawable to name the screen, don't require a window
> - Pointer barriers, not Cursor barriers
> - Elaborate on the interaction with XI2 and with absolute devices
> - Elaborate on the coordinate rules
>
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
> COPYING | 1 +
> fixesproto.txt | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
> xfixesproto.h | 32 +++++++++++++++++++
> xfixeswire.h | 18 +++++++++--
> 4 files changed, 136 insertions(+), 7 deletions(-)
>
> diff --git a/COPYING b/COPYING
> index cdcb1ad..c8114fe 100644
> --- a/COPYING
> +++ b/COPYING
> @@ -1,4 +1,5 @@
> Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
> +Copyright 2010 Red Hat, Inc.
>
> Permission is hereby granted, free of charge, to any person obtaining a
> copy of this software and associated documentation files (the "Software"),
> diff --git a/fixesproto.txt b/fixesproto.txt
> index 5ef8153..e060e93 100644
> --- a/fixesproto.txt
> +++ b/fixesproto.txt
> @@ -1,7 +1,7 @@
> The XFIXES Extension
> - Version 4.0
> - Document Revision 2
> - 2006-12-14
> + Version 5.0
> + Document Revision 1
> + 2010-11-15
> Keith Packard
> keithp at keithp.com
>
> @@ -19,7 +19,7 @@ developers, in particular,
>
> + Owen Taylor for describing the issues raised with the XEMBED
> mechanisms and SaveSet processing and his initial extension
> - to handle this issue.
> + to handle this issue, and for pointer barriers
>
> + Bill Haneman for the design for cursor image tracking.
>
> @@ -566,6 +566,90 @@ ShowCursor
> Servers supporting the X Input Extension Version 2.0 or higher show
> all visible cursors in response to a ShowCursor request.
>
> +************* XFIXES VERSION 5 OR BETTER ***********
> +
> +12. Pointer Barriers
> +
> +Compositing managers and desktop environments may have UI elements in
> +particular screen locations such that for a single-headed display they
> +correspond to easy targets according to Fitt's Law, for example, the top
> +left corner. For a multi-headed environment these corners should still be
> +semi-impermeable. Pointer barriers allow the application to define
> +additional constraint on cursor motion so that these areas behave as
> +expected even in the face of multiple displays.
> +
> +Absolute positioning devices like touchscreens do not obey pointer barriers.
> +There's no advantage to target acquisition to do so, since on a touchscreen
> +all points are in some sense equally large, whereas for a relative
> +positioning device the edges and corners are infinitely large.
> +
> +WarpPointer and similar requests do not obey pointer barriers, for
> +essentially the same reason.
> +
> +12.1 Types
> +
> + BARRIER: XID
> +
> + BarrierDirections
> +
> + BarrierPositiveX: 1 << 0
> + BarrierPositiveY: 1 << 1
> + BarrierNegativeX: 1 << 2
> + BarrierNegativeY: 1 << 3
> +
> +12.2 Errors
> +
> + Barrier
> +
> +12.3 Requests
> +
> +CreatePointerBarrier
> +
> + barrier: BARRIER
> + drawable: DRAWABLE
> + x1, y2, x2, y2: CARD16
> + directions: CARD32
> + devices: LISTofDEVICEID
> +
> + Creates a pointer barrier along the line specified by the given
> + coordinates on the screen associated with the given drawable. The
> + barrier has no spatial extent; it is simply a line along the left
> + or top edge of the specified pixels. Barrier coordinates are in
> + screen space.
> +
> + The coordinates must be axis aligned, either x1 == x2, or
> + y1 == y2, but not both. The varying coordinates may be specified
> + in any order. For x1 == x2, either y1 > y2 or y1 < y2 is valid.
> + If the coordinates are not valid BadValue is generated.
> +
> + Motion is allowed through the barrier in the directions specified:
> + setting the BarrierPositiveX bit allows travel through the barrier
> + in the positive X direction, etc. Nonsensical values (forbidding Y
> + axis travel through a vertical barrier, for example) and excess set
> + bits are ignored.
> +
> + If the server supports the X Input Extension version 2 or higher,
> + the devices element names a set of master device to apply the
> + barrier to. If XIAllDevices or XIAllMasterDevices are given, the
> + barrier applies to all master devices. If a slave device is named,
> + BadMatch is generated; this does not apply to slave devices named
> + implicitly by XIAllDevices. Naming a device multiple times is
> + legal, and is treated as though it were named only once. If a
> + device is removed, the barrier continues to apply to the remaining
> + devices, but will not apply to any future device with the same ID
> + as the removed device. Nothing special happens when all matching
> + devices are removed; barriers must be explicitly destroyed.
> +
> + Errors: IDChoice, Window, Value, Match
BadDevice for invalid device IDs?
> +
> +DestroyPointerBarrier
> +
> + barrier: BARRIER
> +
> + Destroys the named barrier.
> +
> + Errors: Barrier
> +
> 99. Future compatibility
>
> This extension is not expected to remain fixed. Future changes will
> diff --git a/xfixesproto.h b/xfixesproto.h
> index ed872d1..22e963d 100644
> --- a/xfixesproto.h
> +++ b/xfixesproto.h
> @@ -1,5 +1,6 @@
> /*
> * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
> + * Copyright 2010 Red Hat, Inc.
> *
> * Permission is hereby granted, free of charge, to any person obtaining a
> * copy of this software and associated documentation files (the "Software"),
> @@ -500,6 +501,37 @@ typedef struct {
>
> #define sz_xXFixesShowCursorReq sizeof(xXFixesShowCursorReq)
>
> +/*************** Version 5.0 ******************/
> +
> +#define Barrier CARD32
> +
> +typedef struct {
> + CARD8 reqType;
> + CARD8 xfixesReqType;
> + CARD16 length B16;
> + Barrier barrier B32;
> + Window window B32;
> + CARD16 x1 B16;
> + CARD16 y1 B16;
> + CARD16 x2 B16;
> + CARD16 y2 B16;
> + CARD32 directions;
> + CARD32 num_devices;
XI2 uses CARD16 num_devices everywhere iirc. also allows you to have a 16
byte pad for later use without having to extend the request length.
any comments on the INT16/CARD16 for x/y coordinates?
those minor things aside
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
Cheers,
Peter
> + /* array of CARD16 devices */
> +} xXFixesCreatePointerBarrierReq;
> +
> +#define sz_xXFixesCreatePointerBarrierReq 28
> +
> +typedef struct {
> + CARD8 reqType;
> + CARD8 xfixesReqType;
> + CARD16 length B16;
> + Barrier barrier B32;
> +} xXFixesDestroyPointerBarrierReq;
> +
> +#define sz_xXFixesDestroyPointerBarrierReq 8
> +
> +#undef Barrier
> #undef Region
> #undef Picture
> #undef Window
> diff --git a/xfixeswire.h b/xfixeswire.h
> index 7b43f09..432349a 100644
> --- a/xfixeswire.h
> +++ b/xfixeswire.h
> @@ -1,5 +1,6 @@
> /*
> * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
> + * Copyright 2010 Red Hat, Inc.
> *
> * Permission is hereby granted, free of charge, to any person obtaining a
> * copy of this software and associated documentation files (the "Software"),
> @@ -47,7 +48,7 @@
> #define _XFIXESWIRE_H_
>
> #define XFIXES_NAME "XFIXES"
> -#define XFIXES_MAJOR 4
> +#define XFIXES_MAJOR 5
> #define XFIXES_MINOR 0
>
> /*************** Version 1 ******************/
> @@ -85,8 +86,11 @@
> /*************** Version 4 ******************/
> #define X_XFixesHideCursor 29
> #define X_XFixesShowCursor 30
> +/*************** Version 5 ******************/
> +#define X_XFixesCreatePointerBarrier 31
> +#define X_XFixesDestroyPointerBarrier 32
>
> -#define XFixesNumberRequests (X_XFixesShowCursor+1)
> +#define XFixesNumberRequests (X_XFixesDestroyPointerBarrier+1)
>
> /* Selection events share one event number */
> #define XFixesSelectionNotify 0
> @@ -111,7 +115,8 @@
>
> /* errors */
> #define BadRegion 0
> -#define XFixesNumberErrors (BadRegion+1)
> +#define BadBarrier 1
> +#define XFixesNumberErrors (BadBarrier+1)
>
> #define SaveSetNearest 0
> #define SaveSetRoot 1
> @@ -124,4 +129,11 @@
> #define WindowRegionBounding 0
> #define WindowRegionClip 1
>
> +/*************** Version 5 ******************/
> +
> +#define BarrierPositiveX (1L << 0)
> +#define BarrierPositiveY (1L << 1)
> +#define BarrierNegativeX (1L << 2)
> +#define BarrierNegativeY (1L << 3)
> +
> #endif /* _XFIXESWIRE_H_ */
> --
> 1.7.3.2
More information about the xorg-devel
mailing list