From c47bc7986e3a158fcb505992df084372a4a0e3bf Mon Sep 17 00:00:00 2001 From: Szabolcs David Date: Wed, 5 Mar 2014 03:37:04 -0800 Subject: Fix focus in Quick API The forceActiveFocus() doesn't work in the QML tests. We need to call forceActiveFocus() in RenderWidgetHostViewQtDelegateQuick instead of the one in WebEngineView. To make this work, I replaced RWHV with QQuickWebEngineView in the focus chain. This is necessary in order to extend tst_loadUrl QML test with urlProperty test case. Change-Id: Ifba0c824a7ce9f00d328110233402d3563f967aa Reviewed-by: Zeno Albisser Reviewed-by: Jocelyn Turcotte --- src/webengine/api/qquickwebengineview.cpp | 23 +++++++++++++++------- src/webengine/api/qquickwebengineview_p.h | 1 + .../render_widget_host_view_qt_delegate_quick.h | 4 ---- 3 files changed, 17 insertions(+), 11 deletions(-) (limited to 'src/webengine') diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 6522137a8..64c7f337e 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -187,13 +187,7 @@ void QQuickWebEngineViewPrivate::runFileChooser(FileChooserMode mode, const QStr void QQuickWebEngineViewPrivate::passOnFocus(bool reverse) { Q_Q(QQuickWebEngineView); - // In one direction we would pass forward the focus to RenderWidgetHostViewQtDelegateQuick(Painted), - // which in return would forward the tab key event and therefore the focus back to the QQuickWebEngineView. - // This is why we skip RenderWidgetHostViewQtDelegateQuick in the focus chain. - QQuickItem* current = QQuickItemPrivate::nextPrevItemInTabFocusChain(q, !reverse); - if (!qobject_cast(current) && !qobject_cast(current)) - current = q; - focusNextPrev(current, !reverse); + focusNextPrev(q, !reverse); } void QQuickWebEngineViewPrivate::titleChanged(const QString &title) @@ -364,6 +358,10 @@ QQuickWebEngineView::QQuickWebEngineView(QQuickItem *parent) Q_D(QQuickWebEngineView); d->e->q_ptr = this; d->adapter->initialize(d); + + this->setFocus(true); + this->setActiveFocusOnTab(true); + this->setFlag(QQuickItem::ItemIsFocusScope); } QQuickWebEngineView::~QQuickWebEngineView() @@ -472,6 +470,17 @@ void QQuickWebEngineView::setInspectable(bool enable) d->adapter->enableInspector(enable); } +void QQuickWebEngineView::forceActiveFocus() +{ + Q_FOREACH (QQuickItem *child, childItems()) { + if (qobject_cast(child) + || qobject_cast(child)) { + child->forceActiveFocus(); + break; + } + } +} + void QQuickWebEngineViewExperimental::setIsFullScreen(bool fullscreen) { d_ptr->m_isFullScreen = fullscreen; diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h index f17f5d11a..3ad2e59b7 100644 --- a/src/webengine/api/qquickwebengineview_p.h +++ b/src/webengine/api/qquickwebengineview_p.h @@ -78,6 +78,7 @@ public: bool canGoForward() const; bool inspectable() const; void setInspectable(bool); + void forceActiveFocus(); enum LoadStatus { LoadStartedStatus, diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.h b/src/webengine/render_widget_host_view_qt_delegate_quick.h index 30f4a6003..866cf23ea 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.h +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.h @@ -60,10 +60,6 @@ public: : ItemBaseT(parent) , m_client(client) { - this->setFocus(true); - this->setActiveFocusOnTab(true); - this->setFlag(QQuickItem::ItemIsFocusScope); - this->setAcceptedMouseButtons(Qt::AllButtons); this->setAcceptHoverEvents(true); } -- cgit v1.2.3