Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/sugar/tutorius
diff options
context:
space:
mode:
Diffstat (limited to 'src/sugar/tutorius')
-rw-r--r--src/sugar/tutorius/gtkutils.py6
-rw-r--r--src/sugar/tutorius/tests/gtkutilstests.py31
2 files changed, 35 insertions, 2 deletions
diff --git a/src/sugar/tutorius/gtkutils.py b/src/sugar/tutorius/gtkutils.py
index c5c1e12..1870dc4 100644
--- a/src/sugar/tutorius/gtkutils.py
+++ b/src/sugar/tutorius/gtkutils.py
@@ -158,7 +158,11 @@ def register_signals(target, handler, prefix=None, max_depth=None):
[p for p in (prefix, target.get_name()) \
if not (p is None or p in IGNORED_WIDGETS)] \
)
- ret += register_signals(child, handler, pre, max_depth-1)
+ if max_depth is None:
+ dep = None
+ else:
+ dep = max_depth - 1
+ ret += register_signals(child, handler, pre, dep)
name = ".".join( \
[p for p in (prefix, target.get_name()) \
if not (p is None or p in IGNORED_WIDGETS)] \
diff --git a/src/sugar/tutorius/tests/gtkutilstests.py b/src/sugar/tutorius/tests/gtkutilstests.py
index 36e76fe..fb9a20b 100644
--- a/src/sugar/tutorius/tests/gtkutilstests.py
+++ b/src/sugar/tutorius/tests/gtkutilstests.py
@@ -28,7 +28,19 @@ import logging
import gtk, gobject
from sugar.tutorius.gtkutils import find_widget, register_signals_numbered, register_signals
+class SignalCatcher(object):
+ def __init__(self):
+ self.data = []
+ def callback(self, *args):
+ self.data = args
+
+def disconnect_handlers(hlist):
+ for widget, handler in hlist:
+ try:
+ widget.handler_disconnect(handler)
+ except:
+ pass
class GtkUtilsTests(unittest.TestCase):
def __init__(self,*args):
@@ -84,10 +96,27 @@ class GtkUtilsTests(unittest.TestCase):
def test_named(self):
#def register_signals(target, handler, prefix=None, max_depth=None):
- pass
+ s=SignalCatcher()
+ handler_list = register_signals(self.top, s.callback, max_depth=0)
+
+ #remove duplicates in widget list
+ widget_list = dict.fromkeys([w for w, h in handler_list]).keys()
+
+ assert len(widget_list) == 1, "register_signals should not have recursed (%d objects registered)" % len(widget_list)
+
+ while gtk.events_pending():
+ gtk.main_iteration(block=False)
def test_numbered(self):
+ s=SignalCatcher()
#def register_signals_numbered(target, handler, prefix="0", max_depth=None):
+ handler_list = register_signals_numbered(self.top, s.callback, max_depth=0)
+
+ #remove duplicates in widget list
+ widget_list = dict.fromkeys([w for w, h in handler_list]).keys()
+
+ assert len(widget_list) == 1, "register_signals should not have recursed (%d objects registered)" % len(widget_list)
+
while gtk.events_pending():
gtk.main_iteration(block=False)