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