xcb: Act on the _NET_ACTIVE_WINDOW event

It happens that we don't get a focus inn event for top level windows
when focus goes from a window mapped. But we do get a _NET_ACTIVE_WINDOW
event.

Task-number: QTBUG-34426
Change-Id: Id1d9eb708a968e0e8934e56dec19abe2dd203bc7
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
This commit is contained in:
Jørgen Lind 2013-10-30 10:44:40 +01:00 committed by The Qt Project
parent e7bda8ee10
commit 105e228d1c

View File

@ -1544,10 +1544,13 @@ void QXcbWindow::handleClientMessageEvent(const xcb_client_message_event_t *even
#endif #endif
} else if (event->type == atom(QXcbAtom::_XEMBED)) { } else if (event->type == atom(QXcbAtom::_XEMBED)) {
handleXEmbedMessage(event); handleXEmbedMessage(event);
} else if (event->type == atom(QXcbAtom::MANAGER) || event->type == atom(QXcbAtom::_NET_ACTIVE_WINDOW) } else if (event->type == atom(QXcbAtom::_NET_ACTIVE_WINDOW)) {
|| event->type == atom(QXcbAtom::_NET_WM_STATE) || event->type == atom(QXcbAtom::MANAGER) connection()->setFocusWindow(this);
QWindowSystemInterface::handleWindowActivated(window());
} else if (event->type == atom(QXcbAtom::MANAGER)
|| event->type == atom(QXcbAtom::_NET_WM_STATE)
|| event->type == atom(QXcbAtom::WM_CHANGE_STATE)) { || event->type == atom(QXcbAtom::WM_CHANGE_STATE)) {
// Ignore _NET_ACTIVE_WINDOW, _NET_WM_STATE, MANAGER which are relate to tray icons // Ignore _NET_WM_STATE, MANAGER which are relate to tray icons
// and other messages. // and other messages.
} else if (event->type == atom(QXcbAtom::_COMPIZ_DECOR_PENDING) } else if (event->type == atom(QXcbAtom::_COMPIZ_DECOR_PENDING)
|| event->type == atom(QXcbAtom::_COMPIZ_DECOR_REQUEST) || event->type == atom(QXcbAtom::_COMPIZ_DECOR_REQUEST)