class SignallingHandler (Handler, gobject.GObject): __gsignals__ = { "query-ready" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_PYOBJECT]) } def __init__ (self, iconfile=None): Handler.__init__ (self, iconfile) gobject.GObject.__init__ (self) self.__last_query = "" def query_async (self, qstring, max=5): self.__last_query = qstring self.query (qstring, max) def emit_query_ready (self, matches, qstring): self.__last_query = qstring if qstring == self.__last_query: self.emit ("query-ready", matches) def is_async (self): return True class SampleHandler(AsyncSignalCr4pHandler): def query(self, qstring, max): do_some_creepy_async_call(args, lambda x: self.my_callback(x, qstring)) def my_callback(self, result, qstring): # Do some post processing if needed self.emit_query_ready(result, qstring)