summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qmenubar.cpp1
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp25
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"