Define new manual-redirect clipping semantics and bump version to 0.4.

Manual-redirect windows no longer clip their parents, nor do they affect
expose event computation. This makes it possible to create application-level
composited windows which can be damaged by other window manipulations.

This patch also removes the coordinate transformation stuff which was never
released.
This commit is contained in:
Keith Packard 2007-07-03 14:09:41 -07:00
parent bca9592612
commit 1838412121
3 changed files with 16 additions and 88 deletions

View file

@ -49,7 +49,7 @@
#define COMPOSITE_NAME "Composite"
#define COMPOSITE_MAJOR 0
#define COMPOSITE_MINOR 3
#define COMPOSITE_MINOR 4
#define CompositeRedirectAutomatic 0
#define CompositeRedirectManual 1
@ -63,13 +63,9 @@
#define X_CompositeNameWindowPixmap 6
#define X_CompositeGetOverlayWindow 7
#define X_CompositeReleaseOverlayWindow 8
#define X_CompositeRedirectCoordinate 9
#define X_CompositeTransformCoordinate 10
#define CompositeNumberRequests (X_CompositeTransformCoordinate + 1)
#define CompositeNumberRequests (X_CompositeReleaseOverlayWindow + 1)
#define CompositeTransformCoordinateNotify 0
#define CompositeNumberEvents 1
#define CompositeNumberEvents 0
#endif /* _COMPOSITE_H_ */

View file

@ -185,54 +185,6 @@ typedef struct {
#define sz_xCompositeReleaseOverlayWindowReq sizeof(xCompositeReleaseOverlayWindowReq)
/* Version 0.4 additions */
typedef struct {
CARD8 reqType;
CARD8 compositeReqType;
CARD16 length;
Window window B32;
BOOL redirect;
BYTE unused1;
CARD16 unused2 B16;
} xCompositeRedirectCoordinateReq;
#define sz_xCompositeRedirectCoordinateReq 12
typedef struct {
CARD8 type;
CARD8 subtype; /* XXX use this? */
CARD16 sequenceNumber B16;
Time time B32;
Window window B32;
Window child B32;
CARD32 serialNumber B32;
CARD32 count B32;
CARD16 x B16;
CARD16 y B16;
CARD32 pad1 B32;
} xCompositeTransformCoordinateNotifyEvent;
typedef struct {
Window window B32;
CARD16 x B16;
CARD16 y B16;
} xCompositeCoordinate;
#define sz_xCompositeCoordinate 8
typedef struct {
CARD8 reqType;
CARD8 compositeReqType;
CARD16 length;
Window window B32;
CARD32 serialNumber B32;
CARD16 x B16;
CARD16 y B16;
} xCompositeTransformCoordinateReq;
#define sz_xCompositeTransformCoordinateReq 16
#undef Window
#undef Region

View file

@ -1,6 +1,6 @@
Composite Extension
Version 0.4
2007-4-17
2007-7-3
Keith Packard
keithp@keithp.com
Deron Johnson
@ -34,6 +34,9 @@ both early prototypes and the final design include:
+ Deron Johnson for the Looking Glass implementation and
a prototype of the coordinate transformation mechanism.
+ Ryan Lortie for helping figure out reasonable parent clipping
semantics in the presense of manual redirected children.
3. Architecture
The composite extension provides three related mechanisms:
@ -129,11 +132,16 @@ redefine its input region, but the specific arbitration rules followed
by these clients is not defined by this specification; these policies
should be defined by the clients themselves.
3.3 Coordinate transform redirection
3.3 Clipping semantics redefined
Version 0.4 of the protocol adds the coordinate transformation redirection
portions of the protocol which externalize the relationship between
parent and child positions with respect to pointer coordinates.
Version 0.4 of the protocol changes the semantics of clipping in the
presense of manual redirect children. In version 0.3, a parent was always
clipped to child windows, independent of the kind of redirection going on.
With version 0.4, the parent is no longer clipped to child windows which are
manually redirected. This means the parent can draw in the child region without using
IncludeInferiors mode, and (perhaps more importantly), it will receive
expose events in those regions caused by other actions. This new behaviour
is not selectable.
4. Errors
@ -147,34 +155,6 @@ The composite extension does not define any new errors.
child: Window
x, y: CARD16
6. Events
Version 0.4 of the Composite protocol defines one new event
TransformCoordinateNotify
subtype: COORDINATEEVENT
window: Window
child: Window
time: Timestamp
serialNumber: CARD32
count: CARD32
x, y: INT16
This event is delivered to the client requesting for coordinate
redirection for 'window'. 'x' and 'y' are a location in 'child' if
not None, else in 'window'. 'time' is the time of any related
pointer event. 'serialNumber' serves to sequence transformations.
'count' indicates the number of events still to be delivered for
'window' to satisfy a particular operation within the server
The client must respond to this event with a suitable
TransformCoordinate request that includes matching 'window', 'child'
and serialNumber fields.
'serialNumber' may be repeated in multiple events, indicating that
the server needs to redo the same transformation for some reason.
7. Extension Initialization
The client must negotiate the version of the extension before executing