summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-06-13 09:01:02 +0200
committerLiang Qi <liang.qi@qt.io>2016-06-13 12:46:46 +0200
commit511790fd1af1e2886a0e2e8dd4308099705cd815 (patch)
treeb42aee537a6103cd064f9f41ae2889b09b79fd23 /tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
parent1542d8881fc5ccbc5918cd4acbe4091ebbd24508 (diff)
parentcbe332405aa22257d432f1797b325f5e57007c20 (diff)
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: config_help.txt configure mkspecs/features/uikit/sdk.prf src/corelib/global/qhooks.cpp src/corelib/io/qfilesystemwatcher.cpp src/corelib/io/qlockfile_unix.cpp src/corelib/tools/qalgorithms.h src/gui/kernel/qwindowsysteminterface.h src/gui/text/qtextdocument_p.cpp src/network/access/access.pri src/network/access/qnetworkaccessmanager.cpp src/network/access/qnetworkreplynsurlconnectionimpl.mm src/src.pro src/testlib/qtestcase.cpp src/widgets/kernel/qwidgetbackingstore_p.h src/widgets/styles/qwindowscestyle.cpp src/widgets/styles/qwindowsmobilestyle.cpp tests/auto/corelib/io/qdiriterator/qdiriterator.pro tests/auto/corelib/io/qfileinfo/qfileinfo.pro tests/auto/gui/kernel/qwindow/BLACKLIST tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp tools/configure/configureapp.cpp Change-Id: Ibf7fb9c8cf263a810ade82f821345d0725c57c67
Diffstat (limited to 'tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp')
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
index 654e1899f0..cb7643d1ac 100644
--- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
+++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
@@ -83,6 +83,7 @@ private slots:
void widgetActionFocus();
void mouseActivation();
void tearOff();
+ void submenuTearOffDontClose();
void layoutDirection();
void task208001_stylesheet();
@@ -648,6 +649,51 @@ void tst_QMenu::tearOff()
#endif // QT_NO_CURSOR
}
+void tst_QMenu::submenuTearOffDontClose()
+{
+ QWidget widget;
+ QMenu *menu = new QMenu(&widget);
+ QVERIFY(!menu->isTearOffEnabled()); //default value
+ menu->setTearOffEnabled(true);
+ QVERIFY(menu->isTearOffEnabled());
+ QMenu *submenu = new QMenu(&widget);
+ submenu->addAction("aaa");
+ submenu->addAction("bbb");
+ QVERIFY(!submenu->isTearOffEnabled()); //default value
+ submenu->setTearOffEnabled(true);
+ QVERIFY(submenu->isTearOffEnabled());
+ menu->addMenu(submenu);
+
+ widget.resize(300, 200);
+ centerOnScreen(&widget);
+ widget.show();
+ widget.activateWindow();
+ QVERIFY(QTest::qWaitForWindowActive(&widget));
+ // Show parent menu
+ menu->popup(widget.geometry().topRight() + QPoint(50, 0));
+ QVERIFY(QTest::qWaitForWindowActive(menu));
+ // Then its submenu
+ const QRect submenuRect = menu->actionGeometry(menu->actions().at(0));
+ 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);
+ QTRY_VERIFY(QTest::qWaitForWindowActive(submenu));
+ // Make sure we enter the submenu frame directly on the tear-off area
+ QTest::mouseMove(submenu, QPoint(10, 3), 100);
+ if (submenu->style()->styleHint(QStyle::SH_Menu_SubMenuDontStartSloppyOnLeave)) {
+ qWarning("Sloppy menu timer disabled by the style: %s", qPrintable(QApplication::style()->objectName()));
+ // Submenu must get the enter event
+ QTRY_VERIFY(submenu->underMouse());
+ } else {
+ const int closeTimeout = submenu->style()->styleHint(QStyle::SH_Menu_SubMenuSloppyCloseTimeout);
+ QTest::qWait(closeTimeout + 100);
+ // Menu must not disappear and it must get the enter event
+ QVERIFY(submenu->isVisible());
+ QVERIFY(submenu->underMouse());
+ }
+}
+
void tst_QMenu::layoutDirection()
{
QMainWindow win;