diff options
Diffstat (limited to 'lvc/signals.py')
-rw-r--r-- | lvc/signals.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lvc/signals.py b/lvc/signals.py index 2f64dc9..6fb6a93 100644 --- a/lvc/signals.py +++ b/lvc/signals.py @@ -37,9 +37,11 @@ import logging import sys import weakref + class NestedSignalError(StandardError): pass + class WeakMethodReference: """Used to handle weak references to a method. @@ -59,11 +61,14 @@ class WeakMethodReference: def __call__(self): func = self.func() - if func is None: return None + if func is None: + return None obj = self.object() - if obj is None: return None + if obj is None: + return None return func.__get__(obj, self.cls) + class Callback: def __init__(self, func, extra_args): self.func = func @@ -78,6 +83,7 @@ class Callback: def is_dead(self): return False + class WeakCallback: def __init__(self, method, extra_args): self.ref = WeakMethodReference(method) @@ -96,6 +102,7 @@ class WeakCallback: def is_dead(self): return self.ref() is None + class SignalEmitter(object): def __init__(self, *signal_names): self.signal_callbacks = {} @@ -175,7 +182,7 @@ class SignalEmitter(object): return if name in self._currently_emitting: raise NestedSignalError("Can't emit %s while handling %s" % - (name, name)) + (name, name)) self._currently_emitting.add(name) try: callback_returned_true = self._run_signal(name, args) @@ -206,6 +213,7 @@ class SignalEmitter(object): if callback_map[id_].is_dead(): del callback_map[id_] + class SystemSignals(SignalEmitter): """System wide signals for Miro. These can be accessed from the singleton object signals.system. Signals include: |