Wireshark-bugs: [Wireshark-bugs] [Bug 9129] Crash then try to delete the same entry (length rang
Date: Fri, 04 Oct 2013 12:59:47 +0000
Martin Kaiser changed bug 9129
What | Removed | Added |
---|---|---|
Attachment #11594 Flags | review_for_checkin? | review_for_checkin+ |
Comment # 4
on bug 9129
from Martin Kaiser
Comment on attachment 11594 [details] only allow one popup for confirming deletion >diff --git a/ui/gtk/uat_gui.c b/ui/gtk/uat_gui.c >index 038a5eb..590ce06 100644 >--- a/ui/gtk/uat_gui.c >+++ b/ui/gtk/uat_gui.c >@@ -114,6 +114,7 @@ struct _uat_dlg_data { > GPtrArray *tobe_freed; > }; > >+struct _uat_del *current_ud = NULL; > > static gboolean unsaved_dialog(GtkWindow *w, GdkEvent *e, gpointer u); > static gboolean uat_window_delete_event_cb(GtkWindow *w, GdkEvent *e, gpointer u); >@@ -549,39 +550,43 @@ struct _uat_del { > gint idx; > }; > >-static void uat_del_cb(GtkButton *button _U_, gpointer u) { >- struct _uat_del *ud = (struct _uat_del *)u; >+static void uat_del_cb(GtkButton *button _U_, gpointer u _U_) { > GtkTreeIter iter; > GtkTreePath *path; > >- uat_remove_record_idx(ud->uat, ud->idx); >+ g_assert(current_ud); > >- if (ud->uat->rep) { >- path = gtk_tree_path_new_from_indices(ud->idx, -1); >- if (path && gtk_tree_model_get_iter(GTK_TREE_MODEL(ud->uat->rep->list_store), &iter, path)) { >- gtk_list_store_remove(ud->uat->rep->list_store, &iter); >+ uat_remove_record_idx(current_ud->uat, current_ud->idx); >+ >+ if (current_ud->uat->rep) { >+ path = gtk_tree_path_new_from_indices(current_ud->idx, -1); >+ if (path && gtk_tree_model_get_iter(GTK_TREE_MODEL(current_ud->uat->rep->list_store), &iter, path)) { >+ gtk_list_store_remove(current_ud->uat->rep->list_store, &iter); > } > } > >- ud->uat->changed = TRUE; >- set_buttons(ud->uat, -1); >+ current_ud->uat->changed = TRUE; >+ set_buttons(current_ud->uat, -1); > >- window_destroy(GTK_WIDGET(ud->win)); >+ window_destroy(GTK_WIDGET(current_ud->win)); > >- if (ud->uat->rep) >- window_present(GTK_WIDGET(ud->uat->rep->window)); >+ if (current_ud->uat->rep) >+ window_present(GTK_WIDGET(current_ud->uat->rep->window)); > >- g_free(ud); >+ g_free(current_ud); >+ current_ud = NULL; > } > >-static void uat_cancel_del_cb(GtkButton *button _U_, gpointer u) { >- struct _uat_del *ud = (struct _uat_del *)u; >+static void uat_cancel_del_cb(GtkButton *button _U_, gpointer u _U_) { >+ >+ g_assert(current_ud); > >- window_destroy(GTK_WIDGET(ud->win)); >+ window_destroy(GTK_WIDGET(current_ud->win)); > >- if (ud->uat->rep) >- window_present(GTK_WIDGET(ud->uat->rep->window)); >- g_free(ud); >+ if (current_ud->uat->rep) >+ window_present(GTK_WIDGET(current_ud->uat->rep->window)); >+ g_free(current_ud); >+ current_ud = NULL; > } > > static void uat_del_dlg(uat_t *uat, int idx) { >@@ -589,11 +594,17 @@ static void uat_del_dlg(uat_t *uat, int idx) { > uat_field_t *f = uat->fields; > guint colnum; > void *rec = UAT_INDEX_PTR(uat, idx); >- struct _uat_del *ud = (struct _uat_del *)g_malloc(sizeof(struct _uat_del)); > >- ud->uat = uat; >- ud->idx = idx; >- ud->win = win = dlg_conf_window_new(ep_strdup_printf("%s: Confirm Delete", uat->name)); >+ /* we can only ever display one "confirm deletion" dialogue >+ at the same time */ >+ if (current_ud) { >+ window_destroy(GTK_WIDGET(current_ud->win)); >+ g_free(current_ud); >+ } >+ current_ud = (struct _uat_del *)g_malloc(sizeof(struct _uat_del)); >+ current_ud->uat = uat; >+ current_ud->idx = idx; >+ current_ud->win = win = dlg_conf_window_new(ep_strdup_printf("%s: Confirm Delete", uat->name)); > > gtk_window_set_resizable(GTK_WINDOW(win), FALSE); > gtk_window_resize(GTK_WINDOW(win), 400, 25*(uat->ncols+2)); >@@ -624,10 +635,10 @@ static void uat_del_dlg(uat_t *uat, int idx) { > gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0); > > bt_ok = (GtkWidget *)g_object_get_data(G_OBJECT(bbox), GTK_STOCK_DELETE); >- g_signal_connect(bt_ok, "clicked", G_CALLBACK(uat_del_cb), ud); >+ g_signal_connect(bt_ok, "clicked", G_CALLBACK(uat_del_cb), NULL); > > bt_cancel = (GtkWidget *)g_object_get_data(G_OBJECT(bbox), GTK_STOCK_CANCEL); >- g_signal_connect(bt_cancel, "clicked", G_CALLBACK(uat_cancel_del_cb), ud); >+ g_signal_connect(bt_cancel, "clicked", G_CALLBACK(uat_cancel_del_cb), NULL); > window_set_cancel_button( win, bt_cancel, NULL); > > gtk_widget_show_all(win);
You are receiving this mail because:
- You are watching all bug changes.
- Prev by Date: [Wireshark-bugs] [Bug 9129] Crash then try to delete the same entry (length range) twice
- Next by Date: [Wireshark-bugs] [Bug 9229] New: Add new function in strutil.c to replace non-printable char by a dot
- Previous by thread: [Wireshark-bugs] [Bug 9129] Crash then try to delete the same entry (length range) twice
- Next by thread: [Wireshark-bugs] [Bug 9129] Crash then try to delete the same entry (length range) twice
- Index(es):