QWindowPrivate::maybeSynthesizeContextMenuEvent: preserve spontaneity

Call QCoreApplication::forwardEvent() rather than sendEvent() to ensure
the QContextMenuEvent is spontaneous if the mouse event is.

Fixes: QTBUG-132873
Change-Id: I6198c2105210d2841f43ef81a9be0f917272846f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
(cherry picked from commit 97605760aec7bfe48a8642ba8677204efd9c46a5)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Shawn Rutledge 2025-01-17 22:47:58 +01:00 committed by Qt Cherry-pick Bot
parent 15a1b718e6
commit 648dede46c
2 changed files with 8 additions and 2 deletions

View File

@ -2805,7 +2805,7 @@ void QWindowPrivate::maybeSynthesizeContextMenuEvent(QMouseEvent *event)
qCDebug(lcPopup) << "synthesized after" qCDebug(lcPopup) << "synthesized after"
<< (event->isAccepted() ? "ACCEPTED (legacy behavior)" : "ignored") << (event->isAccepted() ? "ACCEPTED (legacy behavior)" : "ignored")
<< event->type() << ":" << &e; << event->type() << ":" << &e;
QGuiApplication::sendEvent(q_func(), &e); QCoreApplication::forwardEvent(q_func(), &e, event);
} }
#endif #endif
} }

View File

@ -14024,9 +14024,13 @@ void tst_QWidget::contextMenuTrigger()
{ {
public: public:
int events = 0; int events = 0;
bool spontaneous = false;
protected: protected:
void contextMenuEvent(QContextMenuEvent *) override { ++events; } void contextMenuEvent(QContextMenuEvent *ev) override {
++events;
spontaneous = ev->spontaneous();
}
}; };
const Qt::ContextMenuTrigger wasTrigger = QGuiApplication::styleHints()->contextMenuTrigger(); const Qt::ContextMenuTrigger wasTrigger = QGuiApplication::styleHints()->contextMenuTrigger();
@ -14043,6 +14047,7 @@ void tst_QWidget::contextMenuTrigger()
QGuiApplication::styleHints()->setContextMenuTrigger(Qt::ContextMenuTrigger::Press); QGuiApplication::styleHints()->setContextMenuTrigger(Qt::ContextMenuTrigger::Press);
QTest::mousePress(window, Qt::RightButton); QTest::mousePress(window, Qt::RightButton);
QCOMPARE(widget.events, 1); QCOMPARE(widget.events, 1);
QCOMPARE(widget.spontaneous, true); // QTBUG-132873: Squish expects it
QTest::mouseRelease(window, Qt::RightButton); QTest::mouseRelease(window, Qt::RightButton);
QCOMPARE(widget.events, 1); QCOMPARE(widget.events, 1);
QGuiApplication::styleHints()->setContextMenuTrigger(Qt::ContextMenuTrigger::Release); QGuiApplication::styleHints()->setContextMenuTrigger(Qt::ContextMenuTrigger::Release);
@ -14050,6 +14055,7 @@ void tst_QWidget::contextMenuTrigger()
QCOMPARE(widget.events, 1); QCOMPARE(widget.events, 1);
QTest::mouseRelease(window, Qt::RightButton); QTest::mouseRelease(window, Qt::RightButton);
QCOMPARE(widget.events, 2); QCOMPARE(widget.events, 2);
QCOMPARE(widget.spontaneous, true);
} }
#endif #endif