fix: EvdevHotkeyListener.stop() cancelt Tasks und schließt Devices
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,8 @@ class EvdevHotkeyListener:
|
||||
raise ValueError(f"Unbekannter Key-Name: {key_name}")
|
||||
self.on_press: AsyncCallback | None = None
|
||||
self.on_release: AsyncCallback | None = None
|
||||
self._tasks: list[asyncio.Task] = []
|
||||
self._devices: list[InputDevice] = []
|
||||
|
||||
async def _handle_key_event(self, key_down: bool) -> None:
|
||||
"""Ruft den passenden Callback auf."""
|
||||
@@ -57,13 +59,21 @@ class EvdevHotkeyListener:
|
||||
await self._handle_key_event(key_down=False)
|
||||
|
||||
def stop(self) -> None:
|
||||
"""Stub — evdev-Listener läuft bis zum Prozessende."""
|
||||
pass
|
||||
"""Cancelt laufende Read-Tasks und schließt Devices."""
|
||||
for task in self._tasks:
|
||||
task.cancel()
|
||||
for dev in self._devices:
|
||||
try:
|
||||
dev.close()
|
||||
except Exception:
|
||||
pass
|
||||
self._tasks = []
|
||||
self._devices = []
|
||||
|
||||
async def listen(self) -> None:
|
||||
"""Lauscht auf evdev-Events der konfigurierten Taste auf allen passenden Devices."""
|
||||
devices = find_keyboard_devices(self.key_name)
|
||||
for dev in devices:
|
||||
self._devices = find_keyboard_devices(self.key_name)
|
||||
for dev in self._devices:
|
||||
logger.info("Lausche auf %s auf %s (%s)", self.key_name, dev.name, dev.path)
|
||||
tasks = [asyncio.create_task(self._read_device(dev)) for dev in devices]
|
||||
await asyncio.gather(*tasks)
|
||||
self._tasks = [asyncio.create_task(self._read_device(dev)) for dev in self._devices]
|
||||
await asyncio.gather(*self._tasks, return_exceptions=True)
|
||||
|
||||
Reference in New Issue
Block a user