Index: UndoManager.java =================================================================== RCS file: /cvs/java/javacore/src/org/netbeans/modules/javacore/internalapi/UndoManager.java,v retrieving revision 1.18 diff -u -r1.18 UndoManager.java --- UndoManager.java 30 Sep 2005 09:02:41 -0000 1.18 +++ UndoManager.java 11 Nov 2005 10:48:43 -0000 @@ -18,6 +18,7 @@ import java.util.*; import javax.swing.event.*; import javax.swing.text.Document; +import javax.swing.text.StyledDocument; import org.netbeans.api.java.classpath.*; import org.netbeans.jmi.javamodel.JavaModelPackage; import org.netbeans.jmi.javamodel.Resource; @@ -29,6 +30,7 @@ import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; import org.openide.text.CloneableEditorSupport; +import org.openide.text.NbDocument; /** * @@ -274,17 +276,26 @@ public void watch(Collection ceSupports, InvalidationListener l) { synchronized (allCES) { registerListeners(); - for (Iterator it = ceSupports.iterator(); it.hasNext();) { - CloneableEditorSupport ces = (CloneableEditorSupport) it.next(); - if (allCES.add(ces)) { - ces.addChangeListener(this); - Document d = ces.getDocument(); - if (d != null) { - d.addDocumentListener(this); - documentToCES.put(d, ces); + } + for (Iterator it = ceSupports.iterator(); it.hasNext();) { + final CloneableEditorSupport ces = (CloneableEditorSupport) it.next(); + final Document d = ces.getDocument(); + + NbDocument.runAtomic((StyledDocument)d, new Runnable() { + public void run() { + synchronized(allCES) { + if (allCES.add(ces)) { + ces.addChangeListener(UndoManager.this); + if (d != null) { + d.addDocumentListener(UndoManager.this); + documentToCES.put(d, ces); + } + } } } - } + }); + } + synchronized(allCES) { if (l != null) { listenerToCES.put(l, ceSupports); } @@ -449,9 +460,11 @@ public void saveAll() { synchronized (allCES) { unregisterListeners(); - try { - LifecycleManager.getDefault().saveAll(); - } finally { + } + try { + LifecycleManager.getDefault().saveAll(); + } finally { + synchronized (allCES) { registerListeners(); } }