m_enabled(false),
m_debugService(QQmlInspectorService::instance()),
m_eventId(0),
- m_reloadEventId(-1),
- m_destroyEventId(-1)
+ m_reloadEventId(-1)
{
}
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)
} 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;
virtual bool touchEvent(QTouchEvent *event);
private slots:
- void onQmlObjectDestroyed();
+ void onQmlObjectDestroyed(QObject *object);
private:
void setEnabled(bool value);
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