From 9a3641f43572ce9e77dd6770f0029e82bd92d70c Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Date: Tue, 13 Aug 2013 18:56:34 +0200 Subject: [PATCH] Use QObject::d_ptr for public API classes This follows the model used by the rest of Qt, potentially avoiding binary compatibility issues. The compromise is that we now depend on core-private, thus forcing us to follow Qt's release cycle. Change-Id: Ib2df51071fc35935ac99edf7b9c5562949cb43e2 Reviewed-by: Andras Becsi <andras.becsi@digia.com> --- lib/quick/qquickwebengineview.cpp | 5 ++--- lib/quick/qquickwebengineview_p.h | 5 +---- lib/quick/qquickwebengineview_p_p.h | 4 ++-- lib/quick/quick.pro | 1 + lib/widgets/Api/qwebengineview.cpp | 14 ++++++++------ lib/widgets/Api/qwebengineview.h | 4 +--- lib/widgets/Api/qwebengineview_p.h | 5 ++--- lib/widgets/widgets.pro | 1 + 8 files changed, 18 insertions(+), 21 deletions(-) diff --git a/lib/quick/qquickwebengineview.cpp b/lib/quick/qquickwebengineview.cpp index 587906698..9a728cd78 100644 --- a/lib/quick/qquickwebengineview.cpp +++ b/lib/quick/qquickwebengineview.cpp @@ -97,10 +97,9 @@ void QQuickWebEngineViewPrivate::focusContainer() q->forceActiveFocus(); } -QQuickWebEngineView::QQuickWebEngineView() - : d_ptr(new QQuickWebEngineViewPrivate) +QQuickWebEngineView::QQuickWebEngineView(QQuickItem *parent) + : QQuickItem(*(new QQuickWebEngineViewPrivate), parent) { - d_ptr->q_ptr = this; } QQuickWebEngineView::~QQuickWebEngineView() diff --git a/lib/quick/qquickwebengineview_p.h b/lib/quick/qquickwebengineview_p.h index 2aa34c033..484f6bba6 100644 --- a/lib/quick/qquickwebengineview_p.h +++ b/lib/quick/qquickwebengineview_p.h @@ -43,7 +43,6 @@ #define QQUICKWEBENGINEVIEW_P_H #include <QQuickItem> -#include <QScopedPointer> class QQuickWebEngineViewPrivate; @@ -56,7 +55,7 @@ class QQuickWebEngineView : public QQuickItem { Q_PROPERTY(bool canGoForward READ canGoForward NOTIFY loadingStateChanged) public: - QQuickWebEngineView(); + QQuickWebEngineView(QQuickItem *parent = 0); ~QQuickWebEngineView(); QUrl url() const; @@ -82,8 +81,6 @@ protected: private: Q_DECLARE_PRIVATE(QQuickWebEngineView) - // Hides QObject::d_ptr allowing us to use the convenience macros. - QScopedPointer<QQuickWebEngineViewPrivate> d_ptr; }; QML_DECLARE_TYPE(QQuickWebEngineView) diff --git a/lib/quick/qquickwebengineview_p_p.h b/lib/quick/qquickwebengineview_p_p.h index 0997fe08c..a30c60883 100644 --- a/lib/quick/qquickwebengineview_p_p.h +++ b/lib/quick/qquickwebengineview_p_p.h @@ -45,14 +45,14 @@ #include "web_contents_adapter_client.h" #include <QScopedPointer> +#include <QtQuick/private/qquickitem_p.h> class QQuickWebEngineView; class RenderWidgetHostViewQtDelegateQuick; class WebContentsAdapter; -class QQuickWebEngineViewPrivate : public WebContentsAdapterClient +class QQuickWebEngineViewPrivate : public QQuickItemPrivate, public WebContentsAdapterClient { - QQuickWebEngineView *q_ptr; Q_DECLARE_PUBLIC(QQuickWebEngineView) public: QQuickWebEngineViewPrivate(); diff --git a/lib/quick/quick.pro b/lib/quick/quick.pro index bb6acc179..cd7172a1f 100644 --- a/lib/quick/quick.pro +++ b/lib/quick/quick.pro @@ -4,6 +4,7 @@ TARGETPATH = QtWebEngine IMPORT_VERSION = 1.0 QT += qml quick +QT_PRIVATE += qml-private v8-private quick-private gui-private core-private INCLUDEPATH += ../ diff --git a/lib/widgets/Api/qwebengineview.cpp b/lib/widgets/Api/qwebengineview.cpp index a7a135fc8..369aa6efa 100644 --- a/lib/widgets/Api/qwebengineview.cpp +++ b/lib/widgets/Api/qwebengineview.cpp @@ -49,19 +49,22 @@ #include <QUrl> QWebEngineViewPrivate::QWebEngineViewPrivate() - : m_isLoading(false) + : QWidgetPrivate(QObjectPrivateVersion) + , m_isLoading(false) , adapter(new WebContentsAdapter(this)) { } void QWebEngineViewPrivate::titleChanged(const QString &title) { - Q_EMIT q_ptr->titleChanged(title); + Q_Q(QWebEngineView); + Q_EMIT q->titleChanged(title); } void QWebEngineViewPrivate::urlChanged(const QUrl &url) { - Q_EMIT q_ptr->urlChanged(url); + Q_Q(QWebEngineView); + Q_EMIT q->urlChanged(url); } void QWebEngineViewPrivate::loadingStateChanged() @@ -99,10 +102,9 @@ RenderWidgetHostViewQtDelegate *QWebEngineViewPrivate::CreateRenderWidgetHostVie return new RenderWidgetHostViewQtDelegateWidget; } -QWebEngineView::QWebEngineView() - : d_ptr(new QWebEngineViewPrivate) +QWebEngineView::QWebEngineView(QWidget *parent) + : QWidget(*(new QWebEngineViewPrivate), parent, 0) { - d_ptr->q_ptr=this; // This causes the child RenderWidgetHostViewQtDelegateWidgets to fill this widget. setLayout(new QStackedLayout); } diff --git a/lib/widgets/Api/qwebengineview.h b/lib/widgets/Api/qwebengineview.h index a86218538..b75f62369 100644 --- a/lib/widgets/Api/qwebengineview.h +++ b/lib/widgets/Api/qwebengineview.h @@ -45,14 +45,13 @@ #include <qtwebenginewidgetsglobal.h> #include <QWidget> -#include <QScopedPointer> class QWebEngineViewPrivate; class QWEBENGINEWIDGETS_EXPORT QWebEngineView : public QWidget { Q_OBJECT public: - QWebEngineView(); + QWebEngineView(QWidget *parent = 0); ~QWebEngineView(); void load(const QUrl& url); @@ -73,7 +72,6 @@ Q_SIGNALS: private: Q_DECLARE_PRIVATE(QWebEngineView); - QScopedPointer<QWebEngineViewPrivate> d_ptr; }; #endif // QWEBENGINEVIEW_H diff --git a/lib/widgets/Api/qwebengineview_p.h b/lib/widgets/Api/qwebengineview_p.h index 5c623a097..9ac5e57e8 100644 --- a/lib/widgets/Api/qwebengineview_p.h +++ b/lib/widgets/Api/qwebengineview_p.h @@ -45,16 +45,15 @@ #include "web_contents_adapter_client.h" #include <QScopedPointer> +#include <QtWidgets/private/qwidget_p.h> class QWebEngineView; class RenderWidgetHostViewQtDelegate; class WebContentsAdapter; -class QWebEngineViewPrivate : public WebContentsAdapterClient +class QWebEngineViewPrivate : public QWidgetPrivate, public WebContentsAdapterClient { Q_DECLARE_PUBLIC(QWebEngineView) - QWebEngineView *q_ptr; - public: QWebEngineViewPrivate(); diff --git a/lib/widgets/widgets.pro b/lib/widgets/widgets.pro index 9a5591b82..45b71284e 100644 --- a/lib/widgets/widgets.pro +++ b/lib/widgets/widgets.pro @@ -10,6 +10,7 @@ MODULE = webenginewidgets DEFINES += QT_BUILD_WEBENGINEWIDGETS_LIB QT += widgets +QT_PRIVATE += widgets-private gui-private core-private # FIXME: all this should eventually be turned into QT += webenginecore macx:LIBPATH = $$getOutDir()/$$getConfigDir() -- GitLab