From 7bc576771de0b3c96905a6d11a75a01917334dc9 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 6 Mar 2012 13:58:31 +0200 Subject: Fix sending simulated keyboard events to popup widgets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Popup widgets steal the keyboard grab stealthily without it being visible via QWidget::keyboardGrabber(). To more accurately simulate a real keyboard event, prioritize sending simulated keyboard events to the active popup widget over QGuiApplication::focusWindow(). Task-number: QTBUG-24326 Change-Id: Id7a75c613d934e24657b521f1684ce7cce92556a Reviewed-by: Morten Johan Sørvig Reviewed-by: Friedemann Kleint Reviewed-by: Jason McDonald --- src/testlib/qtestkeyboard.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/testlib/qtestkeyboard.h b/src/testlib/qtestkeyboard.h index 897c732f45..5625bd606c 100644 --- a/src/testlib/qtestkeyboard.h +++ b/src/testlib/qtestkeyboard.h @@ -191,18 +191,20 @@ namespace QTest if (!widget) widget = QWidget::keyboardGrabber(); + if (!widget) { + // Popup widgets stealthily steal the keyboard grab + if (QWidget *apw = QApplication::activePopupWidget()) + widget = apw->focusWidget() ? apw->focusWidget() : apw; + } if (!widget) { QWindow *window = QGuiApplication::focusWindow(); if (window) { sendKeyEvent(action, window, code, text, modifier, delay); return; } - - if (QWidget *apw = QApplication::activePopupWidget()) - widget = apw->focusWidget() ? apw->focusWidget() : apw; - else - widget = QApplication::focusWidget(); } + if (!widget) + widget = QApplication::focusWidget(); if (!widget) widget = QApplication::activeWindow(); -- cgit v1.2.3