diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp index b8e5b67f70cb17d547e5690af4b1a7310a6f0851..c85e0232bd12c27b3de1290a3c8306e4ae4e6866 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp @@ -155,41 +155,8 @@ void NodeInstanceServer::stopRenderTimer() void NodeInstanceServer::createScene(const CreateSceneCommand &command) { - Q_ASSERT(!m_declarativeView.data()); - - m_declarativeView = new QDeclarativeView; - m_declarativeView->setViewportUpdateMode(QGraphicsView::NoViewportUpdate); - m_declarativeView->show(); - m_declarativeView->setAttribute(Qt::WA_DontShowOnScreen, true); - - if (!command.fileUrl().isEmpty()) - engine()->setBaseUrl(command.fileUrl()); - - addImports(command.imports()); - - static_cast<QGraphicsScenePrivate*>(QObjectPrivate::get(m_declarativeView->scene()))->processDirtyItemsEmitted = true; - - QList<ServerNodeInstance> instanceList = createInstances(command.instances()); - reparentInstances(command.reparentInstances()); - - foreach(const IdContainer &container, command.ids()) { - if (hasInstanceForId(container.instanceId())) - instanceForId(container.instanceId()).setId(container.id()); - } - - foreach(const PropertyValueContainer &container, command.valueChanges()) - setInstancePropertyVariant(container); - - foreach(const PropertyBindingContainer &container, command.bindingChanges()) - setInstancePropertyBinding(container); - - foreach(ServerNodeInstance instance, instanceList) - instance.doComponentComplete(); - - - - m_declarativeView->scene()->setSceneRect(rootNodeInstance().boundingRect()); - + initializeDeclarativeView(); + QList<ServerNodeInstance> instanceList = setupScene(command); nodeInstanceClient()->informationChanged(createAllInformationChangedCommand(instanceList, true)); nodeInstanceClient()->valuesChanged(createValuesChangedCommand(instanceList)); @@ -807,6 +774,52 @@ void NodeInstanceServer::resetAllItems() static_cast<QGraphicsScenePrivate*>(QObjectPrivate::get(m_declarativeView->scene()))->resetDirtyItem(item); } +void NodeInstanceServer::initializeDeclarativeView() +{ + Q_ASSERT(!m_declarativeView.data()); + + m_declarativeView = new QDeclarativeView; +#ifndef Q_WS_MAC + m_declarativeView->setAttribute(Qt::WA_DontShowOnScreen, true); +#endif + m_declarativeView->setViewportUpdateMode(QGraphicsView::NoViewportUpdate); + m_declarativeView->show(); +#ifdef Q_WS_MAC + m_declarativeView->setAttribute(Qt::WA_DontShowOnScreen, true); +#endif +} + +QList<ServerNodeInstance> NodeInstanceServer::setupScene(const CreateSceneCommand &command) +{ + if (!command.fileUrl().isEmpty()) + engine()->setBaseUrl(command.fileUrl()); + + addImports(command.imports()); + + static_cast<QGraphicsScenePrivate*>(QObjectPrivate::get(m_declarativeView->scene()))->processDirtyItemsEmitted = true; + + QList<ServerNodeInstance> instanceList = createInstances(command.instances()); + reparentInstances(command.reparentInstances()); + + foreach(const IdContainer &container, command.ids()) { + if (hasInstanceForId(container.instanceId())) + instanceForId(container.instanceId()).setId(container.id()); + } + + foreach(const PropertyValueContainer &container, command.valueChanges()) + setInstancePropertyVariant(container); + + foreach(const PropertyBindingContainer &container, command.bindingChanges()) + setInstancePropertyBinding(container); + + foreach(ServerNodeInstance instance, instanceList) + instance.doComponentComplete(); + + m_declarativeView->scene()->setSceneRect(rootNodeInstance().boundingRect()); + + return instanceList; +} + void NodeInstanceServer::findItemChangesAndSendChangeCommands() { static bool inFunction = false; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h index fb7af10d5f69f2d0160ff8422531f0d802724c91..c209a915a7bdecdf8513522f3fe4cc3ac78ef31e 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h @@ -121,6 +121,8 @@ protected: void startRenderTimer(); void slowDownRenderTimer(); void stopRenderTimer(); + void initializeDeclarativeView(); + QList<ServerNodeInstance> setupScene(const CreateSceneCommand &command); private: ServerNodeInstance m_rootNodeInstance;