Mercurial > geeqie
diff src/pan-view.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 | 2a96ff43ab3e |
children | decb3b64ae74 |
line wrap: on
line diff
--- a/src/pan-view.c Sat Jul 18 08:16:54 2009 +0000 +++ b/src/pan-view.c Tue Jul 21 14:17:01 2009 +0000 @@ -2778,10 +2778,9 @@ static void pan_popup_menu_destroy_cb(GtkWidget *widget, gpointer data) { - PanWindow *pw = data; - - filelist_free(pw->editmenu_fd_list); - pw->editmenu_fd_list = NULL; + GList *editmenu_fd_list = data; + + filelist_free(editmenu_fd_list); } static GList *pan_view_get_fd_list(PanWindow *pw) @@ -2800,6 +2799,7 @@ GtkWidget *submenu; GtkWidget *item; gboolean active; + GList *editmenu_fd_list; active = (pw->click_pi != NULL); @@ -2815,8 +2815,11 @@ G_CALLBACK(pan_zoom_1_1_cb), pw); menu_item_add_divider(menu); - pw->editmenu_fd_list = pan_view_get_fd_list(pw); - submenu_add_edit(menu, &item, G_CALLBACK(pan_edit_cb), pw, pw->editmenu_fd_list); + editmenu_fd_list = pan_view_get_fd_list(pw); + g_signal_connect(G_OBJECT(menu), "destroy", + G_CALLBACK(pan_popup_menu_destroy_cb), editmenu_fd_list); + + submenu_add_edit(menu, &item, G_CALLBACK(pan_edit_cb), pw, editmenu_fd_list); gtk_widget_set_sensitive(item, active); menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, active,