[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) event_id = __event_id(obj.id if obj is not None else "", button)
logging.debug("registering callback {}".format(event_id)) logging.debug("registering callback {}".format(event_id))
core.event.unregister(event_id) # make sure there's always only one input event core.event.unregister(event_id) # make sure there's always only one input event
if callable(cmd): if callable(cmd):
core.event.register_exclusive(event_id, 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: else:
core.event.register_exclusive(event_id, lambda event: __execute(event, cmd, wait)) core.event.register_exclusive(event_id, lambda event: __execute(event, cmd, wait))

View file

@ -9,7 +9,7 @@ Parameters:
import core.module import core.module
import core.widget import core.widget
import core.decorators import core.decorators
import core.input
class Module(core.module.Module): class Module(core.module.Module):
@core.decorators.every(minutes=60) @core.decorators.every(minutes=60)
@ -20,5 +20,8 @@ class Module(core.module.Module):
def text(self, _): def text(self, _):
return self.__text return self.__text
def update_text(self, event):
self.__text = core.input.button_name(event["button"])
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4