Change TestEvent key default event routing behavior
authorFilippo Cucchetto <filippocucchetto@gmail.com>
Tue, 4 Aug 2015 17:29:51 +0000 (19:29 +0200)
committerFilippo Cucchetto <filippocucchetto@gmail.com>
Sun, 16 Aug 2015 16:53:42 +0000 (16:53 +0000)
The current behavior of the TestEvent is to send all the
key events to the test window. For this reason is not possible routing
events to custom windows created inside the test suite.
The new behavior is to send the key events to the current focused window

[Change][QuickTest][TestCase]
Changed default routing behavior for key events in TestCase.
The key events are sent to the window with active focus

Change-Id: I6ff3113eb9f1cbc25f6cfd2dd7bfdff178ee6ac3
Reviewed-by: Filippo Cucchetto <filippocucchetto@gmail.com>
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
src/imports/testlib/TestCase.qml
src/qmltest/quicktestevent.cpp
src/qmltest/quicktestevent_p.h

index 4c48611e7946eb3dc1db07f3d288d5d7171cdd5f..8bedad40e9dff2fce1d6990031d1b80137c51a89 100644 (file)
@@ -876,6 +876,9 @@ Item {
         focused item.  If \a delay is larger than 0, the test will wait for
         \a delay milliseconds.
 
+        The event will be sent to the TestCase window or, in case of multiple windows,
+        to the current active window. See \l QGuiApplication::focusWindow() for more details.
+
         \b{Note:} At some point you should release the key using keyRelease().
 
         \sa keyRelease(), keyClick()
@@ -901,6 +904,9 @@ Item {
         focused item.  If \a delay is larger than 0, the test will wait for
         \a delay milliseconds.
 
+        The event will be sent to the TestCase window or, in case of multiple windows,
+        to the current active window. See \l QGuiApplication::focusWindow() for more details.
+
         \sa keyPress(), keyClick()
     */
     function keyRelease(key, modifiers, delay) {
@@ -924,6 +930,9 @@ Item {
         focused item.  If \a delay is larger than 0, the test will wait for
         \a delay milliseconds.
 
+        The event will be sent to the TestCase window or, in case of multiple windows,
+        to the current active window. See \l QGuiApplication::focusWindow() for more details.
+
         \sa keyPress(), keyRelease()
     */
     function keyClick(key, modifiers, delay) {
index 237bbe76e999efb33b100f48448a883a504daf8b..cfa80c4f192d005333a880b6c2e172a40d7bbfdd 100644 (file)
@@ -50,7 +50,7 @@ QuickTestEvent::~QuickTestEvent()
 
 bool QuickTestEvent::keyPress(int key, int modifiers, int delay)
 {
-    QWindow *window = eventWindow();
+    QWindow *window = activeWindow();
     if (!window)
         return false;
     QTest::keyPress(window, Qt::Key(key), Qt::KeyboardModifiers(modifiers), delay);
@@ -59,7 +59,7 @@ bool QuickTestEvent::keyPress(int key, int modifiers, int delay)
 
 bool QuickTestEvent::keyRelease(int key, int modifiers, int delay)
 {
-    QWindow *window = eventWindow();
+    QWindow *window = activeWindow();
     if (!window)
         return false;
     QTest::keyRelease(window, Qt::Key(key), Qt::KeyboardModifiers(modifiers), delay);
@@ -68,7 +68,7 @@ bool QuickTestEvent::keyRelease(int key, int modifiers, int delay)
 
 bool QuickTestEvent::keyClick(int key, int modifiers, int delay)
 {
-    QWindow *window = eventWindow();
+    QWindow *window = activeWindow();
     if (!window)
         return false;
     QTest::keyClick(window, Qt::Key(key), Qt::KeyboardModifiers(modifiers), delay);
@@ -78,7 +78,7 @@ bool QuickTestEvent::keyClick(int key, int modifiers, int delay)
 bool QuickTestEvent::keyPressChar(const QString &character, int modifiers, int delay)
 {
     QTEST_ASSERT(character.length() == 1);
-    QWindow *window = eventWindow();
+    QWindow *window = activeWindow();
     if (!window)
         return false;
     QTest::keyPress(window, character[0].toLatin1(), Qt::KeyboardModifiers(modifiers), delay);
@@ -88,7 +88,7 @@ bool QuickTestEvent::keyPressChar(const QString &character, int modifiers, int d
 bool QuickTestEvent::keyReleaseChar(const QString &character, int modifiers, int delay)
 {
     QTEST_ASSERT(character.length() == 1);
-    QWindow *window = eventWindow();
+    QWindow *window = activeWindow();
     if (!window)
         return false;
     QTest::keyRelease(window, character[0].toLatin1(), Qt::KeyboardModifiers(modifiers), delay);
@@ -98,7 +98,7 @@ bool QuickTestEvent::keyReleaseChar(const QString &character, int modifiers, int
 bool QuickTestEvent::keyClickChar(const QString &character, int modifiers, int delay)
 {
     QTEST_ASSERT(character.length() == 1);
-    QWindow *window = eventWindow();
+    QWindow *window = activeWindow();
     if (!window)
         return false;
     QTest::keyClick(window, character[0].toLatin1(), Qt::KeyboardModifiers(modifiers), delay);
@@ -316,4 +316,11 @@ QWindow *QuickTestEvent::eventWindow(QObject *item)
     return 0;
 }
 
+QWindow *QuickTestEvent::activeWindow()
+{
+    if (QWindow *window = QGuiApplication::focusWindow())
+        return window;
+    return eventWindow();
+}
+
 QT_END_NAMESPACE
index e11674f66aec9ccc497841f324c9f2e4949a8db3..338464c6b315f3b501d36670915d51a613eccb94 100644 (file)
@@ -74,6 +74,7 @@ public Q_SLOTS:
 
 private:
     QWindow *eventWindow(QObject *item = 0);
+    QWindow *activeWindow();
 };
 
 QT_END_NAMESPACE