From 97605760aec7bfe48a8642ba8677204efd9c46a5 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. Pick-to: 6.9 Fixes: QTBUG-132873 Change-Id: I6198c2105210d2841f43ef81a9be0f917272846f Reviewed-by: Tor Arne Vestbø --- 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 8bf38ae6ca9..50f495158e6 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -2806,7 +2806,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 251dd9c26c0..04da75fed17 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -14063,9 +14063,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(); @@ -14082,6 +14086,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); @@ -14089,6 +14094,7 @@ void tst_QWidget::contextMenuTrigger() QCOMPARE(widget.events, 1); QTest::mouseRelease(window, Qt::RightButton); QCOMPARE(widget.events, 2); + QCOMPARE(widget.spontaneous, true); } #endif