diff options
author | Sebastian Ratz | 2020-11-16 17:22:19 +0000 |
---|---|---|
committer | Sebastian Ratz | 2020-11-16 17:27:46 +0000 |
commit | 0b7d82ae44e87d3a18749663bbdd25a0e6642629 (patch) | |
tree | c28e19ece4265ac73bd3ae8672a60b88f6ac63a5 | |
parent | 88182cb588e2a0d985b4dcaf1614f1e0fe7b068b (diff) | |
download | eclipse.platform.text-R4_18_maintenance.tar.gz eclipse.platform.text-R4_18_maintenance.tar.xz eclipse.platform.text-R4_18_maintenance.zip |
Bug 568863 - MultiPageMinimapPage is not disposed correctlyY20201201-1200Y20201127-1200Y20201124-1200Y20201120-1200S4_18_0_RC2S4_18_0_RC1R4_18I20210122-0800I20210122-0630I20210122-0420I20201202-1800I20201202-0600I20201201-1800I20201201-0600I20201130-1800I20201130-0600I20201129-1800I20201129-0600I20201128-1800I20201128-0600I20201128-0300I20201127-1800I20201127-1010I20201127-0630I20201125-1800I20201125-0600I20201124-1800I20201124-0600I20201123-1800I20201123-0600I20201122-1800I20201122-0600I20201121-1800I20201121-0600I20201120-1800R4_18_maintenance
Change-Id: I883eb63870feee859364ab38f03d602a8c2f00cc
Signed-off-by: Sebastian Ratz <sebastian.ratz@sap.com>
-rw-r--r-- | org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/views/minimap/MultiPageMinimapPage.java | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/views/minimap/MultiPageMinimapPage.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/views/minimap/MultiPageMinimapPage.java index 6f4d16d4eca..e87f697d406 100644 --- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/views/minimap/MultiPageMinimapPage.java +++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/views/minimap/MultiPageMinimapPage.java @@ -14,7 +14,9 @@ package org.eclipse.ui.internal.views.minimap; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; @@ -37,24 +39,29 @@ import org.eclipse.ui.texteditor.ITextEditor; public class MultiPageMinimapPage extends Page { private final MultiPageEditorPart fMultiPageEditor; - private final Map<Object, Control> fTextWidgetMap; + private final Map<Object, MinimapPage> fMinimapPageMap; + private final Set<Object> fUnsupportedEditorPages; private final IPageChangedListener fPageChangedListener; private PageBook fPageBook; private Label fErrorLabel; public MultiPageMinimapPage(MultiPageEditorPart multiPageEditor) { this.fMultiPageEditor = multiPageEditor; - this.fTextWidgetMap = new HashMap<>(); + this.fMinimapPageMap = new HashMap<>(); + this.fUnsupportedEditorPages = new HashSet<>(); this.fPageChangedListener = e -> { Object selectedPage = multiPageEditor.getSelectedPage(); // Find from cache the minimap for the selected page - Control textWidget = fTextWidgetMap.get(selectedPage); - if (textWidget != null) { - fPageBook.showPage(textWidget); + MinimapPage minimapPage = fMinimapPageMap.get(selectedPage); + if (minimapPage != null) { + fPageBook.showPage(minimapPage.getControl()); + return; + } + if (fUnsupportedEditorPages.contains(selectedPage)) { + fPageBook.showPage(fErrorLabel); return; } - MinimapPage minimapPage = null; if (selectedPage instanceof ITextEditor) { // Create and show a minimap page for the given text editor page ITextEditor textEditor = (ITextEditor) selectedPage; @@ -62,11 +69,10 @@ public class MultiPageMinimapPage extends Page { } if (minimapPage != null) { minimapPage.createControl(fPageBook); - textWidget = minimapPage.getControl(); - fTextWidgetMap.put(selectedPage, textWidget); - fPageBook.showPage(textWidget); + fMinimapPageMap.put(selectedPage, minimapPage); + fPageBook.showPage(minimapPage.getControl()); } else { - fTextWidgetMap.put(selectedPage, fErrorLabel); + fUnsupportedEditorPages.add(selectedPage); fPageBook.showPage(fErrorLabel); } }; @@ -93,7 +99,10 @@ public class MultiPageMinimapPage extends Page { @Override public void dispose() { - super.dispose(); fMultiPageEditor.removePageChangedListener(fPageChangedListener); + fMinimapPageMap.values().forEach(MinimapPage::dispose); + fMinimapPageMap.clear(); + fUnsupportedEditorPages.clear(); + super.dispose(); } } |