diff --git a/gtk/gtksearchengine.c b/gtk/gtksearchengine.c index de992e5666..67110f936b 100644 --- a/gtk/gtksearchengine.c +++ b/gtk/gtksearchengine.c @@ -334,7 +334,8 @@ _gtk_search_engine_new (void) connect_engine_signals (engine->priv->native, engine); _gtk_search_engine_simple_set_indexed_cb (GTK_SEARCH_ENGINE_SIMPLE (engine->priv->simple), _gtk_search_engine_tracker_is_indexed, - engine->priv->native); + g_object_ref (engine->priv->native), + g_object_unref); } #endif diff --git a/gtk/gtksearchenginesimple.c b/gtk/gtksearchenginesimple.c index b405aef976..00543eaa93 100644 --- a/gtk/gtksearchenginesimple.c +++ b/gtk/gtksearchenginesimple.c @@ -57,6 +57,7 @@ struct _GtkSearchEngineSimplePrivate GtkSearchEngineSimpleIsIndexed is_indexed_callback; gpointer is_indexed_data; + GDestroyNotify is_indexed_data_destroy; }; @@ -83,6 +84,13 @@ gtk_search_engine_simple_dispose (GObject *object) priv->active_search = NULL; } + if (priv->is_indexed_data_destroy) + priv->is_indexed_data_destroy (priv->is_indexed_data); + + priv->is_indexed_callback = NULL; + priv->is_indexed_data = NULL; + priv->is_indexed_data_destroy = NULL; + G_OBJECT_CLASS (_gtk_search_engine_simple_parent_class)->dispose (object); } @@ -365,8 +373,13 @@ _gtk_search_engine_simple_new (void) void _gtk_search_engine_simple_set_indexed_cb (GtkSearchEngineSimple *engine, GtkSearchEngineSimpleIsIndexed callback, - gpointer data) + gpointer data, + GDestroyNotify destroy) { + if (engine->priv->is_indexed_data_destroy) + engine->priv->is_indexed_data_destroy (engine->priv->is_indexed_data); + engine->priv->is_indexed_callback = callback; engine->priv->is_indexed_data = data; + engine->priv->is_indexed_data_destroy = destroy; } diff --git a/gtk/gtksearchenginesimple.h b/gtk/gtksearchenginesimple.h index 83a60b1874..421b208e32 100644 --- a/gtk/gtksearchenginesimple.h +++ b/gtk/gtksearchenginesimple.h @@ -57,7 +57,8 @@ typedef gboolean (*GtkSearchEngineSimpleIsIndexed) (GFile *location, gpointer da void _gtk_search_engine_simple_set_indexed_cb (GtkSearchEngineSimple *engine, GtkSearchEngineSimpleIsIndexed callback, - gpointer data); + gpointer data, + GDestroyNotify destroy); G_END_DECLS