Skip to content

Commit c383701

Browse files
committed
Notify model listeners in case there was a side effect
1 parent e338065 commit c383701

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

ltk/widgets.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -649,13 +649,18 @@ def set_value(self, value):
649649
return
650650
self.value = typed_value
651651
self.model.changed(self.name, self.value)
652+
self.notify()
653+
return self.value
654+
655+
def notify(self):
656+
""" Notify listeners of the change """
652657
for listener in self.listeners:
653658
listener(self)
654-
return self.value
655659

656660
def __getattr__(self, name):
657661
# handle calls to list.push or similar apis on the attribute.
658662
try:
663+
schedule(self.notify, f"ltk-model-nofity-{id(self)}") # assume there was a side effect
659664
return getattr(self.value, name)
660665
except Exception as e:
661666
raise AttributeError(f"Model attribute {self.model.__class__.__name__}.{self.name} of type {type(self.value)} does not have attribute {name}") from e
@@ -744,8 +749,7 @@ def __setitem__(self, key, value):
744749
if isinstance(self.value, (list, dict)):
745750
self.value[key] = value
746751
self.model.changed(self.name, self.value)
747-
for listener in self.listeners:
748-
listener(self)
752+
self.notify()
749753
else:
750754
raise TypeError(f"'{type(self.value).__name__}' object does not support item assignment")
751755

0 commit comments

Comments
 (0)