bumblebee-status/bumblebee_status/core/event.py
tobi-wan-kenobi 9136ebd321 [core/input] clear previous input registrations
make sure that for a given event (widget/object/module, whatever), only
a *single* input event per button can be registered at one time.

the problem otherwise is with modules that re-register their widgets
with the same IDs (cmus, spotify, etc.): Each time the widget is
re-created (each intervall, typically), it re-registers an input event,
creating an always longer list of callbacks being executed when the
button is clicked (not speaking of the memory leak this introduces).

fixes #668
2020-06-29 07:44:22 +02:00

32 lines
643 B
Python

__callbacks = {}
def register(event, callback, *args, **kwargs):
cb = callback
if args or kwargs:
cb = lambda: callback(*args, **kwargs)
__callbacks.setdefault(event, []).append(cb)
def unregister(event):
if event in __callbacks:
del __callbacks[event]
def clear():
__callbacks.clear()
def trigger(event, *args, **kwargs):
cb = __callbacks.get(event, [])
if len(cb) == 0:
return False
for callback in cb:
if args or kwargs:
callback(*args, **kwargs)
else:
callback()
return True
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4