Hi, this patch fixes PR 26194 which made it impossible to enter newlines into JTextAreas.
There is a new mauve test which backs this work up. Along with my other small fix to GapContent we now pass every PlainDocument.insertString test. @Mark: Please add this patch to the release branch. 2006-03-06 Robert Schuster <[EMAIL PROTECTED]> * javax/swing/text/PlainDocument.java: (insertUpdate): Extended if-expression, added code to generate another Element when newly inserted characters and old ones will be on the same line. cya Robert
Index: javax/swing/text/PlainDocument.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/text/PlainDocument.java,v retrieving revision 1.19 diff -u -r1.19 PlainDocument.java --- javax/swing/text/PlainDocument.java 9 Jan 2006 21:55:39 -0000 1.19 +++ javax/swing/text/PlainDocument.java 6 Mar 2006 01:12:22 -0000 @@ -110,17 +110,19 @@ { int offset = event.getOffset(); int end = offset + event.getLength(); - int elementIndex = rootElement.getElementIndex(offset); + int oldElementIndex, elementIndex = rootElement.getElementIndex(offset); Element firstElement = rootElement.getElement(elementIndex); - + oldElementIndex = elementIndex; + // If we're inserting immediately after a newline we have to fix the - // Element structure. - if (offset > 0) + // Element structure (but only if we are dealing with a line which + // has not existed as Element before). + if (offset > 0 && firstElement.getStartOffset() != offset) { try { String s = getText(offset - 1, 1); - if (s.equals("\n")) + if (s.equals("\n") ) { int newEl2EndOffset = end; boolean replaceNext = false; @@ -166,26 +168,35 @@ // characters within the newly inserted text int j = firstElement.getStartOffset(); int i = str.indexOf('\n', offset); + while (i != -1 && i <= end) { // For each new line, create a new element elts.add(createLeafElement(rootElement, SimpleAttributeSet.EMPTY, j, i + 1)); + j = i + 1; if (j >= str.length()) - break; + break; i = str.indexOf('\n', j); } + // If there were new lines added we have to add an ElementEdit to // the DocumentEvent and we have to call rootElement.replace to // insert the new lines if (elts.size() != 0) { + // If we have created new lines test whether there are remaining + // characters in firstElement after the inserted text and if so + // create a new element for them. + if (j < firstElement.getEndOffset()) + elts.add(createLeafElement(rootElement, SimpleAttributeSet.EMPTY, j, firstElement.getEndOffset())); + // Set up the ElementEdit by filling the added and removed // arrays with the proper Elements added = new Element[elts.size()]; - for (int k = 0; k < elts.size(); ++k) - added[k] = (Element) elts.get(k); + elts.toArray(added); + removed[0] = firstElement; // Now create and add the ElementEdit @@ -204,6 +215,7 @@ ae.initCause(e); throw ae; } + super.insertUpdate(event, attributes); }
signature.asc
Description: OpenPGP digital signature