mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-04-13 21:36:04 +02:00
second attempt to fix all other shutdown QML warnings at once
This commit is contained in:
parent
fe43c733f8
commit
64d05e33c1
3 changed files with 22 additions and 1 deletions
|
@ -389,6 +389,10 @@ void OffscreenSurface::finishQmlLoad(QQmlComponent* qmlComponent,
|
|||
}
|
||||
// Allow child windows to be destroyed from JS
|
||||
QQmlEngine::setObjectOwnership(newObject, QQmlEngine::JavaScriptOwnership);
|
||||
|
||||
// add object to the manual deletion list
|
||||
_sharedObject->addToDeletionList(newObject);
|
||||
|
||||
newObject->setParent(parent);
|
||||
newItem->setParentItem(parent);
|
||||
} else {
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <QtQml/QQmlEngine>
|
||||
|
||||
#include <QtGui/QOpenGLContext>
|
||||
#include <QPointer>
|
||||
|
||||
#include <NumericalConstants.h>
|
||||
#include <shared/NsightHelpers.h>
|
||||
|
@ -96,6 +97,15 @@ SharedObject::~SharedObject() {
|
|||
}
|
||||
#endif
|
||||
|
||||
// already deleted objects will be reset to null by QPointer so it should be safe just iterate here
|
||||
for (auto qmlObject : _deletionList) {
|
||||
if (qmlObject) {
|
||||
// manually delete not-deleted-yet qml items
|
||||
QQmlEngine::setObjectOwnership(qmlObject, QQmlEngine::CppOwnership);
|
||||
delete qmlObject;
|
||||
}
|
||||
}
|
||||
|
||||
if (_rootItem) {
|
||||
delete _rootItem;
|
||||
_rootItem = nullptr;
|
||||
|
@ -412,6 +422,11 @@ bool SharedObject::fetchTexture(TextureAndFence& textureAndFence) {
|
|||
return true;
|
||||
}
|
||||
|
||||
void hifi::qml::impl::SharedObject::addToDeletionList(QObject * object)
|
||||
{
|
||||
_deletionList.append(QPointer<QObject>(object));
|
||||
}
|
||||
|
||||
void SharedObject::setProxyWindow(QWindow* window) {
|
||||
#ifndef DISABLE_QML
|
||||
_proxyWindow = window;
|
||||
|
|
|
@ -66,7 +66,7 @@ public:
|
|||
void resume();
|
||||
bool isPaused() const;
|
||||
bool fetchTexture(TextureAndFence& textureAndFence);
|
||||
|
||||
void addToDeletionList(QObject* object);
|
||||
|
||||
private:
|
||||
bool event(QEvent* e) override;
|
||||
|
@ -91,6 +91,8 @@ private:
|
|||
void onAboutToQuit();
|
||||
void updateTextureAndFence(const TextureAndFence& newTextureAndFence);
|
||||
|
||||
QList<QPointer<QObject>> _deletionList;
|
||||
|
||||
// Texture management
|
||||
TextureAndFence _latestTextureAndFence{ 0, 0 };
|
||||
QQuickItem* _item{ nullptr };
|
||||
|
|
Loading…
Reference in a new issue