fix: suppress key-repeat events in pynput hotkey listener

Holding the hotkey caused dozens of on_press callbacks due to OS key-repeat.
Added a _pressed guard flag so only the first press and actual release fire.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Vitali Graf
2026-04-08 10:53:09 +02:00
parent b94c58d628
commit 6c678fbcfb
2 changed files with 28 additions and 2 deletions
+5 -2
View File
@@ -36,6 +36,7 @@ class PynputHotkeyListener:
self.on_press: AsyncCallback | None = None
self.on_release: AsyncCallback | None = None
self._loop: asyncio.AbstractEventLoop | None = None
self._pressed = False
async def _handle_key_event(self, key_down: bool) -> None:
"""Ruft den passenden Callback auf."""
@@ -54,12 +55,14 @@ class PynputHotkeyListener:
)
def _on_press(self, key) -> None:
if key == self._target_key:
if key == self._target_key and not self._pressed:
self._pressed = True
logger.debug("%s gedrückt", self.key_name)
self._schedule_callback(key_down=True)
def _on_release(self, key) -> None:
if key == self._target_key:
if key == self._target_key and self._pressed:
self._pressed = False
logger.debug("%s losgelassen", self.key_name)
self._schedule_callback(key_down=False)