From feed3b7b8077f2c9bba72c49e249fb96c262d72e Mon Sep 17 00:00:00 2001 From: Mitch Curtis Date: Thu, 1 Nov 2018 10:52:32 +0100 Subject: Drawer: fix infinite positioning loop This fixes the issue where Drawer would try to reposition itself forever, but does not address the fact that it is incorrectly positioned afterwards. Task-number: QTBUG-71290 Change-Id: Ibbd4baa84b66ab446ce3af2ef326f8c50e74216d Reviewed-by: Richard Moe Gustavsen --- tests/auto/qquickdrawer/data/topEdgeScreenEdge.qml | 78 ++++++++++++++++++++++ tests/auto/qquickdrawer/tst_qquickdrawer.cpp | 16 +++++ 2 files changed, 94 insertions(+) create mode 100644 tests/auto/qquickdrawer/data/topEdgeScreenEdge.qml (limited to 'tests/auto') diff --git a/tests/auto/qquickdrawer/data/topEdgeScreenEdge.qml b/tests/auto/qquickdrawer/data/topEdgeScreenEdge.qml new file mode 100644 index 00000000..02b5a10f --- /dev/null +++ b/tests/auto/qquickdrawer/data/topEdgeScreenEdge.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, 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.12 +import QtQuick.Controls 2.5 + +ApplicationWindow { + id: window + width: 400 + height: 400 + + property alias drawer: drawer + + header: Rectangle { + color: "red" + height: 40 + } + + Drawer { + id: drawer + width: window.width + height: window.height * 0.2 + parent: window.contentItem + edge: Qt.TopEdge + + Label { + anchors.centerIn: parent + text: "a drawer" + } + } +} diff --git a/tests/auto/qquickdrawer/tst_qquickdrawer.cpp b/tests/auto/qquickdrawer/tst_qquickdrawer.cpp index e3a6ccf2..816f9b67 100644 --- a/tests/auto/qquickdrawer/tst_qquickdrawer.cpp +++ b/tests/auto/qquickdrawer/tst_qquickdrawer.cpp @@ -109,6 +109,8 @@ private slots: void slider_data(); void slider(); + void topEdgeScreenEdge(); + private: struct TouchDeviceDeleter { @@ -1316,6 +1318,20 @@ void tst_QQuickDrawer::slider() QTest::touchEvent(window, touchDevice.data()).release(0, to); } +void tst_QQuickDrawer::topEdgeScreenEdge() +{ + QQuickApplicationHelper helper(this, QStringLiteral("topEdgeScreenEdge.qml")); + QQuickWindow *window = helper.window; + window->show(); + QVERIFY(QTest::qWaitForWindowActive(window)); + + QQuickDrawer *drawer = window->property("drawer").value(); + QVERIFY(drawer); + + QVERIFY(QMetaObject::invokeMethod(drawer, "open")); + QTRY_COMPARE(drawer->position(), 1.0); +} + QTEST_QUICKCONTROLS_MAIN(tst_QQuickDrawer) #include "tst_qquickdrawer.moc" -- cgit v1.2.3 From 05eb8127594f0d40247e8c84a4704277dd12d16e Mon Sep 17 00:00:00 2001 From: Mitch Curtis Date: Fri, 1 Feb 2019 16:03:56 +0100 Subject: QQuickMenu: allow enter/return to be used to activate items Before this patch, only space was allowed. Windows 10 and macOS 10.14.2 both allow using enter to activate menu items. Change-Id: I64476347669ff73f233efd129563a18ba51618a5 Fixes: QTBUG-73354 Reviewed-by: Richard Moe Gustavsen --- tests/auto/qquickmenu/tst_qquickmenu.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'tests/auto') diff --git a/tests/auto/qquickmenu/tst_qquickmenu.cpp b/tests/auto/qquickmenu/tst_qquickmenu.cpp index a24305b7..e1f5d35f 100644 --- a/tests/auto/qquickmenu/tst_qquickmenu.cpp +++ b/tests/auto/qquickmenu/tst_qquickmenu.cpp @@ -316,9 +316,38 @@ void tst_QQuickMenu::contextMenuKeyboard() QCOMPARE(menu->currentIndex(), -1); QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(-1)); + // Enter/return should also work. + // Open the menu. menu->open(); QCOMPARE(visibleSpy.count(), 3); QVERIFY(menu->isVisible()); + // Give the first item focus. + QTest::keyClick(window, Qt::Key_Tab); + QVERIFY(firstItem->hasActiveFocus()); + QVERIFY(firstItem->hasVisualFocus()); + QVERIFY(firstItem->isHighlighted()); + QCOMPARE(firstItem->focusReason(), Qt::TabFocusReason); + QCOMPARE(menu->currentIndex(), 0); + QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(0)); + // Press enter. + QSignalSpy firstTriggeredSpy(firstItem, SIGNAL(triggered())); + QTest::keyClick(window, Qt::Key_Return); + QCOMPARE(firstTriggeredSpy.count(), 1); + QCOMPARE(visibleSpy.count(), 4); + QVERIFY(!menu->isVisible()); + QVERIFY(!window->overlay()->childItems().contains(menu->contentItem())); + QVERIFY(!firstItem->hasActiveFocus()); + QVERIFY(!firstItem->hasVisualFocus()); + QVERIFY(!firstItem->isHighlighted()); + QVERIFY(!secondItem->hasActiveFocus()); + QVERIFY(!secondItem->hasVisualFocus()); + QVERIFY(!secondItem->isHighlighted()); + QCOMPARE(menu->currentIndex(), -1); + QCOMPARE(menu->contentItem()->property("currentIndex"), QVariant(-1)); + + menu->open(); + QCOMPARE(visibleSpy.count(), 5); + QVERIFY(menu->isVisible()); QVERIFY(window->overlay()->childItems().contains(menu->contentItem()->parentItem())); QVERIFY(!firstItem->hasActiveFocus()); QVERIFY(!firstItem->hasVisualFocus()); @@ -393,7 +422,7 @@ void tst_QQuickMenu::contextMenuKeyboard() QVERIFY(!thirdItem->isHighlighted()); QTest::keyClick(window, Qt::Key_Escape); - QCOMPARE(visibleSpy.count(), 4); + QCOMPARE(visibleSpy.count(), 6); QVERIFY(!menu->isVisible()); } -- cgit v1.2.3 From 9fdbdea176007ed7b470e317e9002aa77ddd4ead Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 1 Mar 2019 08:40:49 +0100 Subject: Fix tst_cursor::controls(containers) test failing after change in the Windows QPA The test failed in case the mouse cursor was within the view to be created. Move the cursor away to prevent that. Fixes: QTBUG-74130 Change-Id: I8d77fc9b4cc5380ddb06ba128bca7c1666357b50 Reviewed-by: Mitch Curtis Reviewed-by: Qt CI Bot --- tests/auto/cursor/tst_cursor.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'tests/auto') diff --git a/tests/auto/cursor/tst_cursor.cpp b/tests/auto/cursor/tst_cursor.cpp index 0f24a29e..d59e7091 100644 --- a/tests/auto/cursor/tst_cursor.cpp +++ b/tests/auto/cursor/tst_cursor.cpp @@ -44,6 +44,11 @@ #include #include +#if QT_CONFIG(cursor) +# include +# include +#endif + using namespace QQuickVisualTestUtil; class tst_cursor : public QQmlDataTest @@ -51,6 +56,7 @@ class tst_cursor : public QQmlDataTest Q_OBJECT private slots: + void init(); void controls_data(); void controls(); void editable(); @@ -58,6 +64,17 @@ private slots: void scrollBar(); }; +void tst_cursor::init() +{ +#if QT_CONFIG(cursor) + // Ensure mouse cursor was not left by previous tests where widgets + // will appear, as it could cause events and interfere with the tests. + const QScreen *screen = QGuiApplication::primaryScreen(); + const QRect availableGeometry = screen->availableGeometry(); + QCursor::setPos(availableGeometry.topLeft()); +#endif +} + void tst_cursor::controls_data() { QTest::addColumn("testFile"); -- cgit v1.2.3