diff options
-rw-r--r-- | src/widgets/widgets/qmenubar.cpp | 1 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp | 25 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp index f22c48b26f..a7cad28df3 100644 --- a/src/widgets/widgets/qmenubar.cpp +++ b/src/widgets/widgets/qmenubar.cpp @@ -1054,6 +1054,7 @@ void QMenuBar::mousePressEvent(QMouseEvent *e) if(QMenu *menu = d->activeMenu) { d->activeMenu = 0; menu->hide(); + d->closePopupMode = 1; } } else { d->setCurrentAction(action, true); diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp index e7450fdd2c..174753d8be 100644 --- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp +++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp @@ -50,6 +50,7 @@ #include <qdesktopwidget.h> #include <qaction.h> #include <qstyleoption.h> +#include <qscreen.h> #include <qobject.h> @@ -145,6 +146,7 @@ private slots: void taskQTBUG4965_escapeEaten(); #endif void taskQTBUG11823_crashwithInvisibleActions(); + void closeOnSecondClick(); protected slots: void onActivated( QAction*); @@ -1318,5 +1320,28 @@ void tst_QMenuBar::taskQTBUG11823_crashwithInvisibleActions() QCOMPARE(menubar.activeAction(), m); //the active action shouldn't have changed } +void tst_QMenuBar::closeOnSecondClick() // QTBUG-32807, menu should close on 2nd click. +{ + QMainWindow mainWindow; + mainWindow.resize(300, 200); + mainWindow.move(QGuiApplication::primaryScreen()->geometry().center() - QPoint(150, 100)); +#ifndef QT_NO_CURSOR + QCursor::setPos(mainWindow.geometry().topLeft() - QPoint(100, 0)); +#endif + QMenuBar *menuBar = mainWindow.menuBar(); + menuBar->setNativeMenuBar(false); + QMenu *fileMenu = menuBar->addMenu(QStringLiteral("closeOnSecondClick")); + fileMenu->addAction(QStringLiteral("Quit")); + mainWindow.show(); + QApplication::setActiveWindow(&mainWindow); + QVERIFY(QTest::qWaitForWindowActive(&mainWindow)); + const QPoint center = menuBar->actionGeometry(fileMenu->menuAction()).center(); + QTest::mouseMove(menuBar, center); + QTest::mouseClick(menuBar, Qt::LeftButton, 0, center); + QTRY_VERIFY(fileMenu->isVisible()); + QTest::mouseClick(menuBar, Qt::LeftButton, 0, center); + QTRY_VERIFY(!fileMenu->isVisible()); +} + QTEST_MAIN(tst_QMenuBar) #include "tst_qmenubar.moc" |