Mercurial > geeqie
diff src/search.c @ 1698:bfe04f01de5e
fixed destroying of menu data
Make sure that menu destroy functions do not access parent widget
structures that are already destroyed
There are 2 ways to achieve this:
- use g_signal_handlers_disconnect_matched() like in vf_destroy_cb()
- use separate data structure passed to *_popup_menu_destroy_cb()
like in img-view.
author | nadvornik |
---|---|
date | Tue, 21 Jul 2009 14:17:01 +0000 |
parents | 349ebc02b8e2 |
children | 9a351e8f3b97 |
line wrap: on
line diff
--- a/src/search.c Sat Jul 18 08:16:54 2009 +0000 +++ b/src/search.c Tue Jul 21 14:17:01 2009 +0000 @@ -190,10 +190,6 @@ ThumbLoader *thumb_loader; gboolean thumb_enable; FileData *thumb_fd; - - /* file list for edit menu */ - GList *editmenu_fd_list; - }; typedef struct _MatchFileData MatchFileData; @@ -984,20 +980,18 @@ static void search_result_menu_destroy_cb(GtkWidget *widget, gpointer data) { - SearchData *sd = data; - - filelist_free(sd->editmenu_fd_list); - sd->editmenu_fd_list = NULL; + GList *editmenu_fd_list = data; + + filelist_free(editmenu_fd_list); } static GtkWidget *search_result_menu(SearchData *sd, gboolean on_row, gboolean empty) { GtkWidget *menu; GtkWidget *item; + GList *editmenu_fd_list; menu = popup_menu_short_lived(); - g_signal_connect(G_OBJECT(menu), "destroy", - G_CALLBACK(search_result_menu_destroy_cb), sd); menu_item_add_sensitive(menu, _("_View"), on_row, G_CALLBACK(sr_menu_view_cb), sd); @@ -1010,8 +1004,10 @@ G_CALLBACK(sr_menu_select_none_cb), sd); menu_item_add_divider(menu); - sd->editmenu_fd_list = search_result_selection_list(sd); - submenu_add_edit(menu, &item, G_CALLBACK(sr_menu_edit_cb), sd, sd->editmenu_fd_list); + editmenu_fd_list = search_result_selection_list(sd); + g_signal_connect(G_OBJECT(menu), "destroy", + G_CALLBACK(search_result_menu_destroy_cb), editmenu_fd_list); + submenu_add_edit(menu, &item, G_CALLBACK(sr_menu_edit_cb), sd, editmenu_fd_list); if (!on_row) gtk_widget_set_sensitive(item, FALSE); menu_item_add_stock_sensitive(menu, _("Add to new collection"), GTK_STOCK_INDEX, on_row, G_CALLBACK(sr_menu_collection_cb), sd);