diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2014-03-05 03:37:04 -0800 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-13 16:21:15 +0100 |
commit | c47bc7986e3a158fcb505992df084372a4a0e3bf (patch) | |
tree | 6a3b76d005b6b29071bd47417ff13e5e8bb4e94f /src/webengine/api/qquickwebengineview.cpp | |
parent | d1deca6c120bf5087d22b506d8994884598a7987 (diff) |
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 <zeno.albisser@digia.com>
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'src/webengine/api/qquickwebengineview.cpp')
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
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<RenderWidgetHostViewQtDelegateQuick*>(current) && !qobject_cast<RenderWidgetHostViewQtDelegateQuickPainted*>(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<RenderWidgetHostViewQtDelegateQuick *>(child) + || qobject_cast<RenderWidgetHostViewQtDelegateQuickPainted *>(child)) { + child->forceActiveFocus(); + break; + } + } +} + void QQuickWebEngineViewExperimental::setIsFullScreen(bool fullscreen) { d_ptr->m_isFullScreen = fullscreen; |