diff options
Diffstat (limited to 'gtk/new_packet_list.c')
-rw-r--r-- | gtk/new_packet_list.c | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/gtk/new_packet_list.c b/gtk/new_packet_list.c index 4dbef78ae4..ffcb5bb46d 100644 --- a/gtk/new_packet_list.c +++ b/gtk/new_packet_list.c @@ -160,7 +160,7 @@ right_justify_column (gint col) case COL_CUSTOM: hfi = proto_registrar_get_byname(cfile.cinfo.col_custom_field[col]); /* Check if this is a valid field and we have no strings lookup table */ - if ((hfi != NULL) && (hfi->strings == NULL)) { + if ((hfi != NULL) && ((hfi->strings == NULL) || !get_column_resolved(col))) { /* Check for bool, framenum and decimal/octal integer types */ if ((hfi->type == FT_BOOLEAN) || (hfi->type == FT_FRAMENUM) || (((hfi->display == BASE_DEC) || (hfi->display == BASE_OCT)) && @@ -177,6 +177,32 @@ right_justify_column (gint col) return right_justify; } +static gboolean +resolve_column (gint col) +{ + header_field_info *hfi; + gboolean resolve = FALSE; + + switch (cfile.cinfo.col_fmt[col]) { + + case COL_CUSTOM: + hfi = proto_registrar_get_byname(cfile.cinfo.col_custom_field[col]); + /* Check if this is a valid field and we have no strings lookup table */ + if ((hfi != NULL) && (hfi->strings != NULL) && + /* Check for bool, framenum and decimal/octal integer types */ + ((hfi->type == FT_BOOLEAN) || (hfi->type == FT_FRAMENUM) || + IS_FT_INT(hfi->type) || IS_FT_UINT(hfi->type))) { + resolve = TRUE; + } + break; + + default: + break; + } + + return resolve; +} + static void col_title_change_ok (GtkWidget *w, gpointer parent_w) { @@ -408,7 +434,18 @@ new_packet_list_remove_column (gint col_id, GtkTreeViewColumn *col _U_) } void -new_packet_list_column_menu_cb (GtkWidget *w _U_, gpointer user_data _U_, COLUMN_SELECTED_E action) +new_packet_list_toggle_resolved (GtkWidget *w, gint col_id) +{ + /* We have to check for skip-update because we get an emit in menus_set_column_resolved() */ + if (g_object_get_data(G_OBJECT(w), "skip-update") == NULL) { + set_column_resolved (col_id, get_column_resolved (col_id) ? FALSE : TRUE); + + new_packet_list_recreate(); + } +} + +void +new_packet_list_column_menu_cb (GtkWidget *w, gpointer user_data _U_, COLUMN_SELECTED_E action) { GtkTreeViewColumn *col = (GtkTreeViewColumn *) g_object_get_data(G_OBJECT(packetlist->view), E_MPACKET_LIST_COLUMN_KEY); @@ -425,6 +462,9 @@ new_packet_list_column_menu_cb (GtkWidget *w _U_, gpointer user_data _U_, COLUMN gtk_tree_view_column_set_sort_indicator(col, FALSE); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(packetlist), 0, GTK_SORT_ASCENDING); break; + case COLUMN_SELECTED_TOGGLE_RESOLVED: + new_packet_list_toggle_resolved (w, col_id); + break; case COLUMN_SELECTED_ALIGN_LEFT: new_packet_list_xalign_column (col_id, col, COLUMN_XALIGN_LEFT); break; @@ -464,6 +504,7 @@ new_packet_list_column_button_pressed_cb (GtkWidget *widget, GdkEvent *event, gp gboolean right_justify = right_justify_column (col_id); menus_set_column_align_default (right_justify); + menus_set_column_resolved (get_column_resolved (col_id), resolve_column (col_id)); g_object_set_data(G_OBJECT(packetlist->view), E_MPACKET_LIST_COLUMN_KEY, col); popup_menu_handler (widget, event, menu); } |