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);
     }
 
     /**


Reply via email to