diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/DependencyComponent.java b/ganttzk/src/main/java/org/zkoss/ganttz/DependencyComponent.java index 24a02c272..16afd3359 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/DependencyComponent.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/DependencyComponent.java @@ -58,6 +58,8 @@ public class DependencyComponent extends XulElement implements AfterCompose { private PropertyChangeListener visibilityChangeListener; + private PropertyChangeListener listener; + private boolean violated = false; public DependencyComponent(TaskComponent source, TaskComponent destination, @@ -106,7 +108,7 @@ public class DependencyComponent extends XulElement implements AfterCompose { if (listenerAdded) { return; } - PropertyChangeListener listener = new PropertyChangeListener() { + listener = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { @@ -118,6 +120,15 @@ public class DependencyComponent extends XulElement implements AfterCompose { listenerAdded = true; } + public void removeChangeListeners() { + if (!listenerAdded) { + return; + } + this.source.getTask().removePropertyChangeListener(listener); + this.destination.getTask().removePropertyChangeListener(listener); + listenerAdded = false; + } + /** * @return the idTaskOrig */ diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java b/ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java index c564afeae..04ca965e3 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/DependencyList.java @@ -304,6 +304,9 @@ public class DependencyList extends XulElement implements AfterCompose { source.getTask().removeVisibilityPropertiesChangeListener(listener); destination.getTask().removeVisibilityPropertiesChangeListener(listener); + //remove other change listeners + dependencyComponent.removeChangeListeners(); + //remove the dependency itself this.removeChild(dependencyComponent); }