Commit 9760b4bd authored by Adam Jackson's avatar Adam Jackson 🎧
Browse files

fixesproto v5: Pointer barriers



v3: Review fixes:
- INT16 not CARD16 for coordinates
- BadDevice not BadMatch
Reviewed-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Adam Jackson's avatarAdam Jackson <ajax@redhat.com>
parent 29324d36
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"),
......
The XFIXES Extension
Version 4.0
Document Revision 2
2006-12-14
Version 5.0
Document Revision 1
2010-11-15
Keith Packard
keithp@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: INT16
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,
BadDevice 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, Device
DestroyPointerBarrier
barrier: BARRIER
Destroys the named barrier.
Errors: Barrier
99. Future compatibility
This extension is not expected to remain fixed. Future changes will
......
/*
* 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,38 @@ 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;
INT16 x1 B16;
INT16 y1 B16;
INT16 x2 B16;
INT16 y2 B16;
CARD32 directions;
CARD16 pad B16;
CARD16 num_devices B16;
/* 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
......
/*
* 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_ */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment