summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp2
-rw-r--r--tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp50
2 files changed, 52 insertions, 0 deletions
diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
index 69ecbe160..e4c8996e1 100644
--- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
+++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
@@ -64,6 +64,8 @@ public:
RenderWidgetHostViewQuickItem(RenderWidgetHostViewQtDelegateClient *client) : m_client(client)
{
setFlag(ItemHasContents, true);
+ // Mark that this item should receive focus when the parent QQuickWidget receives focus.
+ setFocus(true);
}
protected:
void focusInEvent(QFocusEvent *event) override
diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
index 151b82b61..02e1d417e 100644
--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
+++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
@@ -84,6 +84,7 @@ private Q_SLOTS:
void stopSettingFocusWhenDisabled_data();
void focusOnNavigation_data();
void focusOnNavigation();
+ void focusInternalRenderWidgetHostViewQuickItem();
void changeLocale();
void inputMethodsTextFormat_data();
@@ -843,11 +844,60 @@ void tst_QWebEngineView::focusOnNavigation()
webView->setFocus();
QTRY_COMPARE(webView->hasFocus(), true);
+
// Clean up.
#undef loadAndTriggerFocusAndCompare
#undef triggerJavascriptFocus
}
+void tst_QWebEngineView::focusInternalRenderWidgetHostViewQuickItem()
+{
+ // Create a container widget, that will hold a line edit that has initial focus, and a web
+ // engine view.
+ QScopedPointer<QWidget> containerWidget(new QWidget);
+ QLineEdit *label = new QLineEdit;
+ label->setText(QString::fromLatin1("Text"));
+ label->setFocus();
+
+ // Create the web view, and set its focusOnNavigation property to false, so it doesn't
+ // get initial focus.
+ QWebEngineView *webView = new QWebEngineView;
+ QWebEngineSettings *settings = webView->page()->settings();
+ settings->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, false);
+ webView->resize(300, 300);
+
+ QHBoxLayout *layout = new QHBoxLayout;
+ layout->addWidget(label);
+ layout->addWidget(webView);
+
+ containerWidget->setLayout(layout);
+ containerWidget->show();
+ QTest::qWaitForWindowExposed(containerWidget.data());
+
+ // Load the content, and check that focus is not set.
+ QSignalSpy loadSpy(webView, SIGNAL(loadFinished(bool)));
+ webView->setHtml("<html><head><title>Title</title></head><body>Hello"
+ "<input id=\"input\" type=\"text\"></body></html>");
+ QTRY_COMPARE(loadSpy.count(), 1);
+ QTRY_COMPARE(webView->hasFocus(), false);
+
+ // Manually trigger focus.
+ webView->setFocus();
+
+ // Check that focus is set in QWebEngineView and all internal classes.
+ QTRY_COMPARE(webView->hasFocus(), true);
+
+ QQuickWidget *renderWidgetHostViewQtDelegateWidget =
+ qobject_cast<QQuickWidget *>(webView->focusProxy());
+ QVERIFY(renderWidgetHostViewQtDelegateWidget);
+ QTRY_COMPARE(renderWidgetHostViewQtDelegateWidget->hasFocus(), true);
+
+ QQuickItem *renderWidgetHostViewQuickItem =
+ renderWidgetHostViewQtDelegateWidget->rootObject();
+ QVERIFY(renderWidgetHostViewQuickItem);
+ QTRY_COMPARE(renderWidgetHostViewQuickItem->hasFocus(), true);
+}
+
void tst_QWebEngineView::changeLocale()
{
QUrl url("http://non.existent/");