[evolution/wip/mcrha/webkit-jsc-api] e-undo-redo.js: Merge deleteByDrag followed by insertFromDrop into one undo step



commit a4c5ae68ae16aa46aa719e21b55d132ed883c7d8
Author: Milan Crha <mcrha redhat com>
Date:   Thu Apr 23 11:20:02 2020 +0200

    e-undo-redo.js: Merge deleteByDrag followed by insertFromDrop into one undo step
    
    These are coming in this order when drag&drop content inside the web view.

 data/webkit/e-undo-redo.js | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)
---
diff --git a/data/webkit/e-undo-redo.js b/data/webkit/e-undo-redo.js
index f0af6c15f7..2092004f7b 100644
--- a/data/webkit/e-undo-redo.js
+++ b/data/webkit/e-undo-redo.js
@@ -291,6 +291,27 @@ var EvoUndoRedo = {
                maybeMergeInsertText : function(skipFirst) {
                        EvoUndoRedo.stack.maybeMergeConsecutive(skipFirst, "insertText");
                        EvoUndoRedo.stack.maybeMergeConsecutive(skipFirst, "insertText::WordDelim");
+               },
+
+               maybeMergeDragDrop : function() {
+                       if (EvoUndoRedo.stack.current != EvoUndoRedo.stack.top ||
+                           EvoUndoRedo.stack.current == EvoUndoRedo.stack.bottom ||
+                           EvoUndoRedo.stack.clampIndex(EvoUndoRedo.stack.current - 1) == 
EvoUndoRedo.stack.bottom) {
+                               return;
+                       }
+
+                       var curr, prev;
+
+                       curr = EvoUndoRedo.stack.array[EvoUndoRedo.stack.current];
+                       prev = EvoUndoRedo.stack.array[EvoUndoRedo.stack.clampIndex(EvoUndoRedo.stack.current 
- 1)];
+
+                       if (curr && prev &&
+                           curr.kind == EvoUndoRedo.RECORD_KIND_EVENT &&
+                           prev.kind == EvoUndoRedo.RECORD_KIND_EVENT &&
+                           curr.opType == "insertFromDrop" &&
+                           prev.opType == "deleteByDrag") {
+                               EvoUndoRedo.GroupTopRecords(2, "dragDrop::merged");
+                       }
                }
        },
 
@@ -478,8 +499,10 @@ EvoUndoRedo.inputCb = function(inputEvent)
 
        EvoEditor.forceFormatStateUpdate = EvoEditor.forceFormatStateUpdate || opType == "" || 
opType.startsWith("format");
 
-       if (opType == "insertFromDrop")
+       if (opType == "insertFromDrop") {
                EvoUndoRedo.dropTarget = null;
+               EvoUndoRedo.stack.maybeMergeDragDrop();
+       }
 
        EvoEditor.AfterInputEvent(inputEvent, isWordDelim);
 }
@@ -768,6 +791,8 @@ EvoUndoRedo.GroupTopRecords = function(nRecords, opType)
 
                EvoUndoRedo.stack.push(group);
        }
+
+       EvoUndoRedo.stack.maybeStateChanged();
 }
 
 /* Backs up all the children elements between firstChildIndex and lastChildIndex inclusive,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]