diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2013-11-15 16:50:46 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-11-18 14:53:15 +0100 |
commit | a867d7673b9770fafa42907fffb5886d5f8d4c9c (patch) | |
tree | f90601ab2db8337aa8f0c7870d3e582c3f543ed8 | |
parent | ec7b2ee70a8b2db7fb87f50671a001ddd54697b0 (diff) |
Add a WebEngine.experimental QtQuick plugin library.
Bring this QtWebKit concept to our API as well to contain APIs that
we aren't comfortable adding to the supported-forever group yet and
allow trying them out unofficially for an undetermined number of
releases first.
Change-Id: I52c8655dfd2996ea461ac6c00de975002827a4c3
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Reviewed-by: Arvid Nilsson <anilsson@blackberry.com>
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
-rw-r--r-- | lib/quick/plugin/experimental/experimental.pro | 13 | ||||
-rw-r--r-- | lib/quick/plugin/experimental/plugin.cpp | 77 | ||||
-rw-r--r-- | lib/quick/plugin/experimental/qmldir | 3 | ||||
-rw-r--r-- | lib/quick/qquickwebengineview.cpp | 14 | ||||
-rw-r--r-- | lib/quick/qquickwebengineview_p.h | 2 | ||||
-rw-r--r-- | lib/quick/qquickwebengineview_p_p.h | 18 | ||||
-rw-r--r-- | qtwebengine.pro | 10 |
7 files changed, 134 insertions, 3 deletions
diff --git a/lib/quick/plugin/experimental/experimental.pro b/lib/quick/plugin/experimental/experimental.pro new file mode 100644 index 000000000..7ccfdaa76 --- /dev/null +++ b/lib/quick/plugin/experimental/experimental.pro @@ -0,0 +1,13 @@ +CXX_MODULE = qml +TARGET = qtwebengineexperimentalplugin +TARGETPATH = QtWebEngine/experimental +IMPORT_VERSION = 1.0 + +QT += webengine qml quick +QT_PRIVATE += webengine-private qml-private quick-private gui-private core-private + +INCLUDEPATH += $$QTWEBENGINE_ROOT/lib $$QTWEBENGINE_ROOT/lib/quick + +SOURCES = plugin.cpp + +load(qml_plugin) diff --git a/lib/quick/plugin/experimental/plugin.cpp b/lib/quick/plugin/experimental/plugin.cpp new file mode 100644 index 000000000..08d482508 --- /dev/null +++ b/lib/quick/plugin/experimental/plugin.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtQml/qqmlextensionplugin.h> + +#include "qquickwebengineview_p.h" +#include "qquickwebengineview_p_p.h" + +QT_BEGIN_NAMESPACE + +class QQuickWebEngineViewExperimentalExtension : public QObject { + Q_OBJECT + Q_PROPERTY(QQuickWebEngineViewExperimental* experimental READ experimental CONSTANT FINAL) +public: + QQuickWebEngineViewExperimentalExtension(QObject *parent = 0) : QObject(parent) { } + QQuickWebEngineViewExperimental* experimental() { return static_cast<QQuickWebEngineView*>(parent())->d_func()->experimental(); } +}; + +class QtWebEngineExperimentalPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0") +public: + virtual void registerTypes(const char *uri) + { + qWarning("\nWARNING: This project is using the experimental QML API extensions for QtWebEngine and is therefore tied to a specific QtWebEngine release.\n" + "WARNING: The experimental API will change from version to version, or even be removed. You have been warned!\n"); + + Q_ASSERT(QLatin1String(uri) == QLatin1String("QtWebEngine.experimental")); + + qmlRegisterExtendedType<QQuickWebEngineView, QQuickWebEngineViewExperimentalExtension>(uri, 1, 0, "WebEngineView"); + qmlRegisterUncreatableType<QQuickWebEngineViewExperimental>(uri, 1, 0, "WebEngineViewExperimental", + QObject::tr("Cannot create a separate instance of WebEngineViewExperimental")); + } +}; + +QT_END_NAMESPACE + +#include "plugin.moc" diff --git a/lib/quick/plugin/experimental/qmldir b/lib/quick/plugin/experimental/qmldir new file mode 100644 index 000000000..56ad22e70 --- /dev/null +++ b/lib/quick/plugin/experimental/qmldir @@ -0,0 +1,3 @@ +module QtWebEngine.experimental +plugin qtwebengineexperimentalplugin +typeinfo plugins.qmltypes diff --git a/lib/quick/qquickwebengineview.cpp b/lib/quick/qquickwebengineview.cpp index 970033a22..4cfff0102 100644 --- a/lib/quick/qquickwebengineview.cpp +++ b/lib/quick/qquickwebengineview.cpp @@ -51,12 +51,18 @@ QT_BEGIN_NAMESPACE QQuickWebEngineViewPrivate::QQuickWebEngineViewPrivate() : adapter(new WebContentsAdapter(qApp->property("QQuickWebEngineView_DisableHardwareAcceleration").toBool() ? SoftwareRenderingMode : HardwareAccelerationMode)) + , e(new QQuickWebEngineViewExperimental(this)) , loadProgress(0) , inspectable(false) { adapter->initialize(this); } +QQuickWebEngineViewExperimental *QQuickWebEngineViewPrivate::experimental() const +{ + return e; +} + RenderWidgetHostViewQtDelegate *QQuickWebEngineViewPrivate::CreateRenderWidgetHostViewQtDelegate(RenderWidgetHostViewQtDelegateClient *client, RenderingMode mode) { #if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)) @@ -134,6 +140,8 @@ void QQuickWebEngineViewPrivate::close() QQuickWebEngineView::QQuickWebEngineView(QQuickItem *parent) : QQuickItem(*(new QQuickWebEngineViewPrivate), parent) { + Q_D(const QQuickWebEngineView); + d->e->q_ptr = this; } QQuickWebEngineView::~QQuickWebEngineView() @@ -239,4 +247,10 @@ void QQuickWebEngineView::geometryChanged(const QRectF &newGeometry, const QRect } } +QQuickWebEngineViewExperimental::QQuickWebEngineViewExperimental(QQuickWebEngineViewPrivate *viewPrivate) + : q_ptr(0) + , d_ptr(viewPrivate) +{ +} + QT_END_NAMESPACE diff --git a/lib/quick/qquickwebengineview_p.h b/lib/quick/qquickwebengineview_p.h index 270ad779c..943ce0804 100644 --- a/lib/quick/qquickwebengineview_p.h +++ b/lib/quick/qquickwebengineview_p.h @@ -93,6 +93,8 @@ protected: private: Q_DECLARE_PRIVATE(QQuickWebEngineView) + friend class QQuickWebEngineViewExperimental; + friend class QQuickWebEngineViewExperimentalExtension; }; QT_END_NAMESPACE diff --git a/lib/quick/qquickwebengineview_p_p.h b/lib/quick/qquickwebengineview_p_p.h index 541022538..e7c87ce1d 100644 --- a/lib/quick/qquickwebengineview_p_p.h +++ b/lib/quick/qquickwebengineview_p_p.h @@ -53,12 +53,27 @@ class WebContentsAdapter; QT_BEGIN_NAMESPACE class QQuickWebEngineView; +class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewExperimental : public QObject { + Q_OBJECT +public: + +private: + QQuickWebEngineViewExperimental(QQuickWebEngineViewPrivate* viewPrivate); + QQuickWebEngineView *q_ptr; + QQuickWebEngineViewPrivate *d_ptr; + + Q_DECLARE_PRIVATE(QQuickWebEngineView) + Q_DECLARE_PUBLIC(QQuickWebEngineView) +}; + class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewPrivate : public QQuickItemPrivate, public WebContentsAdapterClient { public: Q_DECLARE_PUBLIC(QQuickWebEngineView) QQuickWebEngineViewPrivate(); + QQuickWebEngineViewExperimental *experimental() const; + virtual RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate(RenderWidgetHostViewQtDelegateClient *client, RenderingMode) Q_DECL_OVERRIDE; virtual void titleChanged(const QString&) Q_DECL_OVERRIDE; virtual void urlChanged(const QUrl&) Q_DECL_OVERRIDE; @@ -74,6 +89,7 @@ public: virtual bool javascriptDialog(JavascriptDialogType type, const QString &message, const QString &defaultValue = QString(), QString *result = 0) Q_DECL_OVERRIDE { return false; } QExplicitlySharedDataPointer<WebContentsAdapter> adapter; + QQuickWebEngineViewExperimental *e; QUrl icon; int loadProgress; bool inspectable; @@ -81,4 +97,6 @@ public: QT_END_NAMESPACE +QML_DECLARE_TYPE(QQuickWebEngineViewExperimental) + #endif // QQUICKWEBENGINEVIEW_P_P_H diff --git a/qtwebengine.pro b/qtwebengine.pro index b640e5414..71396207a 100644 --- a/qtwebengine.pro +++ b/qtwebengine.pro @@ -18,12 +18,15 @@ webengine_lib.depends = build quick_plugin_lib.subdir = lib/quick/plugin quick_plugin_lib.target = sub-quick-plugin-lib quick_plugin_lib.depends = webengine_lib +quick_experimental_plugin_lib.subdir = lib/quick/plugin/experimental +quick_experimental_plugin_lib.target = sub-quick-experimental-plugin-lib +quick_experimental_plugin_lib.depends = webengine_lib widgets_lib.subdir = lib/widgets widgets_lib.target = sub-widgets-lib widgets_lib.depends = build -sub_examples.depends = quick_plugin_lib -sub_tests.depends = quick_plugin_lib +sub_examples.depends = quick_plugin_lib quick_experimental_plugin_lib +sub_tests.depends = quick_plugin_lib quick_experimental_plugin_lib # This is where we use the generated gypi files and run gyp_qtwebengine build.depends = resources shared lib process @@ -35,7 +38,8 @@ SUBDIRS += qmake_extras \ process \ build \ webengine_lib \ - quick_plugin_lib + quick_plugin_lib \ + quick_experimental_plugin_lib qtHaveModule(widgets) { SUBDIRS += widgets_lib |