Index: deskbar/handlers/gdmactions.py
===================================================================
--- deskbar/handlers/gdmactions.py	(revision 1826)
+++ deskbar/handlers/gdmactions.py	(working copy)
@@ -315,3 +315,4 @@
         matches = self.indexer.look_up(query)
         self.set_priority_for_matches( matches )
         self._emit_query_ready(query, matches )
+        self._emit_finished()
Index: deskbar/handlers/programs.py
===================================================================
--- deskbar/handlers/programs.py	(revision 1826)
+++ deskbar/handlers/programs.py	(working copy)
@@ -109,6 +109,7 @@
         if self._match != None:
             self._match.set_priority( self.get_priority() + get_priority_for_name(qstring, self._match._desktop.get_string("Exec")) )
             self._emit_query_ready(qstring, [self._match] )
+            self._emit_finished()
             
     @staticmethod
     def desktop_file_exists(desktop):
@@ -272,6 +273,7 @@
         result += self.query_desktop_programs(query)
         self.set_priority_for_matches(result)
         self._emit_query_ready(query, result )
+        self._emit_finished()
         
     def query_path_programs(self, query):
         program = query.split(" ")[0]
Index: deskbar/handlers/templates.py
===================================================================
--- deskbar/handlers/templates.py	(revision 1826)
+++ deskbar/handlers/templates.py	(working copy)
@@ -198,4 +198,5 @@
         matches = self.indexer.look_up(query)
         self.set_priority_for_matches(matches)
         self._emit_query_ready(query, matches)
+        self._emit_finished()
 
Index: deskbar/handlers/history.py
===================================================================
--- deskbar/handlers/history.py	(revision 1826)
+++ deskbar/handlers/history.py	(working copy)
@@ -58,3 +58,4 @@
                 priority = inc_priority (priority)
         
         self._emit_query_ready(query, result )
+        self._emit_finished()
Index: deskbar/handlers/files.py
===================================================================
--- deskbar/handlers/files.py	(revision 1826)
+++ deskbar/handlers/files.py	(working copy)
@@ -117,6 +117,7 @@
                 result.append (vol_match)
         
         self._emit_query_ready(query, result )
+        self._emit_finished()
     
     def _query_filefolder(self, query, is_file):
         completions, prefix, relative = filesystem_possible_completions(query, is_file)
Index: deskbar/handlers/beagle-static.py
===================================================================
--- deskbar/handlers/beagle-static.py	(revision 1826)
+++ deskbar/handlers/beagle-static.py	(working copy)
@@ -44,6 +44,7 @@
                 
     def query(self, query):
         self._emit_query_ready(query, [BeagleMatch(name=query, priority=self.get_priority())] )
+        self._emit_finished()
     
     @staticmethod
     def has_requirements():
Index: deskbar/handlers/mozilla.py
===================================================================
--- deskbar/handlers/mozilla.py	(revision 1826)
+++ deskbar/handlers/mozilla.py	(working copy)
@@ -156,6 +156,7 @@
             matches = self._bookmarks.look_up(query)[:deskbar.DEFAULT_RESULTS_PER_HANDLER]
         self.set_priority_for_matches( matches )
         self._emit_query_ready(query, matches )
+        self._emit_finished()
     
     def query_smart_bookmarks(self, query, max):
         # if one of the smart bookmarks' shortcuts matches as a prefix,
Index: deskbar/handlers/tomboy.py
===================================================================
--- deskbar/handlers/tomboy.py	(revision 1826)
+++ deskbar/handlers/tomboy.py	(working copy)
@@ -164,6 +164,7 @@
 				# A lambda, because otherwise the handler won't get the query text
 				reply_handler=lambda notes: self.handle_searchnotes( text, notes ),
 				error_handler=self.handle_dbus_error )
+	self._emit_finished()
 	
 	@staticmethod
 	def has_requirements():
Index: deskbar/handlers/beagle-live.py
===================================================================
--- deskbar/handlers/beagle-live.py	(revision 1826)
+++ deskbar/handlers/beagle-live.py	(working copy)
@@ -295,6 +295,7 @@
         self.beagle_query.add_text(qstring)
         self.beagle_query.connect("hits-added", self.hits_added, qstring, MAX_RESULTS)
         self.beagle.send_request_async(self.beagle_query)
+        self._emit_finished()
        
     def hits_added(self, query, response, qstring, qmax):
         hit_matches = []
Index: deskbar/handlers/epiphany.py
===================================================================
--- deskbar/handlers/epiphany.py	(revision 1826)
+++ deskbar/handlers/epiphany.py	(working copy)
@@ -152,6 +152,7 @@
         matches = self._history.look_up(query)[:deskbar.DEFAULT_RESULTS_PER_HANDLER]
         self.set_priority_for_matches( matches )
         self._emit_query_ready(query, matches )
+        self._emit_finished()
         
 class EpiphanyBookmarksParser(xml.sax.ContentHandler):
     def __init__(self, handler, cache):
Index: deskbar/handlers/desklicious.py
===================================================================
--- deskbar/handlers/desklicious.py	(revision 1826)
+++ deskbar/handlers/desklicious.py	(working copy)
@@ -70,6 +70,7 @@
         logging.info('Returning del.icio.us result')
         self.set_priority_for_matches( posts )
         self._emit_query_ready(tag, posts )
+        self._emit_finished()
         
     def has_config(self):
         return True
Index: deskbar/handlers/iswitch-window.py
===================================================================
--- deskbar/handlers/iswitch-window.py	(revision 1826)
+++ deskbar/handlers/iswitch-window.py	(working copy)
@@ -68,3 +68,4 @@
                                 break
 
         self._emit_query_ready(query, results )
+        self._emit_finished()
Index: deskbar/handlers/yahoo.py
===================================================================
--- deskbar/handlers/yahoo.py	(revision 1826)
+++ deskbar/handlers/yahoo.py	(working copy)
@@ -81,3 +81,4 @@
         #self.check_query_changed ()
         logging.info("Returning yahoo answer for: "+qstring)
         self._emit_query_ready(qstring, matches )
+        self._emit_finished()
Index: deskbar/handlers/recent.py
===================================================================
--- deskbar/handlers/recent.py	(revision 1826)
+++ deskbar/handlers/recent.py	(working copy)
@@ -50,10 +50,11 @@
             if not recent.exists(): continue
             result.append (RecentMatch (recent, category="files", priority=self.get_priority()))
         self._emit_query_ready(query, result )
+        self._emit_finished()
             
     @staticmethod
     def has_requirements():
         if gtk.pygtk_version >= (2,9,0):
             return True
         RecentHandler.INSTRUCTIONS = _("This handler requires a more recent gtk version (2.9.0 or newer).")
-        return False
\ No newline at end of file
+        return False
Index: deskbar/handlers/web_address.py
===================================================================
--- deskbar/handlers/web_address.py	(revision 1826)
+++ deskbar/handlers/web_address.py	(working copy)
@@ -52,6 +52,7 @@
         result = self.query_http(query)
         result += self.query_mail(query)
         self._emit_query_ready(query, result )
+        self._emit_finished()
         
     def query_http(self, query):
         match = AUTH_REGEX.match(query)
Index: deskbar/handlers/evolution.py
===================================================================
--- deskbar/handlers/evolution.py	(revision 1826)
+++ deskbar/handlers/evolution.py	(working copy)
@@ -58,6 +58,7 @@
                 continue            
             matches.append(EvolutionMatch(name, email, uri, pixbuf, priority=self.get_priority()))
         self._emit_query_ready(query, matches )
+        self._emit_finished()
         
     @staticmethod
     def has_requirements():
Index: deskbar/interfaces/Module.py
===================================================================
--- deskbar/interfaces/Module.py	(revision 1826)
+++ deskbar/interfaces/Module.py	(working copy)
@@ -6,6 +6,7 @@
     
     __gsignals__ = {
         "query-ready" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_STRING, gobject.TYPE_PYOBJECT]),
+        "finished" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []),
     }
     
     INFOS = {'icon': '', 'name': '', 'description': '', 'version': '1.0.0.0', 'categories': {}}
@@ -22,6 +23,11 @@
         """Idle handler to emit a 'query-ready' signal to the main loop."""
         self.emit ("query-ready", query, matches)
         return False
+        
+    def _emit_finished (self):
+        """Idle handler to emit a 'finished' signal to the main loop."""
+        self.emit ("finished")
+        return False
     
     def is_enabled(self):
         """
@@ -131,4 +137,4 @@
         Whether all requirements are met to use this module
         """
         return True
-    
\ No newline at end of file
+    
