From 6e30faba7338d805a3c33cd73677c1d73480dec9 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann <thomas.hartmann@qt.io> Date: Tue, 21 Feb 2017 15:00:26 +0100 Subject: [PATCH] QmlDesigner: Quick fix for Popup This is a quickfix for Controls 2 Popup, Drawer, Menu and Dialog. We pretend everything derived from QtQuick.Controls.Popup is an item instead of a QQObject. Change-Id: I603dce8a1a1b08df3e2c1dccc0fa57e7ccef0800 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io> --- .../qml2puppet/instances/objectnodeinstance.cpp | 12 ++++++++++-- .../designercore/metainfo/nodemetainfo.cpp | 4 +++- .../qmldesigner/designercore/model/qmlitemnode.cpp | 3 +++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp index 6bd10a2e0b8..8cd156345da 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp @@ -605,14 +605,22 @@ ObjectNodeInstance::Pointer ObjectNodeInstance::create(QObject *object) QObject *ObjectNodeInstance::createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context) { - QObject *object = QmlPrivateGate::createPrimitive(typeName, majorNumber, minorNumber, context); + QString polishTypeName = typeName; + if (typeName == "QtQuick.Controls/Popup" + || typeName == "QtQuick.Controls/Drawer" + || typeName == "QtQuick.Controls/Dialog" + || typeName == "QtQuick.Controls/Menu" + || typeName == "QtQuick.Controls/ToolTip") + polishTypeName = "QtQuick/Item"; + + QObject *object = QmlPrivateGate::createPrimitive(polishTypeName, majorNumber, minorNumber, context); /* Let's try to create the primitive from source, since with incomplete meta info this might be a pure * QML type. This is the case for example if a C++ type is mocked up with a QML file. */ if (!object) - object = createPrimitiveFromSource(typeName, majorNumber, minorNumber, context); + object = createPrimitiveFromSource(polishTypeName, majorNumber, minorNumber, context); return object; } diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index 6c5650359dc..17b1cf08628 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -1560,7 +1560,9 @@ bool NodeMetaInfo::isSubclassOf(const TypeName &type, int majorVersion, int mino bool NodeMetaInfo::isGraphicalItem() const { - return isSubclassOf("QtQuick.Item") || isSubclassOf("QtQuick.Window.Window"); + return isSubclassOf("QtQuick.Item") + || isSubclassOf("QtQuick.Window.Window") + || isSubclassOf("QtQuick.Controls.Popup"); } void NodeMetaInfo::clearCache() diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index fa3f719ae29..4345a87c8eb 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -54,6 +54,9 @@ bool QmlItemNode::isItemOrWindow(const ModelNode &modelNode) if (modelNode.metaInfo().isSubclassOf("QtQuick.Window.Window") && modelNode.isRootNode()) return true; + if (modelNode.metaInfo().isSubclassOf("QtQuick.Controls.Popup")) + return true; + return false; } -- GitLab