diff --git a/SPD-classes/src/main/java/com/watabou/utils/Signal.java b/SPD-classes/src/main/java/com/watabou/utils/Signal.java index 9181cebe5..1efcc820d 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/Signal.java +++ b/SPD-classes/src/main/java/com/watabou/utils/Signal.java @@ -39,7 +39,7 @@ public class Signal { this.stackMode = stackMode; } - public void add( Listener listener ) { + public synchronized void add( Listener listener ) { if (!listeners.contains( listener )) { if (stackMode) { listeners.addFirst( listener ); @@ -49,33 +49,28 @@ public class Signal { } } - public void remove( Listener listener ) { + public synchronized void remove( Listener listener ) { listeners.remove( listener ); } - public void removeAll() { + public synchronized void removeAll() { listeners.clear(); } - public void replace( Listener listener ) { + public synchronized void replace( Listener listener ) { removeAll(); add( listener ); } - public int numListeners() { + public synchronized int numListeners() { return listeners.size(); } - public void dispatch( T t ) { - - @SuppressWarnings("unchecked") - Listener[] list = listeners.toArray( new Listener[0] ); - + public synchronized void dispatch( T t ) { + canceled = false; - for (int i=0; i < list.length; i++) { - - Listener listener = list[i]; - + for (Listener listener : listeners) { + if (listeners.contains( listener )) { listener.onSignal( t ); if (canceled) {