summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp')
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp74
1 files changed, 65 insertions, 9 deletions
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
index 727d1c2a16..d7d3a934f8 100644
--- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
+++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
@@ -40,6 +40,7 @@
#include <QWidgetAction>
#include <QDesktopWidget>
#include <QScreen>
+#include <QSpinBox>
#include <qdialog.h>
#include <qmenu.h>
@@ -114,6 +115,7 @@ private slots:
void QTBUG30595_rtl_submenu();
void QTBUG20403_nested_popup_on_shortcut_trigger();
void QTBUG47515_widgetActionEnterLeave();
+ void QTBUG8122_widgetActionCrashOnClose();
void QTBUG_10735_crashWithDialog();
#ifdef Q_OS_MAC
@@ -319,12 +321,12 @@ void tst_QMenu::mouseActivation()
menu.addAction("Menu Action");
menu.move(topLevel.geometry().topRight() + QPoint(50, 0));
menu.show();
- QTest::mouseClick(&menu, Qt::LeftButton, 0, menu.rect().center(), 300);
+ QTest::mouseClick(&menu, Qt::LeftButton, {}, menu.rect().center(), 300);
QVERIFY(!menu.isVisible());
//context menus can always be accessed with right click except on windows
menu.show();
- QTest::mouseClick(&menu, Qt::RightButton, 0, menu.rect().center(), 300);
+ QTest::mouseClick(&menu, Qt::RightButton, {}, menu.rect().center(), 300);
QVERIFY(!menu.isVisible());
#ifdef Q_OS_WIN
@@ -643,7 +645,7 @@ void tst_QMenu::tearOff()
MenuMetrics mm(menu.data());
const int tearOffOffset = mm.fw + mm.vmargin + mm.tearOffHeight / 2;
- QTest::mouseClick(menu.data(), Qt::LeftButton, 0, QPoint(10, tearOffOffset), 10);
+ QTest::mouseClick(menu.data(), Qt::LeftButton, {}, QPoint(10, tearOffOffset), 10);
QTRY_VERIFY(menu->isTearOffMenuVisible());
QPointer<QMenu> torn = getTornOffMenu();
QVERIFY(torn);
@@ -723,7 +725,7 @@ void tst_QMenu::submenuTearOffDontClose()
const QPoint submenuPos(submenuRect.topLeft() + QPoint(3, 3));
// Move then click to avoid the submenu moves from causing it to close
QTest::mouseMove(menu, submenuPos, 100);
- QTest::mouseClick(menu, Qt::LeftButton, 0, submenuPos, 100);
+ QTest::mouseClick(menu, Qt::LeftButton, {}, submenuPos, 100);
QVERIFY(QTest::qWaitFor([&]() { return submenu->window()->windowHandle(); }));
QVERIFY(QTest::qWaitForWindowActive(submenu));
// Make sure we enter the submenu frame directly on the tear-off area
@@ -888,7 +890,7 @@ void tst_QMenu::task176201_clear()
QAction *action = menu.addAction("test");
menu.connect(action, SIGNAL(triggered()), SLOT(clear()));
menu.popup(QPoint());
- QTest::mouseClick(&menu, Qt::LeftButton, 0, menu.rect().center());
+ QTest::mouseClick(&menu, Qt::LeftButton, {}, menu.rect().center());
}
void tst_QMenu::task250673_activeMultiColumnSubMenuPosition()
@@ -1216,13 +1218,13 @@ void tst_QMenu::click_while_dismissing_submenu()
QVERIFY(sub.isVisible());
QVERIFY(QTest::qWaitForWindowExposed(&sub));
//press over the submenu entry
- QTest::mousePress(menuWindow, Qt::LeftButton, 0, menu.rect().center() + QPoint(0,2), 300);
+ QTest::mousePress(menuWindow, Qt::LeftButton, {}, menu.rect().center() + QPoint(0, 2), 300);
//move over the main action
QTest::mouseMove(menuWindow, menu.rect().center() - QPoint(0,2));
QVERIFY(menuHiddenSpy.wait());
//the submenu must have been hidden for the bug to be triggered
QVERIFY(!sub.isVisible());
- QTest::mouseRelease(menuWindow, Qt::LeftButton, 0, menu.rect().center() - QPoint(0,2), 300);
+ QTest::mouseRelease(menuWindow, Qt::LeftButton, {}, menu.rect().center() - QPoint(0, 2), 300);
QCOMPARE(spy.count(), 1);
}
#endif
@@ -1352,6 +1354,60 @@ void tst_QMenu::QTBUG47515_widgetActionEnterLeave()
}
}
+void tst_QMenu::QTBUG8122_widgetActionCrashOnClose()
+{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("Window activation is not supported");
+ if (QGuiApplication::platformName() == QLatin1String("cocoa"))
+ QSKIP("See QTBUG-63031");
+#ifdef Q_OS_WINRT
+ QSKIP("WinRT does not support QTest::mouseMove");
+#endif
+
+ const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
+ QRect geometry(QPoint(), availableGeometry.size() / 3);
+ geometry.moveCenter(availableGeometry.center());
+ QPoint pointOutsideMenu = geometry.bottomRight() - QPoint(5, 5);
+
+ QMainWindow topLevel;
+ topLevel.setGeometry(geometry);
+
+ auto menuBar = topLevel.menuBar();
+ auto menu = menuBar->addMenu("Menu");
+ auto wAct = new QWidgetAction(menu);
+ auto spinBox1 = new QSpinBox(menu);
+ wAct->setDefaultWidget(spinBox1);
+ menu->addAction(wAct);
+ auto subMenu = menu->addMenu("Submenu");
+ auto nextMenuAct = menu->addMenu(subMenu);
+ auto wAct2 = new QWidgetAction(menu);
+ auto spinBox2 = new QSpinBox(menu);
+ wAct2->setDefaultWidget(spinBox2);
+ subMenu->addAction(wAct2);
+ QObject::connect(spinBox2, &QSpinBox::editingFinished, menu, &QMenu::hide);
+
+ topLevel.show();
+ topLevel.setWindowTitle(QTest::currentTestFunction());
+ QVERIFY(QTest::qWaitForWindowActive(&topLevel));
+ QWindow *topLevelWindow = topLevel.windowHandle();
+ QVERIFY(topLevelWindow);
+
+ const QPoint menuActionPos = menuBar->mapTo(&topLevel, menuBar->actionGeometry(menu->menuAction()).center());
+ QTest::mouseClick(topLevelWindow, Qt::LeftButton, Qt::KeyboardModifiers(), menuActionPos);
+ QVERIFY(QTest::qWaitForWindowExposed(menu));
+
+ QPoint w1Center = topLevel.mapFromGlobal(spinBox1->mapToGlobal(spinBox1->rect().center()));
+ QTest::mouseClick(topLevelWindow, Qt::LeftButton, Qt::KeyboardModifiers(), w1Center);
+ menu->setActiveAction(nextMenuAct);
+ QVERIFY(QTest::qWaitForWindowExposed(subMenu));
+
+ QPoint w2Center = topLevel.mapFromGlobal(spinBox2->mapToGlobal(spinBox2->rect().center()));
+ QTest::mouseClick(topLevelWindow, Qt::LeftButton, Qt::KeyboardModifiers(), w2Center);
+ QTest::mouseMove(topLevelWindow, topLevel.mapFromGlobal(pointOutsideMenu));
+ QTRY_VERIFY(menu->isHidden());
+}
+
+
class MyMenu : public QMenu
{
Q_OBJECT
@@ -1480,7 +1536,7 @@ void tst_QMenu::QTBUG_56917_wideSubmenuScreenNumber()
menu.popup(screen->geometry().center());
QVERIFY(QTest::qWaitForWindowExposed(&menu));
QVERIFY(menu.isVisible());
- QTest::mouseClick(&menu, Qt::LeftButton, 0, menu.actionGeometry(action).center());
+ QTest::mouseClick(&menu, Qt::LeftButton, {}, menu.actionGeometry(action).center());
QTest::qWait(100);
QVERIFY(QTest::qWaitForWindowExposed(&submenu));
QVERIFY(submenu.isVisible());
@@ -1692,7 +1748,7 @@ void tst_QMenu::tearOffMenuNotDisplayed()
MenuMetrics mm(menu.data());
const int tearOffOffset = mm.fw + mm.vmargin + mm.tearOffHeight / 2;
- QTest::mouseClick(menu.data(), Qt::LeftButton, 0, QPoint(10, tearOffOffset), 10);
+ QTest::mouseClick(menu.data(), Qt::LeftButton, {}, QPoint(10, tearOffOffset), 10);
QTRY_VERIFY(menu->isTearOffMenuVisible());
QPointer<QMenu> torn = getTornOffMenu();
QVERIFY(torn);