diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 26 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p.h | 8 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p_p.h | 1 | ||||
-rw-r--r-- | src/webengine/plugin/experimental/plugin.cpp | 4 | ||||
-rw-r--r-- | src/webengine/plugin/plugin.cpp | 3 | ||||
-rw-r--r-- | src/webengine/plugin/plugin.pro | 2 | ||||
-rw-r--r-- | src/webengine/render_widget_host_view_qt_delegate_quick.cpp | 15 |
7 files changed, 50 insertions, 9 deletions
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 11e4d018c..f5210a816 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -103,6 +103,7 @@ QQuickWebEngineViewPrivate::QQuickWebEngineViewPrivate() , loadProgress(0) , m_isFullScreen(false) , isLoading(false) + , m_activeFocusOnPress(true) , devicePixelRatio(QGuiApplication::primaryScreen()->devicePixelRatio()) , m_dpiScale(1.0) { @@ -758,8 +759,23 @@ void QQuickWebEngineView::setTestSupport(QQuickWebEngineTestSupport *testSupport Q_D(QQuickWebEngineView); d->m_testSupport = testSupport; } + #endif +/*! + * \qmlproperty bool WebEngineView::activeFocusOnPress + * \since QtWebEngine 1.2 + * + * This property specifies whether the view should gain active focus when pressed. + * The default value is true. + * + */ +bool QQuickWebEngineView::activeFocusOnPress() const +{ + Q_D(const QQuickWebEngineView); + return d->m_activeFocusOnPress; +} + void QQuickWebEngineViewPrivate::didRunJavaScript(quint64 requestId, const QVariant &result) { Q_Q(QQuickWebEngineView); @@ -960,6 +976,16 @@ void QQuickWebEngineView::grantFeaturePermission(const QUrl &securityOrigin, QQu } } +void QQuickWebEngineView::setActiveFocusOnPress(bool arg) +{ + Q_D(QQuickWebEngineView); + if (d->m_activeFocusOnPress == arg) + return; + + d->m_activeFocusOnPress = arg; + emit activeFocusOnPressChanged(arg); +} + void QQuickWebEngineView::goBackOrForward(int offset) { Q_D(QQuickWebEngineView); diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h index 40299c1c5..462278571 100644 --- a/src/webengine/api/qquickwebengineview_p.h +++ b/src/webengine/api/qquickwebengineview_p.h @@ -73,6 +73,8 @@ private: bool m_toggleOn; }; +#define LATEST_WEBENGINEVIEW_REVISION 2 + class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineView : public QQuickItem { Q_OBJECT Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged) @@ -89,6 +91,7 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineView : public QQuickItem { Q_PROPERTY(QQuickWebEngineHistory *navigationHistory READ navigationHistory CONSTANT FINAL REVISION 1) Q_PROPERTY(QQmlWebChannel *webChannel READ webChannel WRITE setWebChannel NOTIFY webChannelChanged REVISION 1) Q_PROPERTY(QQmlListProperty<QQuickWebEngineScript> userScripts READ userScripts FINAL) + Q_PROPERTY(bool activeFocusOnPress READ activeFocusOnPress WRITE setActiveFocusOnPress NOTIFY activeFocusOnPressChanged REVISION 2) #ifdef ENABLE_QML_TESTSUPPORT_API Q_PROPERTY(QQuickWebEngineTestSupport *testSupport READ testSupport WRITE setTestSupport FINAL) @@ -200,6 +203,8 @@ public: void setTestSupport(QQuickWebEngineTestSupport *testSupport); #endif + bool activeFocusOnPress() const; + public Q_SLOTS: void runJavaScript(const QString&, const QJSValue & = QJSValue()); void loadHtml(const QString &html, const QUrl &baseUrl = QUrl()); @@ -212,6 +217,7 @@ public Q_SLOTS: Q_REVISION(1) void findText(const QString &subString, FindFlags options = 0, const QJSValue &callback = QJSValue()); Q_REVISION(1) void fullScreenCancelled(); Q_REVISION(1) void grantFeaturePermission(const QUrl &securityOrigin, Feature, bool granted); + Q_REVISION(2) void setActiveFocusOnPress(bool arg); Q_SIGNALS: void titleChanged(); @@ -230,7 +236,7 @@ Q_SIGNALS: Q_REVISION(1) void zoomFactorChanged(qreal arg); Q_REVISION(1) void profileChanged(); Q_REVISION(1) void webChannelChanged(); - + Q_REVISION(2) void activeFocusOnPressChanged(bool); protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index a7c851e81..ad0e937a0 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -184,6 +184,7 @@ public: int loadProgress; bool m_isFullScreen; bool isLoading; + bool m_activeFocusOnPress; qreal devicePixelRatio; QMap<quint64, QJSValue> m_callbacks; QList<QSharedPointer<CertificateErrorController> > m_certificateErrorControllers; diff --git a/src/webengine/plugin/experimental/plugin.cpp b/src/webengine/plugin/experimental/plugin.cpp index 29b5413f4..21def1a66 100644 --- a/src/webengine/plugin/experimental/plugin.cpp +++ b/src/webengine/plugin/experimental/plugin.cpp @@ -61,14 +61,14 @@ public: Q_ASSERT(QLatin1String(uri) == QLatin1String("QtWebEngine.experimental")); - qmlRegisterExtendedType<QQuickWebEngineView, QQuickWebEngineViewExperimentalExtension>(uri, 1, 0, "WebEngineView"); + qmlRegisterExtendedType<QQuickWebEngineView, QQuickWebEngineViewExperimentalExtension>(uri, 1, 2, "WebEngineView"); qmlRegisterUncreatableType<QQuickWebEngineViewExperimental>(uri, 1, 0, "WebEngineViewExperimental", QObject::tr("Cannot create a separate instance of WebEngineViewExperimental")); qmlRegisterUncreatableType<QQuickWebEngineViewport>(uri, 1, 0, "WebEngineViewport", QObject::tr("Cannot create a separate instance of WebEngineViewport")); // Use the latest revision of QQuickWebEngineView when importing QtWebEngine.experimental 1.0 - qmlRegisterRevision<QQuickWebEngineView, 1>(uri, 1, 0); + qmlRegisterRevision<QQuickWebEngineView, LATEST_WEBENGINEVIEW_REVISION>(uri, 1, LATEST_WEBENGINEVIEW_REVISION); } }; diff --git a/src/webengine/plugin/plugin.cpp b/src/webengine/plugin/plugin.cpp index c5ef11a5e..cc95fb01f 100644 --- a/src/webengine/plugin/plugin.cpp +++ b/src/webengine/plugin/plugin.cpp @@ -83,6 +83,9 @@ public: QObject::tr("Cannot create a separate instance of NavigationHistory")); qmlRegisterUncreatableType<QQuickWebEngineFullScreenRequest>(uri, 1, 1, "FullScreenRequest", QObject::tr("Cannot create a separate instance of FullScreenRequest")); + + // For now (1.x import), the latest revision matches the minor version of the import. + qmlRegisterRevision<QQuickWebEngineView, LATEST_WEBENGINEVIEW_REVISION>(uri, 1, LATEST_WEBENGINEVIEW_REVISION); } }; diff --git a/src/webengine/plugin/plugin.pro b/src/webengine/plugin/plugin.pro index 5682e90ed..e033b2db5 100644 --- a/src/webengine/plugin/plugin.pro +++ b/src/webengine/plugin/plugin.pro @@ -1,7 +1,7 @@ CXX_MODULE = qml TARGET = qtwebengineplugin TARGETPATH = QtWebEngine -IMPORT_VERSION = 1.0 +IMPORT_VERSION = 1.2 QT += webengine qml quick QT_PRIVATE += webengine-private diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp index ebf1acf27..9fc1ed3eb 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp @@ -64,10 +64,14 @@ RenderWidgetHostViewQtDelegateQuick::RenderWidgetHostViewQtDelegateQuick(RenderW void RenderWidgetHostViewQtDelegateQuick::initAsChild(WebContentsAdapterClient* container) { - QQuickWebEngineViewPrivate *viewPrivate = static_cast<QQuickWebEngineViewPrivate *>(container); - setParentItem(viewPrivate->q_func()); - setSize(viewPrivate->q_func()->boundingRect().size()); + QQuickWebEngineView *view = static_cast<QQuickWebEngineViewPrivate *>(container)->q_func(); + setParentItem(view); + setSize(view->boundingRect().size()); + // Focus on creation if the view accepts it + if (view->activeFocusOnPress()) + setFocus(true); m_initialized = true; + } void RenderWidgetHostViewQtDelegateQuick::initAsPopup(const QRect &r) @@ -195,7 +199,7 @@ void RenderWidgetHostViewQtDelegateQuick::focusOutEvent(QFocusEvent *event) void RenderWidgetHostViewQtDelegateQuick::mousePressEvent(QMouseEvent *event) { - if (!m_isPopup) + if (!m_isPopup && (parentItem() && parentItem()->property("activeFocusOnPress").toBool())) forceActiveFocus(); m_client->forwardEvent(event); } @@ -227,7 +231,8 @@ void RenderWidgetHostViewQtDelegateQuick::wheelEvent(QWheelEvent *event) void RenderWidgetHostViewQtDelegateQuick::touchEvent(QTouchEvent *event) { - if (event->type() == QEvent::TouchBegin && !m_isPopup) + if (event->type() == QEvent::TouchBegin && !m_isPopup + && (parentItem() && parentItem()->property("activeFocusOnPress").toBool())) forceActiveFocus(); m_client->forwardEvent(event); } |