Get the pointer to the packet list record and use the data directly.

svn path=/trunk/; revision=29406
This commit is contained in:
Anders Broman 2009-08-13 21:36:01 +00:00
parent 71291d0d17
commit 96907a7180
2 changed files with 24 additions and 39 deletions

View File

@ -441,36 +441,6 @@ row_from_iter(GtkTreeIter *iter)
return record->pos; return record->pos;
} }
static gboolean
get_dissected_flag_from_iter(GtkTreeIter *iter)
{
PacketListRecord *record;
record = iter->user_data;
return record->dissected;
}
static gboolean
col_text_present_from_iter(GtkTreeIter *iter)
{
PacketListRecord *record;
record = iter->user_data;
return record->col_text != NULL;
}
static void
set_dissected_flag_from_iter(GtkTreeIter *iter, gboolean dissected)
{
PacketListRecord *record;
record = iter->user_data;
record->dissected = dissected;
}
/* XXX: will this work with display filters? */ /* XXX: will this work with display filters? */
static gboolean static gboolean
iter_from_row(GtkTreeIter *iter, guint row) iter_from_row(GtkTreeIter *iter, guint row)
@ -543,22 +513,37 @@ static void
show_cell_data_func(GtkTreeViewColumn *col _U_, GtkCellRenderer *renderer, show_cell_data_func(GtkTreeViewColumn *col _U_, GtkCellRenderer *renderer,
GtkTreeModel *model, GtkTreeIter *iter, gpointer data) GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{ {
guint row = row_from_iter(iter); guint row;
guint col_num = GPOINTER_TO_INT(data); guint col_num = GPOINTER_TO_INT(data);
frame_data *fdata = new_packet_list_get_row_data(row); frame_data *fdata;
color_filter_t *color_filter; color_filter_t *color_filter;
color_t fg_color_t; color_t fg_color_t;
color_t bg_color_t; color_t bg_color_t;
GdkColor fg_gdk; GdkColor fg_gdk;
GdkColor bg_gdk; GdkColor bg_gdk;
gchar *cell_text; gchar *cell_text;
PacketListRecord *record;
if (get_dissected_flag_from_iter(iter)) /* XXX column zero is a temp hack
* Get the pointer to the record that makes the data for all columns
* avalable.
*/
gtk_tree_model_get(model, iter,
0, (PacketListRecord*) &record,
-1);
fdata = record->fdata;
row = record->pos;
if (record->dissected)
color_filter = fdata->color_filter; color_filter = fdata->color_filter;
else { else {
gboolean col_text_present = col_text_present_from_iter(iter); gboolean col_text_present = FALSE;
if(record->col_text != NULL)
col_text_present = TRUE;
new_packet_list_dissect(fdata, col_text_present); new_packet_list_dissect(fdata, col_text_present);
set_dissected_flag_from_iter(iter, TRUE); record->dissected = TRUE;
cache_columns(fdata, row, col_text_present); cache_columns(fdata, row, col_text_present);
color_filter = fdata->color_filter; color_filter = fdata->color_filter;
} }
@ -567,9 +552,7 @@ show_cell_data_func(GtkTreeViewColumn *col _U_, GtkCellRenderer *renderer,
col_fill_in_frame_data(fdata, &cfile.cinfo, col_num); col_fill_in_frame_data(fdata, &cfile.cinfo, col_num);
cell_text = g_strdup(cfile.cinfo.col_data[col_num]); cell_text = g_strdup(cfile.cinfo.col_data[col_num]);
}else{ }else{
gtk_tree_model_get(model, iter, cell_text = g_strdup(record->col_text[col_num]);
col_num, &cell_text,
-1);
} }
if((fdata->color_filter)||(fdata->flags.marked)){ if((fdata->color_filter)||(fdata->flags.marked)){

View File

@ -225,6 +225,8 @@ packet_list_init(PacketList *packet_list)
* colum types add case statements to the switch. * colum types add case statements to the switch.
*/ */
case COL_NUMBER: case COL_NUMBER:
packet_list->column_types[i] = G_TYPE_POINTER;
break;
default: default:
packet_list->column_types[i] = G_TYPE_STRING; packet_list->column_types[i] = G_TYPE_STRING;
break; break;
@ -370,7 +372,7 @@ packet_list_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, gint column,
*/ */
switch(type){ switch(type){
case G_TYPE_POINTER: case G_TYPE_POINTER:
g_value_set_pointer(value, record); g_value_set_pointer(value, iter->user_data);
break; break;
case G_TYPE_STRING: case G_TYPE_STRING:
g_value_set_string(value, record->col_text[column]); g_value_set_string(value, record->col_text[column]);