From cc6a4199225f034075751580fd5fd816cbfee6ea Mon Sep 17 00:00:00 2001 From: Valentin Fokin Date: Wed, 18 Oct 2017 12:48:04 +0200 Subject: Fix Qt::NoContextMenu policy handling in QWebEngineView Task-number: QTBUG-62345 Change-Id: I4846e15f007c6792ad02fc49179a6e30deafa4c7 Reviewed-by: Peter Varga Reviewed-by: Joerg Bornemann --- .../widgets/qwebengineview/tst_qwebengineview.cpp | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp index a7f8adaf5..f46d9f455 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -174,6 +175,9 @@ private Q_SLOTS: #ifndef QT_NO_CLIPBOARD void globalMouseSelection(); #endif + void noContextMenu(); + void contextMenu_data(); + void contextMenu(); }; // This will be called before the first test function is executed. @@ -2354,5 +2358,64 @@ void tst_QWebEngineView::globalMouseSelection() } #endif +void tst_QWebEngineView::noContextMenu() +{ + QWidget wrapper; + wrapper.setContextMenuPolicy(Qt::CustomContextMenu); + + connect(&wrapper, &QWidget::customContextMenuRequested, [&wrapper](const QPoint &pt) { + QMenu* menu = new QMenu(&wrapper); + menu->addAction("Action1"); + menu->addAction("Action2"); + menu->popup(pt); + }); + + QWebEngineView view(&wrapper); + view.setContextMenuPolicy(Qt::NoContextMenu); + wrapper.show(); + + QVERIFY(view.findChildren().isEmpty()); + QVERIFY(wrapper.findChildren().isEmpty()); + QTest::mouseMove(wrapper.windowHandle(), QPoint(10,10)); + QTest::mouseClick(wrapper.windowHandle(), Qt::RightButton); + + QTRY_COMPARE(wrapper.findChildren().count(), 1); + QVERIFY(view.findChildren().isEmpty()); +} + +void tst_QWebEngineView::contextMenu_data() +{ + QTest::addColumn("childrenCount"); + QTest::addColumn("contextMenuPolicy"); + QTest::newRow("defaultContextMenu") << 1 << Qt::DefaultContextMenu; + QTest::newRow("customContextMenu") << 1 << Qt::CustomContextMenu; + QTest::newRow("preventContextMenu") << 0 << Qt::PreventContextMenu; +} + +void tst_QWebEngineView::contextMenu() +{ + QFETCH(int, childrenCount); + QFETCH(Qt::ContextMenuPolicy, contextMenuPolicy); + + QWebEngineView view; + + if (contextMenuPolicy == Qt::CustomContextMenu) { + connect(&view, &QWebEngineView::customContextMenuRequested, [&view](const QPoint &pt) { + QMenu* menu = new QMenu(&view); + menu->addAction("Action1"); + menu->addAction("Action2"); + menu->popup(pt); + }); + } + + view.setContextMenuPolicy(contextMenuPolicy); + view.show(); + + QVERIFY(view.findChildren().isEmpty()); + QTest::mouseMove(view.windowHandle(), QPoint(10,10)); + QTest::mouseClick(view.windowHandle(), Qt::RightButton); + QTRY_COMPARE(view.findChildren().count(), childrenCount); +} + QTEST_MAIN(tst_QWebEngineView) #include "tst_qwebengineview.moc" -- cgit v1.2.3