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 <volker.hilsheimer@qt.io>
This commit is contained in:
David Faure 2025-02-10 18:30:00 +01:00
parent 5b52814d64
commit 9dfd8410b0
2 changed files with 4 additions and 6 deletions

View File

@ -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;

View File

@ -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)