Author: rwhitcomb Date: Fri Jan 5 18:49:54 2018 New Revision: 1820344 URL: http://svn.apache.org/viewvc?rev=1820344&view=rev Log: PIVOT-1021: Fix the underlying problem with Undo after delete of a whole node: the Undo needs to put just exactly the nodes removed back into the original node they were removed from. So, instead of the document node getting set as the "node" for undo, put the original node in (have to add this as a parameter to "Node.nodesRemoved()". Then, don't construct a new Document to do an "insertRange" of the removede node, but just insert them where they belong.
Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/TextPane.java pivot/trunk/wtk/src/org/apache/pivot/wtk/text/Element.java pivot/trunk/wtk/src/org/apache/pivot/wtk/text/Node.java Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/TextPane.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/TextPane.java?rev=1820344&r1=1820343&r2=1820344&view=diff ============================================================================== --- pivot/trunk/wtk/src/org/apache/pivot/wtk/TextPane.java (original) +++ pivot/trunk/wtk/src/org/apache/pivot/wtk/TextPane.java Fri Jan 5 18:49:54 2018 @@ -129,11 +129,12 @@ public class TextPane extends Container @Override public void undo() { - Document tmp = new Document(); + int currentOffset = this.offset; for (int i = 0; i < removed.getLength(); i++) { - tmp.add(removed.get(i)); + Node removedNode = removed.get(i); + node.insertRange(removedNode, currentOffset); + currentOffset += removedNode.getCharacterCount(); } - node.insertRange(tmp, offset); } } Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/text/Element.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/text/Element.java?rev=1820344&r1=1820343&r2=1820344&view=diff ============================================================================== --- pivot/trunk/wtk/src/org/apache/pivot/wtk/text/Element.java (original) +++ pivot/trunk/wtk/src/org/apache/pivot/wtk/text/Element.java Fri Jan 5 18:49:54 2018 @@ -438,7 +438,7 @@ public abstract class Element extends No // Notify parent super.rangeRemoved(offset, removedCharacterCount); - super.nodesRemoved(removed, offset); + super.nodesRemoved(this, removed, offset); // Fire event elementListeners.nodesRemoved(this, index, removed); Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/text/Node.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/text/Node.java?rev=1820344&r1=1820343&r2=1820344&view=diff ============================================================================== --- pivot/trunk/wtk/src/org/apache/pivot/wtk/text/Node.java (original) +++ pivot/trunk/wtk/src/org/apache/pivot/wtk/text/Node.java Fri Jan 5 18:49:54 2018 @@ -248,15 +248,17 @@ public abstract class Node { * Therefore the topmost node will be given the offset into the whole document. * Listeners for this node will just be given the offset relative to this node. * - * @param removed The actual sequence of nodes removed from here. + * @param node The <em>original</em> node (that is, NOT the parent) where the + * nodes were removed from. + * @param removed The actual sequence of nodes removed from that node. * @param offsetArgument Offset relative to this node. */ - protected void nodesRemoved(Sequence<Node> removed, int offsetArgument) { + protected void nodesRemoved(Node node, Sequence<Node> removed, int offsetArgument) { if (parent != null) { - parent.nodesRemoved(removed, offsetArgument + this.offset); + parent.nodesRemoved(node, removed, offsetArgument + this.offset); } - nodeListeners.nodesRemoved(this, removed, offsetArgument); + nodeListeners.nodesRemoved(node, removed, offsetArgument); } /**