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 | |
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')
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 23 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p.h | 1 | ||||
-rw-r--r-- | src/webengine/render_widget_host_view_qt_delegate_quick.h | 4 |
3 files changed, 17 insertions, 11 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; 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); } |