From e365d93ed909be8595e4b9d28847c8ef4aa1dc4f Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 18 Jan 2016 16:50:26 -0800 Subject: [PATCH 1/9] don't save entites with invalid parentIDs (or with IDs that indicates an avatar) to the persist file --- libraries/entities/src/EntityTree.cpp | 5 +++-- libraries/entities/src/EntityTree.h | 3 ++- libraries/entities/src/RecurseOctreeToMapOperator.cpp | 10 ++++++++-- libraries/entities/src/RecurseOctreeToMapOperator.h | 4 +++- libraries/octree/src/Octree.cpp | 2 +- libraries/octree/src/Octree.h | 3 ++- libraries/shared/src/SpatiallyNestable.h | 2 ++ 7 files changed, 21 insertions(+), 8 deletions(-) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 1017f54f67..7acf2b6103 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1291,12 +1291,13 @@ void EntityTree::remapIDs() { recurseTreeWithOperator(&theOperator); } -bool EntityTree::writeToMap(QVariantMap& entityDescription, OctreeElementPointer element, bool skipDefaultValues) { +bool EntityTree::writeToMap(QVariantMap& entityDescription, OctreeElementPointer element, bool skipDefaultValues, + bool skipThoseWithBadParents) { if (! entityDescription.contains("Entities")) { entityDescription["Entities"] = QVariantList(); } QScriptEngine scriptEngine; - RecurseOctreeToMapOperator theOperator(entityDescription, element, &scriptEngine, skipDefaultValues); + RecurseOctreeToMapOperator theOperator(entityDescription, element, &scriptEngine, skipDefaultValues, skipThoseWithBadParents); recurseTreeWithOperator(&theOperator); return true; } diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index 0f77c4af9a..ba3d7a012e 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -199,7 +199,8 @@ public: void remapIDs(); - virtual bool writeToMap(QVariantMap& entityDescription, OctreeElementPointer element, bool skipDefaultValues) override; + virtual bool writeToMap(QVariantMap& entityDescription, OctreeElementPointer element, bool skipDefaultValues, + bool skipThoseWithBadParents) override; virtual bool readFromMap(QVariantMap& entityDescription) override; float getContentsLargestDimension(); diff --git a/libraries/entities/src/RecurseOctreeToMapOperator.cpp b/libraries/entities/src/RecurseOctreeToMapOperator.cpp index 81465bfaf5..e930d5ef5f 100644 --- a/libraries/entities/src/RecurseOctreeToMapOperator.cpp +++ b/libraries/entities/src/RecurseOctreeToMapOperator.cpp @@ -16,12 +16,14 @@ RecurseOctreeToMapOperator::RecurseOctreeToMapOperator(QVariantMap& map, OctreeElementPointer top, QScriptEngine* engine, - bool skipDefaultValues) : + bool skipDefaultValues, + bool skipThoseWithBadParents) : RecurseOctreeOperator(), _map(map), _top(top), _engine(engine), - _skipDefaultValues(skipDefaultValues) + _skipDefaultValues(skipDefaultValues), + _skipThoseWithBadParents(skipThoseWithBadParents) { // if some element "top" was given, only save information for that element and its children. if (_top) { @@ -47,6 +49,10 @@ bool RecurseOctreeToMapOperator::postRecursion(OctreeElementPointer element) { QVariantList entitiesQList = qvariant_cast(_map["Entities"]); entityTreeElement->forEachEntity([&](EntityItemPointer entityItem) { + if (_skipThoseWithBadParents && !entityItem->isParentIDValid()) { + return; // we weren't able to resolve a parent from _parentID, so don't save this entity. + } + EntityItemProperties properties = entityItem->getProperties(); QScriptValue qScriptValues; if (_skipDefaultValues) { diff --git a/libraries/entities/src/RecurseOctreeToMapOperator.h b/libraries/entities/src/RecurseOctreeToMapOperator.h index 35c7f1b6a9..c64cf91b61 100644 --- a/libraries/entities/src/RecurseOctreeToMapOperator.h +++ b/libraries/entities/src/RecurseOctreeToMapOperator.h @@ -13,7 +13,8 @@ class RecurseOctreeToMapOperator : public RecurseOctreeOperator { public: - RecurseOctreeToMapOperator(QVariantMap& map, OctreeElementPointer top, QScriptEngine* engine, bool skipDefaultValues); + RecurseOctreeToMapOperator(QVariantMap& map, OctreeElementPointer top, QScriptEngine* engine, bool skipDefaultValues, + bool skipThoseWithBadParents); bool preRecursion(OctreeElementPointer element); bool postRecursion(OctreeElementPointer element); private: @@ -22,4 +23,5 @@ public: QScriptEngine* _engine; bool _withinTop; bool _skipDefaultValues; + bool _skipThoseWithBadParents; }; diff --git a/libraries/octree/src/Octree.cpp b/libraries/octree/src/Octree.cpp index bdad5682a9..a685c2580c 100644 --- a/libraries/octree/src/Octree.cpp +++ b/libraries/octree/src/Octree.cpp @@ -1919,7 +1919,7 @@ void Octree::writeToJSONFile(const char* fileName, OctreeElementPointer element, entityDescription["Version"] = (int) expectedVersion; // store the entity data - bool entityDescriptionSuccess = writeToMap(entityDescription, top, true); + bool entityDescriptionSuccess = writeToMap(entityDescription, top, true, true); if (!entityDescriptionSuccess) { qCritical("Failed to convert Entities to QVariantMap while saving to json."); return; diff --git a/libraries/octree/src/Octree.h b/libraries/octree/src/Octree.h index 789d0f5600..0939ae37f6 100644 --- a/libraries/octree/src/Octree.h +++ b/libraries/octree/src/Octree.h @@ -304,7 +304,8 @@ public: void writeToFile(const char* filename, OctreeElementPointer element = NULL, QString persistAsFileType = "svo"); void writeToJSONFile(const char* filename, OctreeElementPointer element = NULL, bool doGzip = false); void writeToSVOFile(const char* filename, OctreeElementPointer element = NULL); - virtual bool writeToMap(QVariantMap& entityDescription, OctreeElementPointer element, bool skipDefaultValues) = 0; + virtual bool writeToMap(QVariantMap& entityDescription, OctreeElementPointer element, bool skipDefaultValues, + bool skipThoseWithBadParents) = 0; // Octree importers bool readFromFile(const char* filename); diff --git a/libraries/shared/src/SpatiallyNestable.h b/libraries/shared/src/SpatiallyNestable.h index dc38671091..75783fa6d5 100644 --- a/libraries/shared/src/SpatiallyNestable.h +++ b/libraries/shared/src/SpatiallyNestable.h @@ -118,6 +118,8 @@ public: void die() { _isDead = true; } bool isDead() const { return _isDead; } + bool isParentIDValid() const { bool success = false; getParentPointer(success); return success; } + protected: const NestableType _nestableType; // EntityItem or an AvatarData QUuid _id; From 939373547855d400f227a53786e6f60faab93905 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 19 Jan 2016 20:25:16 +1300 Subject: [PATCH 2/9] Make running scripts list scrollable with scroll bar --- .../resources/qml/dialogs/RunningScripts.qml | 63 ++++++++++--------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/interface/resources/qml/dialogs/RunningScripts.qml b/interface/resources/qml/dialogs/RunningScripts.qml index d259f747ad..26ec306567 100644 --- a/interface/resources/qml/dialogs/RunningScripts.qml +++ b/interface/resources/qml/dialogs/RunningScripts.qml @@ -111,8 +111,7 @@ Window { Button { text: "Stop all"; onClicked: stopAll() } } - ListView { - clip: true + ScrollView { anchors { top: allButtons.bottom; left: parent.left; @@ -122,45 +121,49 @@ Window { bottomMargin: 8 } - model: runningScriptsModel + ListView { + clip: true + anchors { fill: parent; margins: 0 } - delegate: Rectangle { - radius: 3 - anchors { left: parent.left; right: parent.right } + model: runningScriptsModel - height: scriptName.height + 12 - color: index % 2 ? "#ddd" : "#eee" + delegate: Rectangle { + radius: 3 + anchors { left: parent.left; right: parent.right } - Text { - anchors { left: parent.left; leftMargin: 4; verticalCenter: parent.verticalCenter } - id: scriptName - text: name - } + height: scriptName.height + 12 + color: index % 2 ? "#ddd" : "#eee" - Row { - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: 4 - spacing: 4 - HifiControls.FontAwesome { - text: "\uf021"; size: scriptName.height; - MouseArea { - anchors { fill: parent; margins: -2; } - onClicked: reloadScript(model.url) - } + Text { + anchors { left: parent.left; leftMargin: 4; verticalCenter: parent.verticalCenter } + id: scriptName + text: name } - HifiControls.FontAwesome { - size: scriptName.height; text: "\uf00d" - MouseArea { - anchors { fill: parent; margins: -2; } - onClicked: stopScript(model.url) + + Row { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 4 + spacing: 4 + HifiControls.FontAwesome { + text: "\uf021"; size: scriptName.height; + MouseArea { + anchors { fill: parent; margins: -2; } + onClicked: reloadScript(model.url) + } + } + HifiControls.FontAwesome { + size: scriptName.height; text: "\uf00d" + MouseArea { + anchors { fill: parent; margins: -2; } + onClicked: stopScript(model.url) + } } } } } } - Text { id: loadLabel text: "Load Scripts" From f265656e741eff9da126e1d63933bb1f58b91d64 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 19 Jan 2016 12:55:17 -0800 Subject: [PATCH 3/9] expose getJointNames for entities to js --- .../src/RenderableModelEntityItem.cpp | 16 +++++++++++----- .../src/RenderableModelEntityItem.h | 1 + libraries/entities/src/EntityItem.h | 1 + .../entities/src/EntityScriptingInterface.cpp | 14 ++++++++++++++ .../entities/src/EntityScriptingInterface.h | 1 + 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 57a29de596..72dc79b882 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -772,8 +772,14 @@ int RenderableModelEntityItem::getJointIndex(const QString& name) const { return -1; } - -// TODO -- expose a way to list joint names -// RenderableModelEntityItem::QStringList getJointNames() const { -// rig->nameOfJoint(i); -// } +QStringList RenderableModelEntityItem::getJointNames() const { + QStringList result; + if (_model && _model->isActive()) { + RigPointer rig = _model->getRig(); + int jointCount = rig->getJointStateCount(); + for (int jointIndex = 0; jointIndex < jointCount; jointIndex++) { + result << rig->nameOfJoint(jointIndex); + } + } + return result; +} diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 834513ecf7..20afb3c157 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -80,6 +80,7 @@ public: virtual void resizeJointArrays(int newSize = -1) override; virtual int getJointIndex(const QString& name) const override; + virtual QStringList getJointNames() const override; private: QVariantMap parseTexturesToMap(QString textures); diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index f40ee88960..9be018183a 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -396,6 +396,7 @@ public: virtual bool setAbsoluteJointTranslationInObjectFrame(int index, const glm::vec3& translation) override { return false; } virtual int getJointIndex(const QString& name) const { return -1; } + virtual QStringList getJointNames() const { return QStringList(); } virtual void loader() {} // called indirectly when urls for geometry are updated diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index f78cd4fd8c..c90712ac42 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -978,5 +978,19 @@ int EntityScriptingInterface::getJointIndex(const QUuid& entityID, const QString return -1; } EntityItemPointer entity = _entityTree->findEntityByEntityItemID(entityID); + if (!entity) { + return -1; + } return entity->getJointIndex(name); } + +QStringList EntityScriptingInterface::getJointNames(const QUuid& entityID) { + if (!_entityTree) { + return QStringList(); + } + EntityItemPointer entity = _entityTree->findEntityByEntityItemID(entityID); + if (!entity) { + return QStringList(); + } + return entity->getJointNames(); +} diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index e7a4c0e071..641da7518e 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -162,6 +162,7 @@ public slots: const QVector& translations); Q_INVOKABLE int getJointIndex(const QUuid& entityID, const QString& name); + Q_INVOKABLE QStringList getJointNames(const QUuid& entityID); signals: void collisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision); From bcdff7ba4a42c8fe68d3da69233b5f9a5c0fc61c Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Tue, 19 Jan 2016 13:11:11 -0800 Subject: [PATCH 4/9] fix premature octree query before preferences are loaded --- interface/src/Application.cpp | 6 ++++++ interface/src/Application.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 7dcb863049..fa730c5d40 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2653,6 +2653,8 @@ void Application::loadSettings() { Menu::getInstance()->loadSettings(); getMyAvatar()->loadData(); + + _settingsLoaded = true; } void Application::saveSettings() { @@ -3276,6 +3278,10 @@ int Application::sendNackPackets() { void Application::queryOctree(NodeType_t serverType, PacketType packetType, NodeToJurisdictionMap& jurisdictions) { + if (!_settingsLoaded) { + return; // bail early if settings are not loaded + } + //qCDebug(interfaceapp) << ">>> inside... queryOctree()... _viewFrustum.getFieldOfView()=" << _viewFrustum.getFieldOfView(); bool wantExtraDebugging = getLogger()->extraDebugging(); diff --git a/interface/src/Application.h b/interface/src/Application.h index 3840e10c93..30cda33051 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -510,6 +510,8 @@ private: bool _reticleClickPressed { false }; int _avatarAttachmentRequest = 0; + + bool _settingsLoaded { false }; }; #endif // hifi_Application_h From a515d6debe563e5d08342fd272776eace79c6431 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 19 Jan 2016 15:16:58 -0800 Subject: [PATCH 5/9] call into correct thread to getJointNames on entity --- .../entities-renderer/src/RenderableModelEntityItem.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 72dc79b882..0d99376a7b 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -774,6 +774,11 @@ int RenderableModelEntityItem::getJointIndex(const QString& name) const { QStringList RenderableModelEntityItem::getJointNames() const { QStringList result; + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(const_cast(this), "getJointNames", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QStringList, result)); + return result; + } if (_model && _model->isActive()) { RigPointer rig = _model->getRig(); int jointCount = rig->getJointStateCount(); From edea0320e6d83959d50a1599c6d473f2a2fec87e Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 19 Jan 2016 15:44:22 -0800 Subject: [PATCH 6/9] try again to make this thread safe --- .../src/RenderableModelEntityItem.cpp | 5 ----- .../entities/src/EntityScriptingInterface.cpp | 18 ++++++++---------- libraries/entities/src/EntityTree.cpp | 19 ++++++++++++++++++- libraries/entities/src/EntityTree.h | 4 ++++ 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 0d99376a7b..72dc79b882 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -774,11 +774,6 @@ int RenderableModelEntityItem::getJointIndex(const QString& name) const { QStringList RenderableModelEntityItem::getJointNames() const { QStringList result; - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(const_cast(this), "getJointNames", Qt::BlockingQueuedConnection, - Q_RETURN_ARG(QStringList, result)); - return result; - } if (_model && _model->isActive()) { RigPointer rig = _model->getRig(); int jointCount = rig->getJointStateCount(); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index c90712ac42..3f7bc83386 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -977,20 +977,18 @@ int EntityScriptingInterface::getJointIndex(const QUuid& entityID, const QString if (!_entityTree) { return -1; } - EntityItemPointer entity = _entityTree->findEntityByEntityItemID(entityID); - if (!entity) { - return -1; - } - return entity->getJointIndex(name); + int result; + QMetaObject::invokeMethod(_entityTree.get(), "getJointIndex", Qt::BlockingQueuedConnection, + Q_ARG(QUuid, entityID), Q_ARG(QString, name), Q_RETURN_ARG(int, result)); + return result; } QStringList EntityScriptingInterface::getJointNames(const QUuid& entityID) { if (!_entityTree) { return QStringList(); } - EntityItemPointer entity = _entityTree->findEntityByEntityItemID(entityID); - if (!entity) { - return QStringList(); - } - return entity->getJointNames(); + QStringList result; + QMetaObject::invokeMethod(_entityTree.get(), "getJointNames", Qt::BlockingQueuedConnection, + Q_ARG(QUuid, entityID), Q_RETURN_ARG(QStringList, result)); + return result; } diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index eb23034506..f7a4a9d913 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1358,7 +1358,6 @@ void EntityTree::trackIncomingEntityLastEdited(quint64 lastEditedTime, int bytes } } - void EntityTree::callLoader(EntityItemID entityID) { // this is used to bounce from the networking thread to the main thread EntityItemPointer entity = findEntityByEntityItemID(entityID); @@ -1366,3 +1365,21 @@ void EntityTree::callLoader(EntityItemID entityID) { entity->loader(); } } + +int EntityTree::getJointIndex(const QUuid& entityID, const QString& name) const { + EntityTree* nonConstThis = const_cast(this); + EntityItemPointer entity = nonConstThis->findEntityByEntityItemID(entityID); + if (!entity) { + return -1; + } + return entity->getJointIndex(name); +} + +QStringList EntityTree::getJointNames(const QUuid& entityID) const { + EntityTree* nonConstThis = const_cast(this); + EntityItemPointer entity = nonConstThis->findEntityByEntityItemID(entityID); + if (!entity) { + return QStringList(); + } + return entity->getJointNames(); +} diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index 0f77c4af9a..cf62baf808 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -236,6 +236,10 @@ public: return _deletedEntityItemIDs.contains(id); } + // these are used to call through to EntityItems + int getJointIndex(const QUuid& entityID, const QString& name) const; + QStringList getJointNames(const QUuid& entityID) const; + public slots: void callLoader(EntityItemID entityID); From 0064ee6ab2e01a6a6ba4f9a5c492336ddfd358f7 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 19 Jan 2016 15:55:56 -0800 Subject: [PATCH 7/9] try again to make this thread safe --- libraries/entities/src/EntityTree.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index cf62baf808..63bd53120f 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -237,8 +237,8 @@ public: } // these are used to call through to EntityItems - int getJointIndex(const QUuid& entityID, const QString& name) const; - QStringList getJointNames(const QUuid& entityID) const; + Q_INVOKABLE int getJointIndex(const QUuid& entityID, const QString& name) const; + Q_INVOKABLE QStringList getJointNames(const QUuid& entityID) const; public slots: void callLoader(EntityItemID entityID); From 28d673cb97740dc9e71b540beadecd48b6c5b81f Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 19 Jan 2016 16:00:02 -0800 Subject: [PATCH 8/9] try again to make this thread safe --- libraries/entities/src/EntityScriptingInterface.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 3f7bc83386..8fd7be912e 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -979,7 +979,7 @@ int EntityScriptingInterface::getJointIndex(const QUuid& entityID, const QString } int result; QMetaObject::invokeMethod(_entityTree.get(), "getJointIndex", Qt::BlockingQueuedConnection, - Q_ARG(QUuid, entityID), Q_ARG(QString, name), Q_RETURN_ARG(int, result)); + Q_RETURN_ARG(int, result), Q_ARG(QUuid, entityID), Q_ARG(QString, name)); return result; } @@ -989,6 +989,6 @@ QStringList EntityScriptingInterface::getJointNames(const QUuid& entityID) { } QStringList result; QMetaObject::invokeMethod(_entityTree.get(), "getJointNames", Qt::BlockingQueuedConnection, - Q_ARG(QUuid, entityID), Q_RETURN_ARG(QStringList, result)); + Q_RETURN_ARG(QStringList, result), Q_ARG(QUuid, entityID)); return result; } From d97f930dc963d16cce26354af19acab2b5023638 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 19 Jan 2016 22:33:00 -0800 Subject: [PATCH 9/9] Prevent update dialog from becoming locked --- interface/src/ui/UpdateDialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/ui/UpdateDialog.cpp b/interface/src/ui/UpdateDialog.cpp index 6fa2d858fb..4001e615a1 100644 --- a/interface/src/ui/UpdateDialog.cpp +++ b/interface/src/ui/UpdateDialog.cpp @@ -51,10 +51,10 @@ void UpdateDialog::closeDialog() { } void UpdateDialog::hide() { - ((QQuickItem*)parent())->setEnabled(false); + ((QQuickItem*)parent())->setVisible(false); } void UpdateDialog::triggerUpgrade() { auto applicationUpdater = DependencyManager::get(); applicationUpdater.data()->performAutoUpdate(applicationUpdater.data()->getBuildData().lastKey()); -} \ No newline at end of file +}