diff options
author | Luis Ontanon <luis.ontanon@gmail.com> | 2006-10-05 16:25:13 +0000 |
---|---|---|
committer | Luis Ontanon <luis.ontanon@gmail.com> | 2006-10-05 16:25:13 +0000 |
commit | 8dee75cf6892c6574fedc0970402d5c4a10b197d (patch) | |
tree | 40f10cecb754ffb0cb6b4ef9a6936774a85db8ad | |
parent | 60193f0ae7b15864f65c193a410d774ac20c531f (diff) | |
download | wireshark-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.h | 2 | ||||
-rw-r--r-- | epan/wslua/wslua_gui.c | 2 | ||||
-rw-r--r-- | gtk/funnel_stat.c | 12 |
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); |