aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuis Ontanon <luis.ontanon@gmail.com>2006-10-05 16:25:13 +0000
committerLuis Ontanon <luis.ontanon@gmail.com>2006-10-05 16:25:13 +0000
commit8dee75cf6892c6574fedc0970402d5c4a10b197d (patch)
tree40f10cecb754ffb0cb6b4ef9a6936774a85db8ad
parent60193f0ae7b15864f65c193a410d774ac20c531f (diff)
downloadwireshark-8dee75cf6892c6574fedc0970402d5c4a10b197d.tar.gz
wireshark-8dee75cf6892c6574fedc0970402d5c4a10b197d.tar.bz2
wireshark-8dee75cf6892c6574fedc0970402d5c4a10b197d.zip
have the funnel client passing the destructors for btn data structures to the funnel.
Although useless in practice, it is better to implement it this way... the funnel mini gui might be used by other modules in the future. svn path=/trunk/; revision=19440
-rw-r--r--epan/funnel.h2
-rw-r--r--epan/wslua/wslua_gui.c2
-rw-r--r--gtk/funnel_stat.c12
3 files changed, 10 insertions, 6 deletions
diff --git a/epan/funnel.h b/epan/funnel.h
index 2c1bf7afe9..09be5448eb 100644
--- a/epan/funnel.h
+++ b/epan/funnel.h
@@ -49,6 +49,8 @@ typedef struct _funnel_bt_t {
funnel_text_window_t* tw;
funnel_bt_cb_t func;
void* data;
+ void (*free)(void*);
+ void (*free_data)(void*);
} funnel_bt_t;
typedef struct _funnel_ops_t {
diff --git a/epan/wslua/wslua_gui.c b/epan/wslua/wslua_gui.c
index c680f149fa..53b2fc0163 100644
--- a/epan/wslua/wslua_gui.c
+++ b/epan/wslua/wslua_gui.c
@@ -447,6 +447,8 @@ WSLUA_METHOD TextWindow_add_button(lua_State* L) {
fbt->tw = tw;
fbt->func = wslua_button_callback;
fbt->data = cbd;
+ fbt->free = g_free;
+ fbt->free_data = g_free;
cbd->L = L;
cbd->data_ref = luaL_ref(L, LUA_REGISTRYINDEX);
diff --git a/gtk/funnel_stat.c b/gtk/funnel_stat.c
index 43f10ef73f..aa569dbba8 100644
--- a/gtk/funnel_stat.c
+++ b/gtk/funnel_stat.c
@@ -107,8 +107,8 @@ static void unref_text_win_cancel_bt_cb(GtkWidget *bt _U_, gpointer data) {
for (i = 0; i < tw->buttons->len; i++) {
funnel_bt_t* cbd = g_ptr_array_index(tw->buttons,i);
/* XXX a free cb should be passed somehow */
- if (cbd->data) g_free(cbd->data);
- g_free(cbd);
+ if (cbd->data && cbd->free_data) cbd->free_data(cbd->data);
+ if (cbd->free) cbd->free(cbd);
}
g_ptr_array_free(tw->buttons,TRUE);
g_free(tw);
@@ -128,8 +128,8 @@ static gboolean text_window_unref_del_event_cb(GtkWidget *win _U_, GdkEvent *eve
for (i = 0; i < tw->buttons->len; i++) {
funnel_bt_t* cbd = g_ptr_array_index(tw->buttons,i);
/* XXX a free cb should be passed somehow */
- if (cbd->data) g_free(cbd->data);
- g_free(cbd);
+ if (cbd->data && cbd->free_data) cbd->free_data(cbd->data);
+ if (cbd->free) cbd->free(cbd);
}
g_ptr_array_free(tw->buttons,TRUE);
g_free(tw);
@@ -380,8 +380,8 @@ static void text_window_destroy(funnel_text_window_t* tw) {
for (i = 0; i < tw->buttons->len; i++) {
funnel_bt_t* cbd = g_ptr_array_index(tw->buttons,i);
/* XXX a free cb should be passed somehow */
- if (cbd->data) g_free(cbd->data);
- g_free(cbd);
+ if (cbd->data && cbd->free_data) cbd->free_data(cbd->data);
+ if (cbd->free) cbd->free(cbd);
}
g_ptr_array_free(tw->buttons,TRUE);
g_free(tw);