From 9dfd8410b07b0c484443ad6355004ace5f9b2b8b Mon Sep 17 00:00:00 2001 From: David Faure Date: Mon, 10 Feb 2025 18:30:00 +0100 Subject: [PATCH] QMenu: improve test for "empty menu" to be style-independent This amends commit 353ce5344fbde5a6cecbdd2c131e1cf0f4b7f383 so that the behavior doesn't depend on the widget style. If QStyle::PM_MenuPanelWidth returns 2, then size will be (2x2), which is hardly a valid menu to show - don't show that either. Pick-to: 6.9 6.8 Task-number: QTBUG-129108 Change-Id: I2daa05932ea00971880747daeffdfa20a8be3f22 Reviewed-by: Volker Hilsheimer --- src/widgets/widgets/qmenu.cpp | 3 ++- tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp | 7 ++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 40f427e5371..52635256251 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -2450,7 +2450,8 @@ void QMenuPrivate::popup(const QPoint &p, QAction *atAction, PositionFunction po } // do nothing if we don't have a valid size, e.g. when all actions are invisible - if (!size.isValid()) { + const auto rectIsNull = [](const QRect &rect) { return rect.isNull(); }; + if (std::all_of(actionRects.cbegin(), actionRects.cend(), rectIsNull)) { eventLoop = nullptr; syncAction = nullptr; return; diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp index f3e3eb44b7b..490947fd825 100644 --- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp +++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp @@ -2175,11 +2175,8 @@ void tst_QMenu::invisibleActions() action->setVisible(false); contextMenu.popup(globalPos); - QCOMPARE(contextMenu.isVisible(), contextMenu.sizeHint().isValid()); - - // if it wasn't shown previously, then exec() shouldn't do anything either - if (!contextMenu.isVisible()) - QVERIFY(!contextMenu.exec()); + QVERIFY(!contextMenu.isVisible()); + QVERIFY(!contextMenu.exec()); } #if QT_CONFIG(shortcut) && !defined(Q_OS_DARWIN)