svn commit: r13583 - trunk/src_new/org/argouml/kernel/DefaultUndoManager.java
[email protected] 24 Sep 2007 21:40:15 -0000
Newsgroups
gmane.comp.lang.uml.argouml.cvs
Message-ID
<[email protected] >
Author: bobtarling
Date: 2007-09-24 14:40:15-0700
New Revision: 13583
Modified:
trunk/src_new/org/argouml/kernel/DefaultUndoManager.java
Log:
Dispatch property change events on the awt thread
Modified: trunk/src_new/org/argouml/kernel/DefaultUndoManager.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/kernel/DefaultUndoManager.java?view=diff&rev=13583&p1=trunk/src_new/org/argouml/kernel/DefaultUndoManager.java&p2=trunk/src_new/org/argouml/kernel/DefaultUndoManager.java&r1=13582&r2=13583
==============================================================================
--- trunk/src_new/org/argouml/kernel/DefaultUndoManager.java (original)
+++ trunk/src_new/org/argouml/kernel/DefaultUndoManager.java 2007-09-24 14:40:15-0700
@@ -28,11 +28,14 @@
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Stack;
+import javax.swing.SwingUtilities;
+
import org.apache.log4j.Logger;
import org.argouml.i18n.Translator;
@@ -49,7 +52,7 @@
private int undoMax = 100;
- private Collection<PropertyChangeListener> listeners =
+ private ArrayList<PropertyChangeListener> listeners =
new ArrayList<PropertyChangeListener>();
/**
@@ -153,13 +156,25 @@
listeners.remove(listener);
}
- private void fire(String property, Object value) {
- Iterator i = listeners.iterator();
- while (i.hasNext()) {
- PropertyChangeListener listener = (PropertyChangeListener) i.next();
- listener.propertyChange(
- new PropertyChangeEvent(this, property, "", value));
- }
+ private void fire(final String property, final Object value) {
+
+ final ArrayList<PropertyChangeListener> list =
+ new ArrayList<PropertyChangeListener>(listeners);
+
+ SwingUtilities.invokeLater(
+ new Runnable() {
+ public void run() {
+ Iterator<PropertyChangeListener> i = list.iterator();
+ while (i.hasNext()) {
+ PropertyChangeListener listener = i.next();
+ listener.propertyChange(
+ new PropertyChangeEvent(
+ this, property, "", value));
+ }
+ }
+ }
+ );
+
}
/**