I adjusted the ElementBuffer.insert method so that it only registers an
element change if that element has actually changed. It is required that
DocumentEvent.getChange(Element) returns null for a not-changed element
instead of an empty ElementChange.

2006-02-07  Roman Kennke  <[EMAIL PROTECTED]>

        * javax/swing/text/DefaultStyledDocument.java
        (ElementBuffer.insert): Only register change when the element
        actually changed.

/Roman
Index: javax/swing/text/DefaultStyledDocument.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/DefaultStyledDocument.java,v
retrieving revision 1.58
diff -u -r1.58 DefaultStyledDocument.java
--- javax/swing/text/DefaultStyledDocument.java	3 Feb 2006 16:20:40 -0000	1.58
+++ javax/swing/text/DefaultStyledDocument.java	7 Feb 2006 11:56:55 -0000
@@ -684,9 +684,14 @@
           BranchElement e = (BranchElement) curr.e;
           Element[] removed = curr.getRemovedElements();
           Element[] added = curr.getAddedElements();
-          e.replace(curr.index, removed.length, added);
-          ElementEdit ee = new ElementEdit(e, curr.index, removed, added);
-          ev.addEdit(ee);
+          // FIXME: We probably shouldn't create the empty Element[] in the
+          // first place.
+          if (removed.length > 0 || added.length > 0)
+            {
+              e.replace(curr.index, removed.length, added);
+              ElementEdit ee = new ElementEdit(e, curr.index, removed, added);
+              ev.addEdit(ee);
+            }
         }
     }
 

Reply via email to