diff options
Diffstat (limited to 'ui/gtk')
-rw-r--r-- | ui/gtk/main_menubar.c | 12 | ||||
-rw-r--r-- | ui/gtk/packet_list.c | 2 | ||||
-rw-r--r-- | ui/gtk/packet_win.c | 54 | ||||
-rw-r--r-- | ui/gtk/packet_win.h | 3 |
4 files changed, 62 insertions, 9 deletions
diff --git a/ui/gtk/main_menubar.c b/ui/gtk/main_menubar.c index 51e76b9aef..5fb97a97b4 100644 --- a/ui/gtk/main_menubar.c +++ b/ui/gtk/main_menubar.c @@ -349,7 +349,13 @@ build_conversation_filter(int action, gboolean show_dialog) static void new_window_cb(GtkWidget *widget) { - new_packet_window(widget, FALSE); + new_packet_window(widget, FALSE, FALSE); +} + +static void +new_window_cb_ref(GtkWidget *widget) +{ + new_packet_window(widget, TRUE, FALSE); } static void @@ -2996,6 +3002,7 @@ static const char *ui_desc_tree_view_menu_popup = " <menuitem name='DisableProtocol' action='/DisableProtocol'/>\n" " <menuitem name='ResolveName' action='/ResolveName'/>\n" " <menuitem name='GotoCorrespondingPacket' action='/GotoCorrespondingPacket'/>\n" +" <menuitem name='ShowPacketRefinNewWindow' action='/ShowPacketRefinNewWindow'/>\n" " </popup>\n" "</ui>\n"; @@ -3047,6 +3054,7 @@ static const GtkActionEntry tree_view_menu_popup_action_entries[] = { { "/DisableProtocol", WIRESHARK_STOCK_CHECKBOX, "Disable Protocol...", NULL, NULL, G_CALLBACK(proto_disable_cb) }, { "/ResolveName", NULL, "_Resolve Name", NULL, NULL, G_CALLBACK(resolve_name_cb) }, { "/GotoCorrespondingPacket", NULL, "_Go to Corresponding Packet", NULL, NULL, G_CALLBACK(goto_framenum_cb) }, + { "/ShowPacketRefinNewWindow", NULL, "Show Packet Reference in New Window", NULL, NULL, G_CALLBACK(new_window_cb_ref) }, }; static const char *ui_desc_bytes_menu_popup = @@ -5640,6 +5648,8 @@ set_menus_for_selected_tree_row(capture_file *cf) properties = prefs_is_registered_protocol(abbrev); set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/GotoCorrespondingPacket", hfinfo->type == FT_FRAMENUM); + set_menu_sensitivity(ui_manager_tree_view_menu, + "/TreeViewPopup/ShowPacketRefinNewWindow", hfinfo->type == FT_FRAMENUM); set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/Copy", TRUE); set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/Copy/AsFilter", diff --git a/ui/gtk/packet_list.c b/ui/gtk/packet_list.c index 2d0fe48292..29e68b9ed5 100644 --- a/ui/gtk/packet_list.c +++ b/ui/gtk/packet_list.c @@ -1253,7 +1253,7 @@ static void packet_list_double_click_cb(GtkTreeView *treeview, GtkTreePath *path _U_, GtkTreeViewColumn *col _U_, gpointer userdata _U_) { - new_packet_window(GTK_WIDGET(treeview), FALSE); + new_packet_window(GTK_WIDGET(treeview), FALSE, FALSE); } gboolean diff --git a/ui/gtk/packet_win.c b/ui/gtk/packet_win.c index 9ed999311d..74b95a1567 100644 --- a/ui/gtk/packet_win.c +++ b/ui/gtk/packet_win.c @@ -866,24 +866,53 @@ static void modifed_frame_data_free(gpointer data) { #endif /* WANT_PACKET_EDITOR */ -void new_packet_window(GtkWidget *w _U_, gboolean editable _U_) +void new_packet_window(GtkWidget *w _U_, gboolean reference, gboolean editable _U_) { #define NewWinTitleLen 1000 char Title[NewWinTitleLen] = ""; const char *TextPtr; GtkWidget *main_w, *main_vbox, *pane, - *tree_view, *tv_scrollw, - *bv_nb_ptr; + *tree_view, *tv_scrollw, + *bv_nb_ptr; struct PacketWinData *DataPtr; int i; + frame_data *fd; + + if(reference) { + guint32 framenum; + header_field_info *hfinfo; - if (!cfile.current_frame) { + if (! cfile.finfo_selected) { + return; + } + + hfinfo = cfile.finfo_selected->hfinfo; + + g_assert(hfinfo); + + if (hfinfo->type != FT_FRAMENUM) { + return; + } + + framenum = fvalue_get_uinteger(&cfile.finfo_selected->value); + + if (framenum == 0) { + return; + } + + fd = frame_data_sequence_find(cfile.frames, framenum); + } + else { + fd = cfile.current_frame; + } + + if (!fd) { /* nothing has been captured so far */ return; } /* With the new packetlists "lazy columns" it's neccesary to reread the frame */ - if (!cf_read_frame(&cfile, cfile.current_frame)) { + if (!cf_read_frame(&cfile, fd)) { /* error reading the frame */ return; } @@ -891,7 +920,7 @@ void new_packet_window(GtkWidget *w _U_, gboolean editable _U_) /* Allocate data structure to represent this window. */ DataPtr = (struct PacketWinData *) g_malloc(sizeof(struct PacketWinData)); - DataPtr->frame = cfile.current_frame; + DataPtr->frame = fd; DataPtr->phdr = cfile.phdr; DataPtr->pd = (guint8 *)g_malloc(DataPtr->frame->cap_len); memcpy(DataPtr->pd, cfile.pd, DataPtr->frame->cap_len); @@ -1110,3 +1139,16 @@ redraw_packet_bytes_packet_wins(void) { g_list_foreach(detail_windows, redraw_packet_bytes_cb, NULL); } + +/* + * Editor modelines - http://www.wireshark.org/tools/modelines.html + * + * Local variables: + * c-basic-offset: 8 + * tab-width: 8 + * indent-tabs-mode: t + * End: + * + * vi: set shiftwidth=8 tabstop=8 noexpandtab: + * :indentSize=8:tabSize=8:noTabs=false: + */ diff --git a/ui/gtk/packet_win.h b/ui/gtk/packet_win.h index 9464d83c6e..94b694869c 100644 --- a/ui/gtk/packet_win.h +++ b/ui/gtk/packet_win.h @@ -34,8 +34,9 @@ /** Create a new packet window. * * @param widget parent widget (unused) + * @param reference open current packet or reference packet */ -extern void new_packet_window(GtkWidget *widget, gboolean editable); +extern void new_packet_window(GtkWidget *widget, gboolean reference, gboolean editable); /** Destroy all popup packet windows. */ |