mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-05 18:31:09 +00:00
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.
This commit is contained in:
parent
d12c7186b6
commit
ed50772b41
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user