From fd45a577728c944328f0cb0656508ef643211f5a Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Tue, 21 Jul 2015 11:36:22 +0200 Subject: Send the mouse events to the correct window That is the window with the item, not the window that contains the TestUtil Item Change-Id: I13f5bfd0556e594843d499d014e92bcc41850f45 Reviewed-by: Laszlo Agocs Reviewed-by: Robin Burchell Reviewed-by: Jason McDonald Reviewed-by: Gunnar Sletta --- src/qmltest/quicktestevent.cpp | 26 +++++---- src/qmltest/quicktestevent_p.h | 2 +- tests/auto/qmltest/window/tst_clickwindow.qml | 84 +++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 tests/auto/qmltest/window/tst_clickwindow.qml diff --git a/src/qmltest/quicktestevent.cpp b/src/qmltest/quicktestevent.cpp index df8de14c14..237bbe76e9 100644 --- a/src/qmltest/quicktestevent.cpp +++ b/src/qmltest/quicktestevent.cpp @@ -211,7 +211,7 @@ bool QuickTestEvent::mousePress (QObject *item, qreal x, qreal y, int button, int modifiers, int delay) { - QWindow *view = eventWindow(); + QWindow *view = eventWindow(item); if (!view) return false; QtQuickTest::mouseEvent(QtQuickTest::MousePress, view, item, @@ -226,7 +226,7 @@ bool QuickTestEvent::mouseWheel( QObject *item, qreal x, qreal y, int buttons, int modifiers, int xDelta, int yDelta, int delay) { - QWindow *view = eventWindow(); + QWindow *view = eventWindow(item); if (!view) return false; QtQuickTest::mouseWheel(view, item, Qt::MouseButtons(buttons), @@ -240,7 +240,7 @@ bool QuickTestEvent::mouseRelease (QObject *item, qreal x, qreal y, int button, int modifiers, int delay) { - QWindow *view = eventWindow(); + QWindow *view = eventWindow(item); if (!view) return false; QtQuickTest::mouseEvent(QtQuickTest::MouseRelease, view, item, @@ -254,7 +254,7 @@ bool QuickTestEvent::mouseClick (QObject *item, qreal x, qreal y, int button, int modifiers, int delay) { - QWindow *view = eventWindow(); + QWindow *view = eventWindow(item); if (!view) return false; QtQuickTest::mouseEvent(QtQuickTest::MouseClick, view, item, @@ -268,7 +268,7 @@ bool QuickTestEvent::mouseDoubleClick (QObject *item, qreal x, qreal y, int button, int modifiers, int delay) { - QWindow *view = eventWindow(); + QWindow *view = eventWindow(item); if (!view) return false; QtQuickTest::mouseEvent(QtQuickTest::MouseDoubleClick, view, item, @@ -282,7 +282,7 @@ bool QuickTestEvent::mouseDoubleClickSequence (QObject *item, qreal x, qreal y, int button, int modifiers, int delay) { - QWindow *view = eventWindow(); + QWindow *view = eventWindow(item); if (!view) return false; QtQuickTest::mouseEvent(QtQuickTest::MouseDoubleClickSequence, view, item, @@ -295,7 +295,7 @@ bool QuickTestEvent::mouseDoubleClickSequence bool QuickTestEvent::mouseMove (QObject *item, qreal x, qreal y, int delay, int buttons) { - QWindow *view = eventWindow(); + QWindow *view = eventWindow(item); if (!view) return false; QtQuickTest::mouseEvent(QtQuickTest::MouseMove, view, item, @@ -304,11 +304,15 @@ bool QuickTestEvent::mouseMove return true; } -QWindow *QuickTestEvent::eventWindow() +QWindow *QuickTestEvent::eventWindow(QObject *item) { - QQuickItem *sgitem = qobject_cast(parent()); - if (sgitem) - return sgitem->window(); + QQuickItem *quickItem = qobject_cast(item); + if (quickItem) + return quickItem->window(); + + QQuickItem *testParentitem = qobject_cast(parent()); + if (testParentitem) + return testParentitem->window(); return 0; } diff --git a/src/qmltest/quicktestevent_p.h b/src/qmltest/quicktestevent_p.h index b7f8f3eda2..e11674f66a 100644 --- a/src/qmltest/quicktestevent_p.h +++ b/src/qmltest/quicktestevent_p.h @@ -73,7 +73,7 @@ public Q_SLOTS: #endif private: - QWindow *eventWindow(); + QWindow *eventWindow(QObject *item = 0); }; QT_END_NAMESPACE diff --git a/tests/auto/qmltest/window/tst_clickwindow.qml b/tests/auto/qmltest/window/tst_clickwindow.qml new file mode 100644 index 0000000000..bbe091990c --- /dev/null +++ b/tests/auto/qmltest/window/tst_clickwindow.qml @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Window 2.0 +import QtTest 1.1 + +Item { + width: height + height: 40 + MouseArea { + id: ma + anchors.fill: parent + + property bool everClicked: false + + onClicked: everClicked = true; + } + + Window { + id: ma2Window + width: height + height: 40 + MouseArea { + id: ma2 + anchors.fill: parent + + property bool everClicked: false + + onClicked: everClicked = true; + } + + Component.onCompleted: ma2Window.show(); + } + + TestCase { + name: "ClickWindow" + when: windowShown + + function test_clickBothWindows() { + mouseClick(ma, 20, 20); + verify(ma.everClicked); + mouseClick(ma2, 20, 20); + verify(ma2.everClicked); + } + } +} -- cgit v1.2.3