Instead of having a separate check function, we just mark our x11 event
source as needing a post-dispatch check. The event loop will call our
dispatch function again after all dispatching is done, this time with
mask = 0. If we don't process any events, return 0, so the event loop
doesn't keep calling us.
If somebody else did an X11 round trip, that could leave events in the
XCB buffer that we wouldn't see until the next X event came in. The new
event source check function lets us check the XCB queue after dispatching
and this way we'll see events we need to deal with right away.
The event handling gets a little trickier this way but we need the
keymap sent immdiately after the focus_in event to determine which keys
are pressed as the compositor receives keyboard focus.
We need to look at the focus_in and keymap notify pair to correctly determine
the set of held down keys at focus in time, so generalize the handling
of event pairs in preparation for that.
Instead of calling XGetXCBConnection() blindly, check XOpenDisplay()'s
return value to avoid a possible segfault in the former. That happens if
$DISPLAY is set, but if that display isn't available.
Signed-off-by: Cyril Brulebois <kibi@debian.org>
This lets the compositor place the pointer sprite correctly when it receives
pointer focus and allows it to send pointer focus to any client that might
receive pointer focus as the compositor receives it.
offending message:
Program received signal SIGSEGV, Segmentation fault.
create_pointer_images (ec=0x619f10) at compositor.c:240
240 glEGLImageTargetTexture2DOES(GL_TEXTURE_2D,
Signed-off-by: Tiago Vignatti <tiago.vignatti@nokia.com>