浏览代码

Add deleteWidgets method to WidgetManager that diposes of widgets regardless of their dirty state

Cheryl Quah 7 年之前
父节点
当前提交
956f8cc156
共有 2 个文件被更改,包括 28 次插入1 次删除
  1. 5 1
      packages/docmanager/src/manager.ts
  2. 23 0
      packages/docmanager/src/widgetmanager.ts

+ 5 - 1
packages/docmanager/src/manager.ts

@@ -232,7 +232,11 @@ class DocumentManager implements IDisposable {
       return this.services.contents.delete(path);
     })
     .then(() => {
-      return this.closeFile(path);
+      let context = this._contextForPath(path);
+      if (context) {
+        return this._widgetManager.deleteWidgets(context);
+      }
+      return Promise.resolve(void 0);
     });
   }
 

+ 23 - 0
packages/docmanager/src/widgetmanager.ts

@@ -208,6 +208,19 @@ class DocumentWidgetManager implements IDisposable {
     ).then(() => undefined);
   }
 
+  /**
+   * Dispose of the widgets associated with a given context
+   * regardless of the widget's dirty state.
+   *
+   * @param context - The document context object.
+   */
+  deleteWidgets(context: DocumentRegistry.Context): Promise<void> {
+    let widgets = Private.widgetsProperty.get(context);
+    return Promise.all(
+      toArray(map(widgets, widget => this.onDelete(widget)))
+    ).then(() => undefined);
+  }
+
   /**
    * Filter a message sent to a message handler.
    *
@@ -292,6 +305,16 @@ class DocumentWidgetManager implements IDisposable {
     });
   }
 
+  /**
+   * Dispose of widget regardless of widget's dirty state.
+   *
+   * @param widget - The target widget.
+   */
+  protected onDelete(widget: Widget): Promise<void> {
+    widget.dispose();
+    return Promise.resolve(void 0);
+  }
+
   /**
    * Ask the user whether to close an unsaved file.
    */