diff --git a/thermion_dart/lib/src/input/src/delegate_input_handler.dart b/thermion_dart/lib/src/input/src/delegate_input_handler.dart index a7f2fae7..6c260e1c 100644 --- a/thermion_dart/lib/src/input/src/delegate_input_handler.dart +++ b/thermion_dart/lib/src/input/src/delegate_input_handler.dart @@ -60,32 +60,38 @@ class DelegateInputHandler implements InputHandler { ]); Future process() async { - _processing = true; final delegate = delegates.first; - final keyUp = {}; - final keyDown = {}; - for (final event in _events) { - if (event is KeyEvent) { - switch (event.type) { - case KeyEventType.up: - keyUp[event.logicalKey] = event; - case KeyEventType.down: - keyDown[event.logicalKey] = event; + late final Map keyDown; + // if batch is true, we treat any tick containing keydown/keyup for the same key as a keydown + if (batch) { + late final Map keyUp = {}; + keyDown = {}; + + for (final event in _events) { + if (event is KeyEvent) { + switch (event.type) { + case KeyEventType.up: + keyUp[event.logicalKey] = event; + case KeyEventType.down: + keyDown[event.logicalKey] = event; + } } } - } - for (final key in keyUp.keys) { - _events.remove(keyDown[key]); - _events.remove(keyUp[key]); + for (final key in keyUp.keys) { + _events.remove(keyDown[key]); + _events.remove(keyUp[key]); + } } await delegate.handle(_events.sublist(0)); - _events.clear(); - _events.addAll(keyDown.values); + if (batch) { + _events.addAll(keyDown.values); + } + _processing = false; }