aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/qmltooling/shared/abstractviewinspector.cpp17
-rw-r--r--src/plugins/qmltooling/shared/abstractviewinspector.h5
2 files changed, 12 insertions, 10 deletions
diff --git a/src/plugins/qmltooling/shared/abstractviewinspector.cpp b/src/plugins/qmltooling/shared/abstractviewinspector.cpp
index e5d56277d7..c3eb24e659 100644
--- a/src/plugins/qmltooling/shared/abstractviewinspector.cpp
+++ b/src/plugins/qmltooling/shared/abstractviewinspector.cpp
@@ -91,8 +91,7 @@ AbstractViewInspector::AbstractViewInspector(QObject *parent) :
m_enabled(false),
m_debugService(QQmlInspectorService::instance()),
m_eventId(0),
- m_reloadEventId(-1),
- m_destroyEventId(-1)
+ m_reloadEventId(-1)
{
}
@@ -270,18 +269,20 @@ bool AbstractViewInspector::touchEvent(QTouchEvent *event)
return true;
}
-void AbstractViewInspector::onQmlObjectDestroyed()
+void AbstractViewInspector::onQmlObjectDestroyed(QObject *object)
{
- if (m_destroyEventId == -1)
+ if (!m_hashObjectsTobeDestroyed.contains(object))
return;
+ int removeId = m_hashObjectsTobeDestroyed.take(object);
+ QQmlDebugService::removeInvalidObjectsFromHash();
+
QByteArray response;
QQmlDebugStream rs(&response, QIODevice::WriteOnly);
- rs << QByteArray(RESPONSE) << m_destroyEventId << true;
+ rs << QByteArray(RESPONSE) << removeId << true;
m_debugService->sendMessage(response);
- m_destroyEventId = -1;
}
void AbstractViewInspector::handleMessage(const QByteArray &message)
@@ -344,9 +345,9 @@ void AbstractViewInspector::handleMessage(const QByteArray &message)
} else if (command == DESTROY_OBJECT) {
int debugId;
ds >> debugId;
- m_destroyEventId = requestId;
if (QObject *obj = QQmlDebugService::objectForId(debugId)) {
- connect(obj, SIGNAL(destroyed()), SLOT(onQmlObjectDestroyed()));
+ m_hashObjectsTobeDestroyed.insert(obj, requestId);
+ connect(obj, SIGNAL(destroyed(QObject*)), SLOT(onQmlObjectDestroyed(QObject*)));
obj->deleteLater();
}
return;
diff --git a/src/plugins/qmltooling/shared/abstractviewinspector.h b/src/plugins/qmltooling/shared/abstractviewinspector.h
index 3addacf996..ad42ba7a83 100644
--- a/src/plugins/qmltooling/shared/abstractviewinspector.h
+++ b/src/plugins/qmltooling/shared/abstractviewinspector.h
@@ -111,7 +111,7 @@ protected:
virtual bool touchEvent(QTouchEvent *event);
private slots:
- void onQmlObjectDestroyed();
+ void onQmlObjectDestroyed(QObject *object);
private:
void setEnabled(bool value);
@@ -126,7 +126,8 @@ private:
QList<AbstractTool *> m_tools;
int m_eventId;
int m_reloadEventId;
- int m_destroyEventId;
+ // Hash< object to be destroyed, destroy eventId >
+ QHash<QObject *, int> m_hashObjectsTobeDestroyed;
};
} // namespace QmlJSDebugger