From 1e9d0883fa7984335f53f2f7f0e15e16b95aa584 Mon Sep 17 00:00:00 2001 From: Shalom Ben Zvi Kazaz Date: Sun, 30 Jun 2024 21:33:58 +0300 Subject: [PATCH] dispose some jcef components --- .../plugin/jaegerui/JaegerUIFileEditor.java | 8 ++++++-- .../jaegerui/JaegerUIFileEditorProvider.java | 6 ------ .../plugin/jaegerui/JaegerUIVirtualFile.java | 1 + .../intellij/plugin/ui/jcef/JCefComponent.kt | 16 +++++++++++----- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIFileEditor.java b/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIFileEditor.java index 656d02c37..402131422 100644 --- a/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIFileEditor.java +++ b/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIFileEditor.java @@ -13,11 +13,13 @@ public class JaegerUIFileEditor extends UserDataHolderBase implements FileEditor { - private final VirtualFile file; + private final JaegerUIVirtualFile file; @Nullable private JCefComponent jCefComponent; + private boolean disposed = false; + public JaegerUIFileEditor(Project project, JaegerUIVirtualFile file) { this.file = file; jCefComponent = createJcefComponent(project, file); @@ -81,7 +83,7 @@ public boolean isModified() { @Override public boolean isValid() { - return true; + return !disposed; } @Override @@ -100,6 +102,8 @@ public void dispose() { jCefComponent.dispose(); jCefComponent = null; } + disposed = true; + file.setValid(false); } } diff --git a/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIFileEditorProvider.java b/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIFileEditorProvider.java index cca0a05c8..fc16b1a63 100644 --- a/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIFileEditorProvider.java +++ b/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIFileEditorProvider.java @@ -22,12 +22,6 @@ public boolean accept(@NotNull Project project, @NotNull VirtualFile file) { return new JaegerUIFileEditor(project, (JaegerUIVirtualFile) file); } - @Override - public void disposeEditor(@NotNull FileEditor editor) { - FileEditorProvider.super.disposeEditor(editor); - } - - @Override public @NotNull @NonNls String getEditorTypeId() { return JAEGER_UI_EDITOR_TYPE; diff --git a/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIVirtualFile.java b/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIVirtualFile.java index d636a1f3b..68d39e487 100644 --- a/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIVirtualFile.java +++ b/src/main/java/org/digma/intellij/plugin/jaegerui/JaegerUIVirtualFile.java @@ -13,6 +13,7 @@ public class JaegerUIVirtualFile extends LightVirtualFile implements DigmaVirtualFileMarker { + //todo: not sure this key is necessary, it is not used public static final Key JAEGER_UI_EDITOR_KEY = Key.create("Digma.JAEGER_UI_EDITOR_KEY"); private String jaegerBaseUrl; private String traceId; diff --git a/src/main/kotlin/org/digma/intellij/plugin/ui/jcef/JCefComponent.kt b/src/main/kotlin/org/digma/intellij/plugin/ui/jcef/JCefComponent.kt index 02f3adf6c..32eb86457 100644 --- a/src/main/kotlin/org/digma/intellij/plugin/ui/jcef/JCefComponent.kt +++ b/src/main/kotlin/org/digma/intellij/plugin/ui/jcef/JCefComponent.kt @@ -373,19 +373,24 @@ private constructor( jbCefClient.cefClient.addDisplayHandler(JCefDisplayHandler(name)) - jbCefBrowser.jbCefClient.addLifeSpanHandler(LifeSpanHandle(schemeHandlerFactory), jbCefBrowser.cefBrowser) + val lifeSpanHandle = LifeSpanHandle(schemeHandlerFactory) + jbCefClient.addLifeSpanHandler(lifeSpanHandle, jbCefBrowser.cefBrowser) downloadAdapterRef?.get()?.let { - jbCefClient.cefClient.addDownloadHandler(it) + jbCefClient.addDownloadHandler(it, jbCefBrowser.cefBrowser) } val jCefComponent = JCefComponent(project, parentDisposable, name, jbCefBrowser, cefMessageRouter) - //usually the component that holds a reference to JCefComponent needs to call JCefComponent.dispose. - //when a parentDisposable is supplied then use it also to dispose, worst case dispose will be called twice. Disposer.register(parentDisposable) { - jCefComponent.dispose() + cefMessageRouter.removeHandler(messageRouterHandler) + cefMessageRouter.dispose() + jbCefClient.cefClient.removeMessageRouter(cefMessageRouter) + jbCefClient.removeLifeSpanHandler(lifeSpanHandle, jbCefBrowser.cefBrowser) + downloadAdapterRef?.get()?.let { + jbCefClient.removeDownloadHandle(it, jbCefBrowser.cefBrowser) + } } @@ -421,4 +426,5 @@ class LifeSpanHandle(private val schemeHandlerFactory: BaseSchemeHandlerFactory) schemeHandlerFactory.getSchema(), null, schemeHandlerFactory ) } + } \ No newline at end of file