Sfoglia il codice sorgente

LibWeb: Fix "input" events being dispatched twice when cancelled

Aliaksandr Kalenik 9 mesi fa
parent
commit
648fac7215

+ 4 - 0
Tests/LibWeb/Text/expected/Editing/beforeinput-event.txt

@@ -1,5 +1,9 @@
 beforeinput data=(r) intputType=(insertText)
+beforeinput data=(a) intputType=(insertText)
 beforeinput data=(e) intputType=(insertText)
+beforeinput data=(b) intputType=(insertText)
 beforeinput data=(e) intputType=(insertText)
+beforeinput data=(c) intputType=(insertText)
 beforeinput data=(e) intputType=(insertText)
+beforeinput data=(null) intputType=(insertParagraph)
 Text in input: reee

+ 1 - 1
Tests/LibWeb/Text/input/Editing/beforeinput-event.html

@@ -11,11 +11,11 @@
     test(() => {
         const input = document.getElementById("input");
         input.addEventListener("beforeinput", (e) => {
+            println(`beforeinput data=(${e.data}) intputType=(${e.inputType})`);
             if (e.data !== 'r' && e.data !== 'e') {
                 e.preventDefault();
                 return;
             }
-            println(`beforeinput data=(${e.data}) intputType=(${e.inputType})`);
         });
         internals.sendText(input, "raebece");
         internals.commitText();

+ 2 - 2
Userland/Libraries/LibWeb/Page/EventHandler.cpp

@@ -38,8 +38,8 @@
 
 namespace Web {
 
-#define FIRE(event_result)                      \
-    if (event_result == EventResult::Cancelled) \
+#define FIRE(expression)                                                          \
+    if (auto event_result = (expression); event_result == EventResult::Cancelled) \
         return event_result;
 
 static JS::GCPtr<DOM::Node> dom_node_for_event_dispatch(Painting::Paintable& paintable)