Skip to content

Commit 22860a1

Browse files
committed
Delay dispatch of DOM events during view updates
FIX: Make sure event handlers registered with `domEventHandlers` are not called during view updates, to avoid triggering nested update errors. Closes codemirror/dev#1507
1 parent b20446d commit 22860a1

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

src/input.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {EditorSelection, EditorState, SelectionRange, RangeSet, Annotation, Text, Facet} from "@codemirror/state"
2-
import {EditorView} from "./editorview"
2+
import {EditorView, UpdateState} from "./editorview"
33
import {ContentView} from "./contentview"
44
import {LineView} from "./blockview"
55
import {ViewUpdate, PluginValue, clickAddsSelectionRange, dragMovesSelection as dragBehavior, atomicRanges,
@@ -84,7 +84,8 @@ export class InputState {
8484
handleEvent(event: Event) {
8585
if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event)) return
8686
if (event.type == "keydown" && this.keydown(event as KeyboardEvent)) return
87-
this.runHandlers(event.type, event)
87+
if (this.view.updateState != UpdateState.Idle) Promise.resolve().then(() => this.runHandlers(event.type, event))
88+
else this.runHandlers(event.type, event)
8889
}
8990

9091
runHandlers(type: string, event: Event) {

0 commit comments

Comments
 (0)