summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/widgets/qmenubar
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@qt.io>2016-12-05 14:21:40 -0800
committerJani Heikkinen <jani.heikkinen@qt.io>2016-12-08 05:09:07 +0000
commitb2f78b796b5b73d4f0732975ffd66f8aa392c001 (patch)
treed9bbe93b326abc10c6bec22403e152dc672db197 /tests/auto/widgets/widgets/qmenubar
parent4077fcc6153493284b5e2b0812ff215b49e8c8b7 (diff)
QCocoaMenu: Avoid exception when inserting item already in this menu
This should not happen, but it's clearly not the user's fault. So we should try to carry on as gracefully as possible instead of letting Cocoa abort the application. The patch also factors the repeated calls to QCocoaMenuItem:: nsItem() in QCocoaMenu::insertNative() and improves a warning from QCocoaMenuIten::sync(). Change-Id: Id00135c219aaf40fb565b19a65cab68f6d9863b2 Task-number: QTBUG-57404 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'tests/auto/widgets/widgets/qmenubar')
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
index 3a4c4545df..2c20d03066 100644
--- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
@@ -132,6 +132,7 @@ private slots:
void taskQTBUG53205_crashReparentNested();
#ifdef Q_OS_MACOS
void taskQTBUG56275_reinsertMenuInParentlessQMenuBar();
+ void QTBUG_57404_existingMenuItemException();
#endif
void platformMenu();
@@ -1539,6 +1540,32 @@ void tst_QMenuBar::taskQTBUG56275_reinsertMenuInParentlessQMenuBar()
QVERIFY(tst_qmenubar_taskQTBUG56275(&menubar));
}
+
+void tst_QMenuBar::QTBUG_57404_existingMenuItemException()
+{
+ QMainWindow mw1;
+ QMainWindow mw2;
+ mw1.show();
+ mw2.show();
+
+ QMenuBar *mb = new QMenuBar(&mw1);
+ mw1.setMenuBar(mb);
+ mb->show();
+ QMenu *editMenu = new QMenu(QLatin1String("Edit"), &mw1);
+ mb->addMenu(editMenu);
+ QAction *copyAction = editMenu->addAction("&Copy");
+ copyAction->setShortcut(QKeySequence("Ctrl+C"));
+ QTest::ignoreMessage(QtWarningMsg, "Menu item \"&Copy\" has unsupported role QPlatformMenuItem::MenuRole(NoRole)");
+ copyAction->setMenuRole(QAction::NoRole);
+
+ QVERIFY(QTest::qWaitForWindowExposed(&mw2));
+ QTest::qWait(100);
+ QTest::ignoreMessage(QtWarningMsg, "Menu item \"&Copy\" already in menu \"Edit\"");
+ mw2.close();
+ mw1.activateWindow();
+ QTest::qWait(100);
+ // No crash, all fine.
+}
#endif // Q_OS_MACOS
QTEST_MAIN(tst_QMenuBar)