[pygtk] gtk.glade missing a get_custom_handler function

Tim Evans t.evans at aranz.com
Mon Jun 19 07:53:23 WST 2006


Yaakov Nemoy wrote:
> Hello list,
> 
> I have a number of objects each with their own GladeXML data member.
> They generate each other recursively, so it's possible that when
> libglade is not done processing one GladeXML object, it already has to
> start processing another one.  Each object has their own set of
> callbacks, and a custom handler that knows where to find them.  Each
> set of callbacks is instance specific, and really needs to be set per
> GladeXML object, per instance.
> 
> Problem is, as best I can figure out, the gtk.glade.set_custom_handler
> is global, and since there is no gtk.glade.get_custom_handler, there
> is no way I can change it per object, and then set it back.  Are there
> any workarounds to this?  Should this be a bug report?
> 
> Yaakov

You could work around this problem by wrapping 
gtk.glade.set_custom_handler in some code like this (untested):

   class _CustomHandlerStack(object):
       def __init__(self):
           self._stack = []
           gtk.glade.set_custom_handler(self._handler)

       def _handler(self, *args):
           try:
               func = self._stack[-1]
           except IndexError:
               raise RuntimeError("no custom handler function")
           return self._stack[-1](*args)

       def push(self, func):
           self._stack.append(func)

       def pop(self):
           try:
               del self._stack[-1]
           except IndexError:
               raise RuntimeError("custom handler stack underflow")

   custom_handler = _CustomHandlerStack()

And use it later like this:

   custom_handler.push(my_hander_func)
   x = gtk.glade.XML(...)
   custom_handler.pop()

-- 
Tim Evans
Applied Research Associates NZ
http://www.aranz.co.nz/


More information about the pygtk mailing list