From 04fc9867acd642a1ad651da24d5970215e918b5c Mon Sep 17 00:00:00 2001 From: tobi-wan-kenobi Date: Sat, 4 Apr 2020 13:52:10 +0200 Subject: [PATCH] [core/input] Move event handling to core.event Until now, bumblebee-status did event handling in two places with almost identical code: in core.event (makes sense) and core.input (still makes sense, but a bit more dubious). Changed core.input to use core.event --- core/input.py | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/core/input.py b/core/input.py index 4f21b12..0065a10 100644 --- a/core/input.py +++ b/core/input.py @@ -19,35 +19,32 @@ def button_name(button): if button == WHEEL_DOWN: return 'wheel-down' return 'n/a' -callbacks = {} - class Object(object): def __init__(self): super(Object, self).__init__() self.id = str(uuid.uuid4()) +def __event_id(obj_id, button): + return '{}::{}'.format(obj_id, button_name(button)) + +def __execute(cmd): + try: + util.cli.execute(cmd, wait=False) + except Exception as e: + logging.error('failed to invoke callback: {}'.format(e)) + def register(obj, button=None, cmd=None): - logging.debug('registering callback {} {}'.format(obj.id, button)) - callbacks.setdefault(obj.id, {}).setdefault(button, []).append(cmd) + event_id = __event_id(obj.id, button) + logging.debug('registering callback {}'.format(event_id)) + if callable(cmd): + core.event.register(event_id, cmd) + else: + core.event.register(event_id, lambda _: __execute(cmd)) def trigger(event): - for field in ['instance', 'name']: - if field in event: - cb = callbacks.get(event[field]) - __invoke(event, cb) - -def __invoke(event, callback): - if not callback: return if not 'button' in event: return - - for cb in callback.get(event['button'], []): - if callable(cb): - cb(event) - else: - try: - util.cli.execute(cb, wait=False) - except Exception as e: - logging.error('failed to invoke callback: {}'.format(e)) - return + for field in ['instance', 'name']: + if not field in event: continue + core.event.trigger(__event_id(event[field], event['button']), event) # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4