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 <[email protected]>
> ---
>  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
>                         [email protected]
>  
> @@ -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 <[email protected]>

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
 
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to