From 873244879ff80bc75b845372fba76c4a6f7b7de4 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Mon, 2 Jun 2025 12:14:05 +0800 Subject: [PATCH] when batch is true in DelegateInputHandler, filter simultaneous keydown/keyup --- .../src/input/src/delegate_input_handler.dart | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) 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; }