From 29d661b26ade10b56936cafd73e5d5c5b07fb6ba Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Sat, 14 Nov 2009 22:57:35 +0000 Subject: [PATCH] self.signals shouldn't be a class variable. add helper functions to connect child widget signals and disconnect them. --- terminatorlib/container.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/terminatorlib/container.py b/terminatorlib/container.py index 9865b602..70fd4808 100755 --- a/terminatorlib/container.py +++ b/terminatorlib/container.py @@ -22,11 +22,14 @@ class Container(object): 'zoomed' : 1, 'maximised' : 2 } - signals = [] + signals = None + cnxids = None def __init__(self): """Class initialiser""" self.children = [] + self.signals = [] + self.cnxids = {} self.config = Config() self.state_zoomed = self.states_zoom['none'] @@ -49,6 +52,28 @@ class Container(object): err('Container:: registering signal for %s on %s failed' % (signal['name'], widget)) + def connect_child(self, widget, signal, handler, data=None): + """Register the requested signal and record its connection ID""" + if not self.cnxids.has_key(widget): + self.cnxids[widget] = [] + + if data is not None: + self.cnxids[widget].append(widget.connect(signal, handler, data)) + dbg('Container::connect_child: registering %s(%s) to handle %s::%s' % + (handler.__name__, data, widget.__class__.__name__, signal)) + else: + self.cnxids[widget].append(widget.connect(signal, handler)) + dbg('Container::connect_child: registering %s to handle %s::%s' % + (handler.__name__, widget.__class__.__name__, signal)) + + def disconnect_child(self, widget): + """De-register the signals for a child""" + if self.cnxids.has_key(widget): + for cnxid in self.cnxids[widget]: + # FIXME: Look up the IDs to print a useful debugging message + widget.disconnect(cnxid) + del(self.cnxids[widget]) + def get_offspring(self): """Return a list of child widgets, if any""" return(self.children)