# HG changeset patch # User nadvornik # Date 1236295976 0 # Node ID 94eb664a7da1f57137bf7637da658daff42f7737 # Parent ddb9c10ee9c649f31c1adbe7cab902f0ad3ffe77 do not crash if an exif entry is deleted during editing diff -r ddb9c10ee9c6 -r 94eb664a7da1 src/bar_exif.c --- a/src/bar_exif.c Thu Mar 05 23:02:15 2009 +0000 +++ b/src/bar_exif.c Thu Mar 05 23:32:56 2009 +0000 @@ -73,6 +73,7 @@ GtkWidget *widget; /* pane or entry, devidet by presenceof "pane_data" or "entry_data" */ /* dialog parts */ + GenericDialog *gd; GtkWidget *key_entry; GtkWidget *title_entry; gboolean if_set; @@ -354,10 +355,16 @@ G_CALLBACK(bar_pane_exif_dnd_receive), NULL); } +static void bar_pane_exif_edit_close_cb(GtkWidget *widget, gpointer data) +{ + GenericDialog *gd = data; + generic_dialog_close(gd); +} static void bar_pane_exif_edit_destroy_cb(GtkWidget *widget, gpointer data) { ConfDialogData *cdd = data; + g_signal_handlers_disconnect_by_func(cdd->widget, G_CALLBACK(bar_pane_exif_edit_close_cb), cdd->gd); g_free(cdd); } @@ -365,6 +372,7 @@ { } + static void bar_pane_exif_edit_ok_cb(GenericDialog *gd, gpointer data) { ConfDialogData *cdd = data; @@ -427,12 +435,16 @@ cdd->if_set = ee ? ee->if_set : TRUE; - gd = generic_dialog_new(ee ? _("Configure entry") : _("Add entry"), "exif_entry_edit", + cdd->gd = gd = generic_dialog_new(ee ? _("Configure entry") : _("Add entry"), "exif_entry_edit", widget, TRUE, bar_pane_exif_edit_cancel_cb, cdd); g_signal_connect(G_OBJECT(gd->dialog), "destroy", G_CALLBACK(bar_pane_exif_edit_destroy_cb), cdd); + /* in case the entry is deleted during editing */ + g_signal_connect(G_OBJECT(widget), "destroy", + G_CALLBACK(bar_pane_exif_edit_close_cb), gd); + generic_dialog_add_message(gd, NULL, ee ? _("Configure entry") : _("Add entry"), NULL); generic_dialog_add_button(gd, GTK_STOCK_OK, NULL,