xcb: don't select XInput events on the root window
If we select XInput events, then when the mouse is clicked, there will
not be a fallback to a core pointer event. But a typical Qt application
doesn't own the root window. If the window manager (such as OpenBox,
Awesome or fvwm) relies on receiving core pointer click events, e.g.
to show a desktop menu, then each time a device is hotplugged while a
Qt application is running, we would select XI2 events and thereby
prevent the window manager from receiving them.
QDesktopWidget's native window is added to m_mapper, even when
it isn't mapped. Then after hotplugging there's a hierarchy event,
and that calls xi2Select for every window in m_mapper. The assumption
with this patch is that the root window does need to be in m_mapper
in case the QDesktopWidget is shown (that was done already in Qt 5.1:
fca94fa5ed), but xi2Select must avoid
selecting XI2 events on it to fix this bug.
Task-number: QTBUG-49952
Change-Id: I5c160e879d93fadfce14120ef2e89a4f71d4f599
Reviewed-by: Uli Schlachter <psychon@znc.in>
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
bb10
parent
bddccfb839
commit
2d8b0d1cd5
|
|
@ -274,7 +274,7 @@ void QXcbConnection::finalizeXInput2()
|
|||
|
||||
void QXcbConnection::xi2Select(xcb_window_t window)
|
||||
{
|
||||
if (!m_xi2Enabled)
|
||||
if (!m_xi2Enabled || window == rootWindow())
|
||||
return;
|
||||
|
||||
Display *xDisplay = static_cast<Display *>(m_xlib_display);
|
||||
|
|
|
|||
Loading…
Reference in New Issue