[core/input] methods can be event callbacks

When registering an event (especially mouse events), if the parameter
is a valid method in the Module, execute that with the event as
parameter.

Add this in the core.spacer module as an example.

fixes #858
see #857
This commit is contained in:
tobi-wan-kenobi 2022-03-04 09:35:43 +01:00
parent eb51a3c1c7
commit 7d33171749
2 changed files with 7 additions and 1 deletions

View file

@ -54,8 +54,11 @@ def register(obj, button=None, cmd=None, wait=False):
event_id = __event_id(obj.id if obj is not None else "", button)
logging.debug("registering callback {}".format(event_id))
core.event.unregister(event_id) # make sure there's always only one input event
if callable(cmd):
core.event.register_exclusive(event_id, cmd)
elif obj and hasattr(obj, cmd) and callable(getattr(obj, cmd)):
core.event.register_exclusive(event_id, lambda event: getattr(obj, cmd)(event))
else:
core.event.register_exclusive(event_id, lambda event: __execute(event, cmd, wait))