From d8b69a9f8e4f84b38cc43fc371e0f87ac8fac4d1 Mon Sep 17 00:00:00 2001 From: n0dasalt Date: Sat, 31 Jan 2026 16:17:04 +0900 Subject: [PATCH] Fix: Prevent 'Webview is disposed' error on reopening preview - Filter disposed panels in getPanel() - Remove disposed panels from webviewPanels array - Fixes #8 --- src/MarkwhenTimelineEditorProvider.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/MarkwhenTimelineEditorProvider.ts b/src/MarkwhenTimelineEditorProvider.ts index f173ebb..5250816 100644 --- a/src/MarkwhenTimelineEditorProvider.ts +++ b/src/MarkwhenTimelineEditorProvider.ts @@ -16,7 +16,15 @@ import { DisplayScale } from "./utilities/dateTimeUtilities"; export let webviewPanels = [] as vscode.WebviewPanel[]; const getPanel = () => { - return webviewPanels[webviewPanels.length - 1]; + const validPanels = webviewPanels.filter(panel => { + try { + panel.webview.postMessage({}); + return true; + } catch { + return false; + } + }); + return validPanels[validPanels.length - 1]; }; export class MarkwhenTimelineEditorProvider @@ -252,8 +260,9 @@ export class MarkwhenTimelineEditorProvider } }; - getPanel().onDidDispose(() => { + webviewPanel.onDidDispose(() => { changeDocumentSubscription.dispose(); + webviewPanels = webviewPanels.filter(panel => panel !== webviewPanel); }); this.updateWebview();