summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/xcb/README
blob: af899024c3c3c9921b7f92da0bff2ff2a05bfe1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
*****************************************************************
From 62f053c19b917a369c4aad5b71ab150911b589aa:

xcb-xinput code was produced by build of libxcb 1.13 with xcb-proto 1.13.

The following parts were removed from it:
 - Pointer Barriers API (requires xcb-xfixes 1.9 with xcb-proto 1.9)
 - SendExtensionEvent API (requires definition of xcb_raw_generic_event_t
   from libxcb 1.13)

The following has been added:
 - A fix for forwards compatibility bug with X Server 21.1 (see below)
 - Touchpad gesture support (see below)

*****************************************************************

As of time of writing the minimal required libxcb version is 1.11, hence
we could restore the Pointer Barriers API, but we don't use it.
Additionally, we support touchpad gestures which is a much newer addition
to libxcb, but fortunately very well contained. When we will bump the
minimal required version of libxcb to 1.15, then we can drop the bundled
xcb-xinput altogether.

The xcb-xinput files where modified to use system includes, see:

src/3rdparty/xcb/include/xcb/fixup-xinput-h.patch
src/3rdparty/xcb/libxcb/fixup-xinput-c.patch

*****************************************************************

A forwards compatibility bug in libxcb xinput has been addressed
by the following patch:

src/3rdparty/xcb/libxcb/xinput-device-class-sizeof.patch

The crux of the issue is that libxcb thinks that it knows about all device
class types sent by the X server XInput extension. With the addition of
touchpad gestures in XInput 2.4 and X server 21.1 this is no longer the case
and libxcb fails horribly by thinking that the protocol was malformed.

The X server currently has a workaround, but it would not address the following
situation:

 - there are multiple modules within the same X client (e.g. part of the application
   uses Qt, another part talks to X server via another library)
 - both of the modules talk to XI
 - at least one module requests for XI 2.4 protocol support.

The request for XI 2.4 disables the workaround on the X server and Qt side would
crash horribly.

For more details, see https://gitlab.freedesktop.org/xorg/lib/libxcb/-/merge_requests/20

*****************************************************************

Touchpad gestures support has been added in the following patches:

src/3rdparty/xcb/include/xcb/touchpad-gestures-h.patch
src/3rdparty/xcb/libxcb/touchpad-gestures-c.patch

The patches were generated by cherry-picking
151ee69847c706e2b9d38c82e20534910f140b55 from xcb-xcbproto master on top of 1.13,
generating xinput.h and xinput.c files and comparing to what would be generated in
vanilla libxcb 1.13 and xcb-proto 1.13.

For more details, see https://gitlab.freedesktop.org/xorg/proto/xcbproto/-/merge_requests/16