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.
def callFromMain(f): import gobject def dispatch(items): args, kwargs = items return f(*args, **kwargs) def wrapper(*args, **kwargs): gobject.timeout_add(0, dispatch, (args, kwargs)) return wrapper
This works well for callbacks that come from other threads.
@callFromMain def resultCallback(*args): print args
