Skip to content

Commit

Permalink
Fix undo incorrectly undoing text input (#4114)
Browse files Browse the repository at this point in the history
Fixes an issue where under certain conditions, the ComfyUI custom undo / redo functions would not run when intended to.

When trying to undo an action like deleting several nodes, instead the native browser undo runs - e.g. a textarea gets focus and the last typed text is undone.  Clicking outside the text area and typing again just keeps doing the same thing.
  • Loading branch information
webfiltered authored Jul 26, 2024
1 parent 8328a2d commit b6779d8
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions web/scripts/changeTracker.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,16 @@ export class ChangeTracker {
window.addEventListener(
"keydown",
(e) => {
const activeEl = document.activeElement;
requestAnimationFrame(async () => {
let activeEl;
let bindInputEl;
// If we are auto queue in change mode then we do want to trigger on inputs
if (!app.ui.autoQueueEnabled || app.ui.autoQueueMode === "instant") {
activeEl = document.activeElement;
if (activeEl?.tagName === "INPUT" || activeEl?.["type"] === "textarea") {
// Ignore events on inputs, they have their native history
return;
}
bindInputEl = activeEl;
}

keyIgnored = e.key === "Control" || e.key === "Shift" || e.key === "Alt" || e.key === "Meta";
Expand All @@ -123,7 +124,7 @@ export class ChangeTracker {
if (await changeTracker().undoRedo(e)) return;

// If our active element is some type of input then handle changes after they're done
if (ChangeTracker.bindInput(activeEl)) return;
if (ChangeTracker.bindInput(bindInputEl)) return;
changeTracker().checkState();
});
},
Expand Down

0 comments on commit b6779d8

Please sign in to comment.