summaryrefslogtreecommitdiff
path: root/gtk/gtksearchenginesimple.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2007-09-25 20:59:15 +0000
committerEmmanuele Bassi <ebassi@src.gnome.org>2007-09-25 20:59:15 +0000
commit7421a81f679627af34639e6982153ef482132854 (patch)
tree1f55b0abae4ba2e6b2ffc1f040a7c8b4b140a1a0 /gtk/gtksearchenginesimple.c
parent37c5790a7fb3d2d1e80f4933d7169a2e3ae7b529 (diff)
downloadgtk+-7421a81f679627af34639e6982153ef482132854.tar.gz
Fixes for bug #480123.
2007-09-25 Emmanuele Bassi <ebassi@gnome.org> Fixes for bug #480123. * gtk/gtksearchenginesimple.c: (gtk_search_engine_simple_dispose), (search_thread_done_idle): Cancel the file tree walking thread when disposing the search engine implementation. * gtk/gtkfilechooserdefault.c (search_stop_searching): Forcibly stop the search engine implementation when stopping the search, instead of just unreffing the object. svn path=/trunk/; revision=18865
Diffstat (limited to 'gtk/gtksearchenginesimple.c')
-rw-r--r--gtk/gtksearchenginesimple.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/gtk/gtksearchenginesimple.c b/gtk/gtksearchenginesimple.c
index 4d27957d41..d8d9f2641c 100644
--- a/gtk/gtksearchenginesimple.c
+++ b/gtk/gtksearchenginesimple.c
@@ -72,19 +72,27 @@ struct _GtkSearchEngineSimplePrivate
G_DEFINE_TYPE (GtkSearchEngineSimple, _gtk_search_engine_simple, GTK_TYPE_SEARCH_ENGINE);
static void
-finalize (GObject *object)
+gtk_search_engine_simple_dispose (GObject *object)
{
GtkSearchEngineSimple *simple;
+ GtkSearchEngineSimplePrivate *priv;
simple = GTK_SEARCH_ENGINE_SIMPLE (object);
+ priv = simple->priv;
- if (simple->priv->query)
+ if (priv->query)
+ {
+ g_object_unref (priv->query);
+ priv->query = NULL;
+ }
+
+ if (priv->active_search)
{
- g_object_unref (simple->priv->query);
- simple->priv->query = NULL;
+ priv->active_search->cancelled = TRUE;
+ priv->active_search = NULL;
}
- G_OBJECT_CLASS (_gtk_search_engine_simple_parent_class)->finalize (object);
+ G_OBJECT_CLASS (_gtk_search_engine_simple_parent_class)->dispose (object);
}
static SearchThreadData *
@@ -131,12 +139,10 @@ search_thread_done_idle (gpointer user_data)
data = user_data;
- if (!data->cancelled)
- {
- _gtk_search_engine_finished (GTK_SEARCH_ENGINE (data->engine));
- data->engine->priv->active_search = NULL;
- }
-
+ if (!data->cancelled)
+ _gtk_search_engine_finished (GTK_SEARCH_ENGINE (data->engine));
+
+ data->engine->priv->active_search = NULL;
search_thread_data_free (data);
return FALSE;
@@ -181,6 +187,7 @@ send_batch (SearchThreadData *data)
hits = g_new (SearchHits, 1);
hits->uris = data->uri_hits;
hits->thread_data = data;
+
gdk_threads_add_idle (search_thread_add_hits_idle, hits);
}
data->uri_hits = NULL;
@@ -349,7 +356,7 @@ _gtk_search_engine_simple_class_init (GtkSearchEngineSimpleClass *class)
GtkSearchEngineClass *engine_class;
gobject_class = G_OBJECT_CLASS (class);
- gobject_class->finalize = finalize;
+ gobject_class->dispose = gtk_search_engine_simple_dispose;
engine_class = GTK_SEARCH_ENGINE_CLASS (class);
engine_class->set_query = gtk_search_engine_simple_set_query;