]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtksearchenginetracker.c
Ensure we always grab the gdk lock in async callbacks
[~andy/gtk] / gtk / gtksearchenginetracker.c
index 641e7938eb171b9a7d0a5f947aefb07585fc5b19..68346fa43e8f9a5982d7c6cd2176316bdd56178e 100644 (file)
@@ -203,6 +203,8 @@ cursor_callback (GObject      *object,
        GList *hits;
   gboolean success;
 
+  gdk_threads_enter ();
+
   tracker = GTK_SEARCH_ENGINE_TRACKER (user_data);
 
        cursor = TRACKER_SPARQL_CURSOR (object);
@@ -217,6 +219,7 @@ cursor_callback (GObject      *object,
       if (cursor)
              g_object_unref (cursor);
 
+      gdk_threads_leave ();
       return;
     }
 
@@ -227,6 +230,7 @@ cursor_callback (GObject      *object,
                  if (cursor)
                          g_object_unref (cursor);
 
+                 gdk_threads_leave ();
                  return;
          }
 
@@ -237,6 +241,9 @@ cursor_callback (GObject      *object,
 
   /* Get next */
   cursor_next (tracker, cursor);
+
+  gdk_threads_leave ();
+
 }
 
 static void
@@ -249,6 +256,8 @@ query_callback (GObject      *object,
   TrackerSparqlCursor *cursor;
   GError *error = NULL;
 
+  gdk_threads_enter ();
+
   tracker = GTK_SEARCH_ENGINE_TRACKER (user_data);
 
   tracker->priv->query_pending = FALSE;
@@ -264,16 +273,19 @@ query_callback (GObject      *object,
     {
       _gtk_search_engine_error (GTK_SEARCH_ENGINE (tracker), error->message);
       g_error_free (error);
+      gdk_threads_leave ();
       return;
     }
 
   if (!cursor)
          {
                  _gtk_search_engine_finished (GTK_SEARCH_ENGINE (tracker));
+                 gdk_threads_leave ();
                  return;
          }
 
   cursor_next (tracker, cursor);
+  gdk_threads_leave ();
 }
 
 static void