python decorator and gtk mainloop

I just put together a neat little decorator to force a method to be called via the default gobject main loop. It does this by wrapping a method call via an immediate timeout of the main loop.

  1. def callFromMain(f):
  2. import gobject
  3. def dispatch(items):
  4. args, kwargs = items
  5. return f(*args, **kwargs)
  6. def wrapper(*args, **kwargs):
  7. gobject.timeout_add(0, dispatch, (args, kwargs))
  8. return wrapper
  9.  

This works well for callbacks that come from other threads.

  1. @callFromMain
  2. def resultCallback(*args):
  3. print args