Keep proper track of moved/changed state in undo/redo history

Fixes #2999
This commit is contained in:
Nick O'Leary 2021-06-02 14:07:22 +01:00
parent 12698dc347
commit a92f8f36c1
No known key found for this signature in database
GPG Key ID: 4F2157149161A6C9
1 changed files with 13 additions and 6 deletions

View File

@ -66,12 +66,14 @@ RED.history = (function() {
var importedResult = RED.nodes.import(ev.config,{importMap: importMap}) var importedResult = RED.nodes.import(ev.config,{importMap: importMap})
inverseEv = { inverseEv = {
t: 'replace', t: 'replace',
config: importedResult.removedNodes config: importedResult.removedNodes,
dirty: RED.nodes.dirty()
} }
} }
} else if (ev.t == 'add') { } else if (ev.t == 'add') {
inverseEv = { inverseEv = {
t: "delete", t: "delete",
dirty: RED.nodes.dirty()
}; };
if (ev.nodes) { if (ev.nodes) {
inverseEv.nodes = []; inverseEv.nodes = [];
@ -158,7 +160,8 @@ RED.history = (function() {
} else if (ev.t == "delete") { } else if (ev.t == "delete") {
inverseEv = { inverseEv = {
t: "add" t: "add",
dirty: RED.nodes.dirty()
}; };
if (ev.workspaces) { if (ev.workspaces) {
inverseEv.workspaces = []; inverseEv.workspaces = [];
@ -300,11 +303,12 @@ RED.history = (function() {
} else if (ev.t == "move") { } else if (ev.t == "move") {
inverseEv = { inverseEv = {
t: 'move', t: 'move',
nodes: [] nodes: [],
dirty: RED.nodes.dirty()
}; };
for (i=0;i<ev.nodes.length;i++) { for (i=0;i<ev.nodes.length;i++) {
var n = ev.nodes[i]; var n = ev.nodes[i];
var rn = {n: n.n, ox: n.n.x, oy: n.n.y, dirty: true, moved: n.moved}; var rn = {n: n.n, ox: n.n.x, oy: n.n.y, dirty: true, moved: n.n.moved};
inverseEv.nodes.push(rn); inverseEv.nodes.push(rn);
n.n.x = n.ox; n.n.x = n.ox;
n.n.y = n.oy; n.n.y = n.oy;
@ -336,7 +340,9 @@ RED.history = (function() {
} else if (ev.t == "edit") { } else if (ev.t == "edit") {
inverseEv = { inverseEv = {
t: "edit", t: "edit",
changes: {} changes: {},
changed: ev.node.changed,
dirty: RED.nodes.dirty()
}; };
inverseEv.node = ev.node; inverseEv.node = ev.node;
for (i in ev.changes) { for (i in ev.changes) {
@ -552,7 +558,8 @@ RED.history = (function() {
} else if (ev.t == "reorder") { } else if (ev.t == "reorder") {
inverseEv = { inverseEv = {
t: 'reorder', t: 'reorder',
order: RED.nodes.getWorkspaceOrder() order: RED.nodes.getWorkspaceOrder(),
dirty: RED.nodes.dirty()
}; };
if (ev.order) { if (ev.order) {
RED.workspaces.order(ev.order); RED.workspaces.order(ev.order);