Commit ed50772b authored by Matthias Clasen's avatar Matthias Clasen

GtkSearchEngine: Avoid a crash

Add a destroy notify for the data of the callback, so we don't
end up leaving a dangling pointer behind for a short while if
the native engine is finalized before the simple one. This
was showing up as crash when typing and backspacing in the
search entry of the file chooser.
parent d12c7186
......@@ -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
......
......@@ -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;
}
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment