diff --git a/astal/binding.py b/astal/binding.py index faeaf7e..c31bed4 100644 --- a/astal/binding.py +++ b/astal/binding.py @@ -4,8 +4,6 @@ gi.require_version("GObject", "2.0") from gi.repository import GObject -# from variable import Variable - class Binding(GObject.Object): def __init__(self, emitter: GObject.GObject, property: str | None = None, transform_fn = lambda x: x): self.emitter = emitter diff --git a/astal/gtk3/app.py b/astal/gtk3/app.py index 8b7f23c..4f2ebda 100644 --- a/astal/gtk3/app.py +++ b/astal/gtk3/app.py @@ -12,7 +12,6 @@ class AstalPy(Astal.Application): request_handler: Optional[Callable[[str, Callable[[Any], None]], None]] = None def do_astal_application_request(self, msg: str, conn: Gio.SocketConnection): - print(msg) if callable(self.request_handler): def respond(response: Any): AstalIO.write_sock(conn, str(response), None, None) diff --git a/astal/variable.py b/astal/variable.py index 6e4f90d..3b20e9e 100644 --- a/astal/variable.py +++ b/astal/variable.py @@ -31,6 +31,9 @@ class Variable(AstalIO.VariableBase): def __del__(self): self.emit_dropped() + def __call__(self, transform: Callable = lambda x: x): + return Binding(self).transform(transform) + def subscribe(self, callback): id = self.emitter.connect( 'changed', @@ -38,6 +41,7 @@ class Variable(AstalIO.VariableBase): ) def unsubscribe(_=None): + self.emit_dropped() self.emitter.disconnect(id) return unsubscribe @@ -126,9 +130,21 @@ class Variable(AstalIO.VariableBase): def is_watching(self): return self.watch_proc != None - def observe(self, object, signal, callback=lambda _, x: x): - # not sure about this - object.connect(signal, lambda *args: self.set_value(callback(*args))) + def observe(self, object, signal_or_callback, callback=lambda _, x: x): + if isinstance(signal_or_callback, str): + f = callback + + else: + f = signal_or_callback + + set = lambda *args: self.set(f(*args)) + + if isinstance(signal_or_callback, str): + object.connect(signal_or_callback, set) + + if isinstance(object, list): + for connectable, signal in object: + connectable.connect(signal, set) return self