public
Description: A dynamic, hackable window manager written in Python
Homepage: http://incise.org/whimsy.html
Clone URL: git://github.com/mackstann/whimsy.git
mackstann (author)
Wed Dec 17 00:45:49 -0800 2008
commit  2c742ca6b26b35670a2e7df4d65ddfc4af985065
tree    c805c40f131a6b250c9d0445e03a697cb441f0c3
parent  9079b0e248731161d341555d2e43effeabd90e0b
whimsy / whimsy / signals.py
100644 30 lines (24 sloc) 0.954 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Written by Nick Welch in the years 2005-2008. Author disclaims copyright.
 
class publisher(object):
    def __init__(self, **defaults):
        self.signals = {}
        self.defaults = defaults
 
    def emit(self, name, **kw):
        import time, sys
        #if name != 'tick':
            #print >>sys.stderr, time.time(), name, sorted(kw.keys())
        kw_dict = dict(self.defaults, **kw)
        for chain in self.signals.get(name, [])[:]:
            for func in chain:
                if not func(**kw_dict):
                    break
 
    def attach(self, name, *chain):
        self.signals.setdefault(name, []).append(chain)
        for f in chain: # HACK
            if hasattr(f, '__connected__'):
                f.__connected__(**self.defaults)
 
    def detach(self, func):
        for chains in self.signals.values():
            for i, chain in enumerate(chains):
                if func in chain:
                    chains.pop(i)