From 73bddbe26c0058d040a59f38a3a22c0e299f939e Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Tue, 20 Aug 2019 22:08:27 +0200 Subject: [PATCH] Fixed crash when components change after HighLevelStateShell is closed --- .../src/net/mograsim/logic/model/LogicUICanvas.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java index 11e46345..51778c1d 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java @@ -2,6 +2,7 @@ package net.mograsim.logic.model; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; @@ -83,8 +84,14 @@ public class LogicUICanvas extends ZoomableCanvas Combo componentSelector = new Combo(debugShell, SWT.DROP_DOWN | SWT.READ_ONLY); componentSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); List componentsByItemIndex = new ArrayList<>(); - model.addComponentAddedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model)); - model.addComponentRemovedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model)); + Consumer compsChanged = c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model); + model.addComponentAddedListener(compsChanged); + model.addComponentRemovedListener(compsChanged); + debugShell.addListener(SWT.Dispose, e -> + { + model.removeComponentAddedListener(compsChanged); + model.removeComponentRemovedListener(compsChanged); + }); recalculateComponentSelector(componentsByItemIndex, componentSelector, model); new Label(debugShell, SWT.NONE).setText("Target state ID: "); Text stateIDText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER); -- 2.17.1