فهرست منبع

The inspector manager should cache an inspectable source even if there is no current inspector available.

Afshin Darian 8 سال پیش
والد
کامیت
4ecfbf9e3e
1فایلهای تغییر یافته به همراه21 افزوده شده و 5 حذف شده
  1. 21 5
      src/inspector/plugin.ts

+ 21 - 5
src/inspector/plugin.ts

@@ -44,24 +44,40 @@ class InspectorManager implements IInspector {
       return;
     }
     this._inspector = inspector;
+    // If an inspector was added and it has no source
+    if (inspector && !inspector.source) {
+      inspector.source = this._source;
+    }
   }
 
   /**
    * The source of events the inspector panel listens for.
    */
   get source(): Inspector.IInspectable {
-    if (this._inspector && !this._inspector.isDisposed) {
-      return this._inspector.source;
-    }
-    return null;
+    return this._source;
   }
   set source(source: Inspector.IInspectable) {
+    if (this._source !== source) {
+      if (this._source) {
+        this._source.disposed.disconnect(this._onSourceDisposed);
+      }
+      this._source = source;
+      this._source.disposed.connect(this._onSourceDisposed);
+    }
     if (this._inspector && !this._inspector.isDisposed) {
-      this._inspector.source = source;
+      this._inspector.source = this._source;
     }
   }
 
+  /**
+   * Handle the source disposed signal.
+   */
+  private _onSourceDisposed() {
+    this._source = null;
+  }
+
   private _inspector: Inspector = null;
+  private _source: Inspector.IInspectable = null;
 }