From 3ef45d0329858a60a8b96363fcf9d7fe9b6d8311 Mon Sep 17 00:00:00 2001
From: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Date: Mon, 30 Jun 2014 12:13:16 +0200
Subject: [PATCH] Don't use the private QQmlMetaType::defaultProperty

Duplicate the small implementation of that function, which uses
QMetaObject public API together with the semi-public fact that
the meta class info named DefaultProperty needs to be fetched.

Change-Id: I37413bd28a0b0ead55853e4e3db5864dfc39966b
Reviewed-by: Michael Bruning <michael.bruning@digia.com>
---
 src/webengine/api/qquickwebengineview.cpp |  3 +--
 src/webengine/ui_delegates_manager.cpp    | 19 +++++++++++++++----
 src/webengine/ui_delegates_manager.h      |  1 +
 3 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 3fbd53d34..cbd45842d 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -60,7 +60,6 @@
 #include <QScreen>
 #include <QStringBuilder>
 #include <QUrl>
-#include <private/qqmlmetatype_p.h>
 #include <private/qquickaccessibleattached_p.h>
 
 QT_BEGIN_NAMESPACE
@@ -184,7 +183,7 @@ bool QQuickWebEngineViewPrivate::contextMenuRequested(const WebEngineContextMenu
         ui()->addMenuSeparator(menu);
         if (QObject* menuExtras = contextMenuExtraItems->create(ui()->creationContextForComponent(contextMenuExtraItems))) {
             menuExtras->setParent(menu);
-            QQmlListReference entries(menu, QQmlMetaType::defaultProperty(menu).name(), qmlEngine(q));
+            QQmlListReference entries(menu, defaultPropertyName(menu), qmlEngine(q));
             if (entries.isValid())
                 entries.append(menuExtras);
         }
diff --git a/src/webengine/ui_delegates_manager.cpp b/src/webengine/ui_delegates_manager.cpp
index 7790d2d55..5c0b0f65e 100644
--- a/src/webengine/ui_delegates_manager.cpp
+++ b/src/webengine/ui_delegates_manager.cpp
@@ -52,7 +52,6 @@
 #include <QQmlEngine>
 #include <QQmlProperty>
 #include <QStringBuilder>
-#include <private/qqmlmetatype_p.h>
 
 // Uncomment for QML debugging
 //#define UI_DELEGATES_DEBUG
@@ -94,6 +93,18 @@ static QString getUIDelegatesImportDir(QQmlEngine *engine) {
     return importDir;
 }
 
+const char *defaultPropertyName(QObject *obj)
+{
+    const QMetaObject *metaObject = obj->metaObject();
+
+    int idx = metaObject->indexOfClassInfo("DefaultProperty");
+    if (-1 == idx)
+        return 0;
+
+    QMetaClassInfo info = metaObject->classInfo(idx);
+    return info.value();
+}
+
 MenuItemHandler::MenuItemHandler(QObject *parent)
     : QObject(parent)
 {
@@ -208,7 +219,7 @@ void UIDelegatesManager::addMenuItem(MenuItemHandler *menuItemHandler, const QSt
     QObject *menu = menuItemHandler->parent();
     it->setParent(menu);
 
-    QQmlListReference entries(menu, QQmlMetaType::defaultProperty(menu).name(), qmlEngine(m_view));
+    QQmlListReference entries(menu, defaultPropertyName(menu), qmlEngine(m_view));
     if (entries.isValid())
         entries.append(it);
 }
@@ -222,7 +233,7 @@ void UIDelegatesManager::addMenuSeparator(QObject *menu)
     QObject *sep = menuSeparatorComponent->create(itemContext);
     sep->setParent(menu);
 
-    QQmlListReference entries(menu, QQmlMetaType::defaultProperty(menu).name(), qmlEngine(m_view));
+    QQmlListReference entries(menu, defaultPropertyName(menu), qmlEngine(m_view));
     if (entries.isValid())
         entries.append(sep);
 }
@@ -250,7 +261,7 @@ QObject *UIDelegatesManager::addMenu(QObject *parentMenu, const QString &title,
     } else {
         menu->setParent(parentMenu);
 
-        QQmlListReference entries(parentMenu, QQmlMetaType::defaultProperty(parentMenu).name(), qmlEngine(m_view));
+        QQmlListReference entries(parentMenu, defaultPropertyName(parentMenu), qmlEngine(m_view));
         if (entries.isValid())
             entries.append(menu);
     }
diff --git a/src/webengine/ui_delegates_manager.h b/src/webengine/ui_delegates_manager.h
index 125cacff4..6f8d8b097 100644
--- a/src/webengine/ui_delegates_manager.h
+++ b/src/webengine/ui_delegates_manager.h
@@ -75,6 +75,7 @@ class QQmlContext;
 class QQuickWebEngineView;
 QT_END_NAMESPACE
 
+const char *defaultPropertyName(QObject *obj);
 
 class MenuItemHandler : public QObject {
 Q_OBJECT
-- 
GitLab