arbitrary cleanup; add missing features to Variable

This commit is contained in:
gnat 2025-02-14 18:19:48 -08:00
parent 5a6284d697
commit 2ddb8a05cd
3 changed files with 19 additions and 6 deletions

View File

@ -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

View File

@ -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)

View File

@ -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