Debugger : Handling destruction of multiple elements.
authorSimjees Abraham <simjees.abraham@nokia.com>
Wed, 23 May 2012 11:57:56 +0000 (13:57 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 24 May 2012 10:52:43 +0000 (12:52 +0200)
Changes made to handle the case where multiple elements are
removed in the editor and saved when "Apply on Save" is active.
The respsonse is sent with the correct Id.

Change-Id: I76dc1487a0a5ebf859d2ef54cc64a4a5fc4008ca
Reviewed-by: Aurindam Jana <aurindam.jana@nokia.com>
src/plugins/qmltooling/shared/abstractviewinspector.cpp
src/plugins/qmltooling/shared/abstractviewinspector.h

index e5d5627..c3eb24e 100644 (file)
@@ -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;
index 3addacf..ad42ba7 100644 (file)
@@ -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