glx: Unconditionally select X11/GLX events
authorEmmanuele Bassi <ebassi@linux.intel.com>
Tue, 3 Aug 2010 15:11:52 +0000 (16:11 +0100)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Tue, 3 Aug 2010 15:11:52 +0000 (16:11 +0100)
commit609560b1cb44f4d209de810cc9b94d8d49ba2db5
tree5a1d6c5f802329d1fa6ba2894de47236bacb7f5c
parent142f288986dba5cdeef2fa2e24fd019ce61fa5b0
glx: Unconditionally select X11/GLX events

Currently, we select input events and GLX events conditionally,
depending on whether the user has disabled event retrieval.

We should, instead, unconditionally select input events even with event
retrieval disabled because we need to guarantee that the Clutter
internal state is maintained when calling clutter_x11_handle_event()
without requiring applications or embedding toolkits to select events
themselves. If we did that, we'd have to document the events to be
selected, and also update applications and embedding toolkits each time
we added a new mask, or a new class of events - something that's clearly
not possible.

See:

  http://bugzilla.clutter-project.org/show_bug.cgi?id=998

for the rationale of why we did conditional selection. It is now clear
that a compositor should clear out the input region, since it cannot
assume a perfectly clean slate coming from us.

See:

  http://bugzilla.clutter-project.org/show_bug.cgi?id=2228

for an example of things that break if we do conditional event
selection on GLX events. In that specific case, the X11 server ≤ 1.8
always pushed GLX events on the queue, even without selecting them; this
has been fixed in the X11 server ≥ 1.9, which means that applications
like Mutter or toolkit integration libraries like Clutter-GTK would stop
working on recent Intel drivers providing the GLX_INTEL_swap_event
extension.

This change has been tested with Mutter and Clutter-GTK.
clutter/glx/clutter-stage-glx.c