From 648dede46c827d4829cd8a32aaab3ff4097e8866 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Fri, 17 Jan 2025 22:47:58 +0100 Subject: [PATCH] QWindowPrivate::maybeSynthesizeContextMenuEvent: preserve spontaneity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ø (cherry picked from commit 97605760aec7bfe48a8642ba8677204efd9c46a5) Reviewed-by: Qt Cherry-pick Bot --- src/gui/kernel/qwindow.cpp | 2 +- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 2568be659ed..922c9787a08 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -2805,7 +2805,7 @@ void QWindowPrivate::maybeSynthesizeContextMenuEvent(QMouseEvent *event) qCDebug(lcPopup) << "synthesized after" << (event->isAccepted() ? "ACCEPTED (legacy behavior)" : "ignored") << event->type() << ":" << &e; - QGuiApplication::sendEvent(q_func(), &e); + QCoreApplication::forwardEvent(q_func(), &e, event); } #endif } diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 16136b67a34..b521725de30 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -14024,9 +14024,13 @@ void tst_QWidget::contextMenuTrigger() { public: int events = 0; + bool spontaneous = false; protected: - void contextMenuEvent(QContextMenuEvent *) override { ++events; } + void contextMenuEvent(QContextMenuEvent *ev) override { + ++events; + spontaneous = ev->spontaneous(); + } }; const Qt::ContextMenuTrigger wasTrigger = QGuiApplication::styleHints()->contextMenuTrigger(); @@ -14043,6 +14047,7 @@ void tst_QWidget::contextMenuTrigger() QGuiApplication::styleHints()->setContextMenuTrigger(Qt::ContextMenuTrigger::Press); QTest::mousePress(window, Qt::RightButton); QCOMPARE(widget.events, 1); + QCOMPARE(widget.spontaneous, true); // QTBUG-132873: Squish expects it QTest::mouseRelease(window, Qt::RightButton); QCOMPARE(widget.events, 1); QGuiApplication::styleHints()->setContextMenuTrigger(Qt::ContextMenuTrigger::Release); @@ -14050,6 +14055,7 @@ void tst_QWidget::contextMenuTrigger() QCOMPARE(widget.events, 1); QTest::mouseRelease(window, Qt::RightButton); QCOMPARE(widget.events, 2); + QCOMPARE(widget.spontaneous, true); } #endif