Handle -I in the options processing.
[obnox/wireshark/wip.git] / gtk / menus.c
index e1b87511bbf7503ae9ce7cec8e3044c911a87138..911f95d5dcf49b97b96f5a7db7dfc3d28c24a47f 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <gtk/gtk.h>
 
+#include <stdio.h>
 #include <string.h>
 
 #include <epan/packet.h>
 #include "gtk/gui_stat_menu.h"
 #include "gtk/main.h"
 #include "gtk/menus.h"
-#include "gtk/main_packet_list.h"
 #include "gtk/main_toolbar.h"
 #include "gtk/main_welcome.h"
 #include "gtk/uat_gui.h"
 #include "gtk/gui_utils.h"
+#include "gtk/manual_addr_resolv.h"
 
 #ifdef NEW_PACKET_LIST
 #include "gtk/new_packet_list.h"
+#else
+#include "gtk/main_packet_list.h"
 #endif
 
 #ifdef HAVE_IGE_MAC_INTEGRATION
@@ -129,6 +132,7 @@ static void set_menu_sensitivity (GtkItemFactory *, const gchar *, gint);
 static void show_hide_cb(GtkWidget *w, gpointer data, gint action);
 static void timestamp_format_cb(GtkWidget *w, gpointer d, gint action);
 static void timestamp_precision_cb(GtkWidget *w, gpointer d, gint action);
+static void timestamp_seconds_time_cb(GtkWidget *w, gpointer d, gint action);
 static void name_resolution_cb(GtkWidget *w, gpointer d, gint action);
 #ifdef HAVE_LIBPCAP
 static void auto_scroll_live_cb(GtkWidget *w, gpointer d);
@@ -385,7 +389,11 @@ colorize_conversation_cb(GtkWidget * w _U_, gpointer data _U_, int action)
 
     if( (action>>8) == 255 ) {
         color_filters_reset_tmp();
+#ifdef NEW_PACKET_LIST
+        new_packet_list_colorize_packets();
+#else
         cf_colorize_packets(&cfile);
+#endif
     } else if (cfile.current_frame) {
         if( (action&0xff) == 0 ) {
             /* colorize_conversation_cb was called from the window-menu
@@ -414,7 +422,11 @@ colorize_conversation_cb(GtkWidget * w _U_, gpointer data _U_, int action)
         } else {
             /* Set one of the temporary coloring filters */
             color_filters_set_tmp((guint8)(action>>8),filter,FALSE);
-            cf_colorize_packets(&cfile);
+#ifdef NEW_PACKET_LIST
+                       new_packet_list_colorize_packets();
+#else
+                       cf_colorize_packets(&cfile);
+#endif
         }
 
         g_free(filter);
@@ -502,24 +514,43 @@ static GtkItemFactoryEntry menu_items[] =
 #else
     {"/Edit/_Mark Packet (toggle)", "<control>M", GTK_MENU_FUNC(packet_list_mark_frame_cb),
                        0, NULL, NULL,},
+#endif /* NEW_PACKET_LIST */
     {"/Edit/Find Next Mark", "<shift><control>N", GTK_MENU_FUNC(find_next_mark_cb),
                        0, NULL, NULL,},
     {"/Edit/Find Previous Mark", "<shift><control>B", GTK_MENU_FUNC(find_prev_mark_cb),
                        0, NULL, NULL,},
-    {"/Edit/Mark _All Packets", "<control>A", GTK_MENU_FUNC(packet_list_mark_all_frames_cb),
+#ifdef NEW_PACKET_LIST
+    {"/Edit/Mark _All Displayed Packets", "<control>A", GTK_MENU_FUNC(new_packet_list_mark_all_frames_cb), 0, NULL, NULL,},
+    {"/Edit/_Unmark All Packets", "<control>D", GTK_MENU_FUNC(new_packet_list_unmark_all_frames_cb), 0, NULL, NULL,},
+#else
+    {"/Edit/Mark _All Displayed Packets", "<control>A", GTK_MENU_FUNC(packet_list_mark_all_frames_cb), 0, NULL, NULL,},
+    {"/Edit/_Unmark All Packets", "<control>D", GTK_MENU_FUNC(packet_list_unmark_all_frames_cb), 0, NULL, NULL,},
+#endif /* NEW_PACKET_LIST */
+    {"/Edit/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+#ifdef NEW_PACKET_LIST
+    {"/Edit/_Ignore Packet (toggle)", "<control>X", GTK_MENU_FUNC(new_packet_list_ignore_frame_cb),
                        0, NULL, NULL,},
-    {"/Edit/_Unmark All Packets", "<control>D", GTK_MENU_FUNC(packet_list_unmark_all_frames_cb),
+    {"/Edit/Ignore All Displayed Packets", "<alt><shift><control>X", GTK_MENU_FUNC(new_packet_list_ignore_all_frames_cb),
+                       0, NULL, NULL,},
+    {"/Edit/U_n-Ignore All Packets", "<shift><control>X", GTK_MENU_FUNC(new_packet_list_unignore_all_frames_cb),
+                       0, NULL, NULL,},
+#else
+    {"/Edit/_Ignore Packet (toggle)", "<control>X", GTK_MENU_FUNC(packet_list_ignore_frame_cb),
+                       0, NULL, NULL,},
+    {"/Edit/Ignore All Displayed Packets", "<alt><shift><control>X", GTK_MENU_FUNC(packet_list_ignore_all_frames_cb),
+                       0, NULL, NULL,},
+    {"/Edit/U_n-Ignore All Packets", "<shift><control>X", GTK_MENU_FUNC(packet_list_unignore_all_frames_cb),
                        0, NULL, NULL,},
-    {"/Edit/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
 #endif /* NEW_PACKET_LIST */
+    {"/Edit/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
     {"/Edit/Set Time Reference (toggle)", "<control>T", GTK_MENU_FUNC(reftime_frame_cb),
                         REFTIME_TOGGLE, "<StockItem>", WIRESHARK_STOCK_TIME,},
     {"/Edit/Find Next Reference", "<alt><shift><control>N", GTK_MENU_FUNC(reftime_frame_cb), REFTIME_FIND_NEXT, NULL, NULL,},
     {"/Edit/Find Previous Reference", "<alt><shift><control>B", GTK_MENU_FUNC(reftime_frame_cb), REFTIME_FIND_PREV, NULL, NULL,},
     {"/Edit/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
     {"/Edit/_Configuration Profiles...", "<shift><control>A", GTK_MENU_FUNC(profile_dialog_cb), 0, NULL, NULL,},
-    {"/Edit/_Preferences...", "<shift><control>P", GTK_MENU_FUNC(prefs_cb),
-                             0, "<StockItem>", GTK_STOCK_PREFERENCES,},
+    {"/Edit/_Preferences...", "<shift><control>P", GTK_MENU_FUNC(prefs_page_cb),
+                             PREFS_PAGE_USER_INTERFACE, "<StockItem>", GTK_STOCK_PREFERENCES,},
     {"/_View", NULL, NULL, 0, "<Branch>", NULL,},
     {"/View/_Main Toolbar", NULL, GTK_MENU_FUNC(show_hide_cb), SHOW_HIDE_MAIN_TOOLBAR, "<CheckItem>", NULL,},
     {"/View/_Filter Toolbar", NULL, GTK_MENU_FUNC(show_hide_cb), SHOW_HIDE_FILTER_TOOLBAR, "<CheckItem>", NULL,},
@@ -560,6 +591,8 @@ static GtkItemFactoryEntry menu_items[] =
                         TS_PREC_FIXED_USEC, "/View/Time Display Format/Automatic (File Format Precision)", NULL,},
     {"/View/Time Display Format/Nanoseconds:   0.123456789", NULL, GTK_MENU_FUNC(timestamp_precision_cb),
                         TS_PREC_FIXED_NSEC, "/View/Time Display Format/Automatic (File Format Precision)", NULL,},
+    {"/View/Time Display Format/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+    {"/View/Time Display Format/Display Seconds with hours and minutes", "<alt><control>0", GTK_MENU_FUNC(timestamp_seconds_time_cb), 0, "<CheckItem>", NULL,},
     {"/View/Name Resol_ution", NULL, NULL, 0, "<Branch>", NULL,},
     {"/View/Name Resolution/_Resolve Name", NULL, GTK_MENU_FUNC(resolve_name_cb), 0, NULL, NULL,},
     {"/View/Name Resolution/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
@@ -577,7 +610,10 @@ static GtkItemFactoryEntry menu_items[] =
                              0, "<StockItem>", GTK_STOCK_ZOOM_OUT,},
     {"/View/_Normal Size", "<control>equal", GTK_MENU_FUNC(view_zoom_100_cb),
                              0, "<StockItem>", GTK_STOCK_ZOOM_100,},
-#ifndef NEW_PACKET_LIST
+#ifdef NEW_PACKET_LIST
+    {"/View/Resize All Columns", "<shift><control>R", GTK_MENU_FUNC(new_packet_list_resize_columns_cb),
+                       0, "<StockItem>", WIRESHARK_STOCK_RESIZE_COLUMNS,},
+#else
     {"/View/Resize All Columns", "<shift><control>R", GTK_MENU_FUNC(packet_list_resize_columns_cb),
                        0, "<StockItem>", WIRESHARK_STOCK_RESIZE_COLUMNS,},
 #endif /* NEW_PACKET_LIST */
@@ -662,6 +698,7 @@ static GtkItemFactoryEntry menu_items[] =
                        0, "<StockItem>", WIRESHARK_STOCK_DISPLAY_FILTER,},
     {"/Analyze/Display Filter _Macros...", NULL, GTK_MENU_FUNC(macros_dialog_cb), 0, NULL, NULL,},
     {"/Analyze/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+    {"/Analyze/Apply as Column", NULL, GTK_MENU_FUNC(apply_as_custom_column_cb), 0, NULL, NULL},
     {"/Analyze/Appl_y as Filter", NULL, NULL, 0, "<Branch>", NULL,},
     {"/Analyze/Apply as Filter/_Selected", NULL, GTK_MENU_FUNC(match_selected_ptree_cb),
                        MATCH_SELECTED_REPLACE|MATCH_SELECTED_APPLY_NOW, NULL, NULL,},
@@ -743,14 +780,66 @@ static GtkItemFactoryEntry menu_items[] =
 /* calculate the number of menu_items */
 static int nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]);
 
+/* packet list heading popup */
+static GtkItemFactoryEntry packet_list_heading_items[] =
+{
+#ifdef NEW_PACKET_LIST
+    {"/Sort Ascending", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_SORT_ASCENDING, "<StockItem>", GTK_STOCK_SORT_ASCENDING,},
+    {"/Sort Descending", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_SORT_DESCENDING, "<StockItem>", GTK_STOCK_SORT_DESCENDING,},
+    {"/No Sorting", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_SORT_NONE, NULL, NULL,},
+
+    {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+
+    {"/Align Left", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_LEFT, "<StockItem>", GTK_STOCK_JUSTIFY_LEFT,},
+    {"/Align Center", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_CENTER, "<StockItem>", GTK_STOCK_JUSTIFY_CENTER,},
+    {"/Align Right", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_RIGHT, "<StockItem>", GTK_STOCK_JUSTIFY_RIGHT,},
+
+    {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+
+    {"/Column Preferences...", NULL, GTK_MENU_FUNC(prefs_page_cb), PREFS_PAGE_COLUMNS, "<StockItem>", GTK_STOCK_PREFERENCES,},
+    {"/Resize Column", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_RESIZE, "<StockItem>", WIRESHARK_STOCK_RESIZE_COLUMNS,},
+    {"/Rename Column Title...", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_RENAME, "<StockItem>", GTK_STOCK_BOLD,},
+
+    {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+
+    {"/Remove Column", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_REMOVE, "<StockItem>", GTK_STOCK_DELETE,}
+#else
+    {"/Sort Ascending", NULL, GTK_MENU_FUNC(packet_list_column_menu_cb), COLUMN_SELECTED_SORT_ASCENDING, "<StockItem>", GTK_STOCK_SORT_ASCENDING,},
+    {"/Sort Descending", NULL, GTK_MENU_FUNC(packet_list_column_menu_cb), COLUMN_SELECTED_SORT_DESCENDING, "<StockItem>", GTK_STOCK_SORT_DESCENDING,},
+    {"/No Sorting", NULL, GTK_MENU_FUNC(packet_list_column_menu_cb), COLUMN_SELECTED_SORT_NONE, NULL, NULL,},
+
+     {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+
+     {"/Align Left", NULL, GTK_MENU_FUNC(packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_LEFT, "<StockItem>", GTK_STOCK_JUSTIFY_LEFT,},
+     {"/Align Center", NULL, GTK_MENU_FUNC(packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_CENTER, "<StockItem>", GTK_STOCK_JUSTIFY_CENTER,},
+     {"/Align Right", NULL, GTK_MENU_FUNC(packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_RIGHT, "<StockItem>", GTK_STOCK_JUSTIFY_RIGHT,},
+
+    {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+
+    {"/Column Preferences...", NULL, GTK_MENU_FUNC(prefs_page_cb), PREFS_PAGE_COLUMNS, "<StockItem>", GTK_STOCK_PREFERENCES,},
+    {"/Resize Column", NULL, GTK_MENU_FUNC(packet_list_column_menu_cb), COLUMN_SELECTED_RESIZE, "<StockItem>", WIRESHARK_STOCK_RESIZE_COLUMNS,},
+    {"/Rename Column Title...", NULL, GTK_MENU_FUNC(packet_list_column_menu_cb), COLUMN_SELECTED_RENAME, "<StockItem>", GTK_STOCK_BOLD,},
+
+    {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+
+    {"/Remove Column", NULL, GTK_MENU_FUNC(packet_list_column_menu_cb), COLUMN_SELECTED_REMOVE, "<StockItem>", GTK_STOCK_DELETE,}
+#endif
+};
+
 /* packet list popup */
 static GtkItemFactoryEntry packet_list_menu_items[] =
 {
-#ifndef NEW_PACKET_LIST
+#ifdef NEW_PACKET_LIST
+    {"/Mark Packet (toggle)", NULL, GTK_MENU_FUNC(new_packet_list_mark_frame_cb), 0, NULL, NULL,},
+    {"/Ignore Packet (toggle)", NULL, GTK_MENU_FUNC(new_packet_list_ignore_frame_cb), 0, NULL, NULL,},
+#else
     {"/Mark Packet (toggle)", NULL, GTK_MENU_FUNC(packet_list_mark_frame_cb), 0, NULL, NULL,},
+    {"/Ignore Packet (toggle)", NULL, GTK_MENU_FUNC(packet_list_ignore_frame_cb), 0, NULL, NULL,},
 #endif /* NEW_PACKET_LIST */
     {"/Set Time Reference (toggle)", NULL, GTK_MENU_FUNC(reftime_frame_cb), REFTIME_TOGGLE, "<StockItem>", WIRESHARK_STOCK_TIME,},
 
+    {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+    {"/Manually Resolve Address", NULL, GTK_MENU_FUNC(manual_addr_resolv_dlg), 0, NULL, NULL,},
     {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
 
     {"/Apply as Filter", NULL, NULL, 0, "<Branch>", NULL,},
@@ -932,14 +1021,18 @@ static GtkItemFactoryEntry packet_list_menu_items[] =
                        0, NULL, NULL,},
 
     {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
-#ifndef NEW_PACKET_LIST
     {"/Copy", NULL, NULL, 0, "<Branch>", NULL,},
+#ifdef NEW_PACKET_LIST
+    {"/Copy/Summary (Text)", NULL, GTK_MENU_FUNC(new_packet_list_copy_summary_cb), CS_TEXT, NULL, NULL,},
+    {"/Copy/Summary (CSV)", NULL, GTK_MENU_FUNC(new_packet_list_copy_summary_cb), CS_CSV, NULL, NULL,},
+    {"/Copy/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+#else
     {"/Copy/Summary (Text)", NULL, GTK_MENU_FUNC(packet_list_copy_summary_cb), CS_TEXT, NULL, NULL,},
     {"/Copy/Summary (CSV)", NULL, GTK_MENU_FUNC(packet_list_copy_summary_cb), CS_CSV, NULL, NULL,},
     {"/Copy/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+#endif /* NEW_PACKET_LIST */
     {"/Copy/As Filter", NULL, GTK_MENU_FUNC(match_selected_plist_cb),
                        MATCH_SELECTED_REPLACE|MATCH_SELECTED_COPY_ONLY, NULL, NULL,},
-#endif /* NEW_PACKET_LIST */
     {"/Copy/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
     {"/Copy/Bytes (Offset Hex Text)", NULL, GTK_MENU_FUNC(copy_hex_cb), CD_ALLINFO, NULL, NULL,},
     {"/Copy/Bytes (Offset Hex)", NULL, GTK_MENU_FUNC(copy_hex_cb), CD_HEXCOLUMNS, NULL, NULL,},
@@ -965,6 +1058,10 @@ static GtkItemFactoryEntry tree_view_menu_items[] =
 
     {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
 
+    {"/Apply as Column", NULL, GTK_MENU_FUNC(apply_as_custom_column_cb), 0, NULL, NULL},
+
+    {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+
     {"/Apply as Filter", NULL, NULL, 0, "<Branch>", NULL,},
     {"/Apply as Filter/_Selected", NULL, GTK_MENU_FUNC(match_selected_ptree_cb),
                        MATCH_SELECTED_REPLACE|MATCH_SELECTED_APPLY_NOW, NULL, NULL,},
@@ -1047,12 +1144,19 @@ static GtkItemFactoryEntry tree_view_menu_items[] =
     {"/_Go to Corresponding Packet", NULL, GTK_MENU_FUNC(goto_framenum_cb), 0, NULL, NULL,}
 };
 
+static GtkItemFactoryEntry bytes_menu_items[] =
+{
+    {"/Hex View", NULL, GTK_MENU_FUNC(select_bytes_view), BYTES_HEX, "<RadioItem>", NULL,},
+    {"/Bits View", NULL, GTK_MENU_FUNC(select_bytes_view), BYTES_BITS, "/Hex View", NULL,}
+};
+
 
 static int initialize = TRUE;
 static GtkItemFactory *main_menu_factory = NULL;
+static GtkItemFactory *packet_list_heading_factory = NULL;
 static GtkItemFactory *packet_list_menu_factory = NULL;
 static GtkItemFactory *tree_view_menu_factory = NULL;
-static GtkItemFactory *hexdump_menu_factory = NULL;
+static GtkItemFactory *bytes_menu_factory = NULL;
 
 static GSList *popup_menu_list = NULL;
 
@@ -1167,9 +1271,17 @@ menus_init(void) {
     if (initialize) {
         initialize = FALSE;
 
+    popup_menu_object = gtk_menu_new();
+
+    /* packet list heading pop-up menu */
+    packet_list_heading_factory = gtk_item_factory_new(GTK_TYPE_MENU, "<main>", NULL);
+    gtk_item_factory_create_items_ac(packet_list_heading_factory, sizeof(packet_list_heading_items)/sizeof(packet_list_heading_items[0]), packet_list_heading_items, popup_menu_object, 2);
+    g_object_set_data(G_OBJECT(popup_menu_object), PM_PACKET_LIST_COL_KEY,
+                    packet_list_heading_factory->widget);
+    popup_menu_list = g_slist_append((GSList *)popup_menu_list, packet_list_heading_factory);
+
     /* packet list pop-up menu */
     packet_list_menu_factory = gtk_item_factory_new(GTK_TYPE_MENU, "<main>", NULL);
-    popup_menu_object = gtk_menu_new();
     gtk_item_factory_create_items_ac(packet_list_menu_factory, sizeof(packet_list_menu_items)/sizeof(packet_list_menu_items[0]), packet_list_menu_items, popup_menu_object, 2);
     g_object_set_data(G_OBJECT(popup_menu_object), PM_PACKET_LIST_KEY,
                     packet_list_menu_factory->widget);
@@ -1187,10 +1299,11 @@ menus_init(void) {
      * We provide our own empty menu to suppress the default pop-up menu
      * for text widgets.
      */
-    hexdump_menu_factory = gtk_item_factory_new(GTK_TYPE_MENU, "<main>", NULL);
-    g_object_set_data(G_OBJECT(popup_menu_object), PM_HEXDUMP_KEY,
-                    hexdump_menu_factory->widget);
-    popup_menu_list = g_slist_append((GSList *)popup_menu_list, hexdump_menu_factory);
+    bytes_menu_factory = gtk_item_factory_new(GTK_TYPE_MENU, "<main>", NULL);
+    gtk_item_factory_create_items_ac(bytes_menu_factory, sizeof(bytes_menu_items)/sizeof(bytes_menu_items[0]), bytes_menu_items, popup_menu_object, 2);
+    g_object_set_data(G_OBJECT(popup_menu_object), PM_BYTES_VIEW_KEY,
+                    bytes_menu_factory->widget);
+    popup_menu_list = g_slist_append((GSList *)popup_menu_list, bytes_menu_factory);
 
     /* main */
     main_menu_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", grp);
@@ -1769,7 +1882,7 @@ menu_open_filename(gchar *cf_name)
 
     /* open and read the capture file (this will close an existing file) */
     if (cf_open(&cfile, cf_name, FALSE, &err) == CF_OK) {
-        cf_read(&cfile);
+        cf_read(&cfile, FALSE);
     } else {
         /* the capture file apparently no longer exists; remove menu item    */
         /* XXX: ask user to remove item, it's maybe only a temporary problem */
@@ -1797,7 +1910,7 @@ menu_open_recent_file_cmd(GtkWidget *w)
 
     /* open and read the capture file (this will close an existing file) */
     if (cf_open(&cfile, cf_name, FALSE, &err) == CF_OK) {
-        cf_read(&cfile);
+        cf_read(&cfile, FALSE);
     } else {
         /* the capture file apparently no longer exists; remove menu item    */
         /* XXX: ask user to remove item, it's maybe only a temporary problem */
@@ -2023,8 +2136,8 @@ timestamp_format_cb(GtkWidget *w _U_, gpointer d _U_, gint action)
         timestamp_set_type(action);
         recent.gui_time_format = action;
 #ifdef NEW_PACKET_LIST
-               cf_timestamp_auto_precision(&cfile);
-               /* XXX Width should be adjusted */
+               /* This call adjusts column width */
+               cf_timestamp_auto_precision(&cfile);            
                new_packet_list_queue_draw();
 #else
         cf_change_time_formats(&cfile);
@@ -2045,8 +2158,8 @@ timestamp_precision_cb(GtkWidget *w _U_, gpointer d _U_, gint action)
         }
         recent.gui_time_precision  = action;
 #ifdef NEW_PACKET_LIST
+               /* This call adjusts column width */
                cf_timestamp_auto_precision(&cfile);
-               /* XXX Width should be adjusted */
                new_packet_list_queue_draw();
 #else
         cf_change_time_formats(&cfile);
@@ -2054,6 +2167,24 @@ timestamp_precision_cb(GtkWidget *w _U_, gpointer d _U_, gint action)
     }
 }
 
+static void
+timestamp_seconds_time_cb(GtkWidget *w, gpointer d _U_, gint action _U_)
+{
+    if (GTK_CHECK_MENU_ITEM(w)->active) {
+        recent.gui_seconds_format = TS_SECONDS_HOUR_MIN_SEC;
+    } else {
+        recent.gui_seconds_format = TS_SECONDS_DEFAULT;
+    }
+    timestamp_set_seconds_type (recent.gui_seconds_format);
+
+#ifdef NEW_PACKET_LIST
+    /* This call adjusts column width */
+    cf_timestamp_auto_precision(&cfile);
+    new_packet_list_queue_draw();
+#else
+    cf_change_time_formats(&cfile);
+#endif
+}
 
 void
 menu_name_resolution_changed(void)
@@ -2127,7 +2258,9 @@ menu_colorize_changed(gboolean packet_list_colorize) {
     if(packet_list_colorize != recent.packet_list_colorize) {
         recent.packet_list_colorize = packet_list_colorize;
         color_filters_enable(packet_list_colorize);
-#ifndef NEW_PACKET_LIST
+#ifdef NEW_PACKET_LIST
+               new_packet_list_colorize_packets();
+#else
         cf_colorize_packets(&cfile);
 #endif
     }
@@ -2189,89 +2322,92 @@ menu_recent_read_finished(void) {
     case(TS_ABSOLUTE_WITH_DATE):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Date and Time of Day:   1970-01-01 01:02:03.123456");
-        /* set_active will not trigger the callback when activating an active item! */
-        recent.gui_time_format = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), FALSE);
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_ABSOLUTE):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Time of Day:   01:02:03.123456");
-        /* set_active will not trigger the callback when activating an active item! */
-        recent.gui_time_format = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_RELATIVE):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Seconds Since Beginning of Capture:   123.123456");
-        recent.gui_time_format = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_DELTA):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Seconds Since Previous Captured Packet:   1.123456");
-        recent.gui_time_format = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_DELTA_DIS):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Seconds Since Previous Displayed Packet:   1.123456");
-        recent.gui_time_format = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_EPOCH):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Seconds Since Epoch (1970-01-01):   1234567890.123456");
-        recent.gui_time_format = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     default:
         g_assert_not_reached();
     }
 
+    /* set_active will not trigger the callback when activating an active item! */
+    recent.gui_time_format = -1;
+    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), FALSE);
+    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
+
     switch(recent.gui_time_precision) {
     case(TS_PREC_AUTO):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Automatic (File Format Precision)");
-        /* set_active will not trigger the callback when activating an active item! */
-        recent.gui_time_precision = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), FALSE);
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_PREC_FIXED_SEC):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Seconds:   0");
-        recent.gui_time_precision = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_PREC_FIXED_DSEC):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Deciseconds:   0.1");
-        recent.gui_time_precision = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_PREC_FIXED_CSEC):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Centiseconds:   0.12");
-        recent.gui_time_precision = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_PREC_FIXED_MSEC):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Milliseconds:   0.123");
-        recent.gui_time_precision = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_PREC_FIXED_USEC):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Microseconds:   0.123456");
-        recent.gui_time_precision = -1;
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     case(TS_PREC_FIXED_NSEC):
         menu = gtk_item_factory_get_widget(main_menu_factory,
             "/View/Time Display Format/Nanoseconds:   0.123456789");
-        recent.gui_time_precision = -1;
+        break;
+    default:
+        g_assert_not_reached();
+    }
+
+    /* set_active will not trigger the callback when activating an active item! */
+    recent.gui_time_precision = -1;
+    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), FALSE);
+    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
+
+    /* don't change the seconds format, if we had a command line value */
+    if (timestamp_get_seconds_type() != TS_SECONDS_NOT_SET) {
+        recent.gui_seconds_format = timestamp_get_seconds_type();
+    }
+
+    menu = gtk_item_factory_get_widget(main_menu_factory,
+            "/View/Time Display Format/Display Seconds with hours and minutes");
+    switch (recent.gui_seconds_format) {
+    case TS_SECONDS_DEFAULT:
+        recent.gui_seconds_format = -1;
+        /* set_active will not trigger the callback when deactivating an inactive item! */
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), FALSE);
+        break;
+    case TS_SECONDS_HOUR_MIN_SEC:
+        recent.gui_seconds_format = -1;
+        /* set_active will not trigger the callback when activating an active item! */
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), FALSE);
         gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
         break;
     default:
@@ -2279,6 +2415,18 @@ menu_recent_read_finished(void) {
     }
 
     menu_colorize_changed(recent.packet_list_colorize);
+
+    switch (recent.gui_bytes_view) {
+    case BYTES_HEX:
+        menu = gtk_item_factory_get_widget(bytes_menu_factory, "/Hex View");
+        break;
+    case BYTES_BITS:
+        menu = gtk_item_factory_get_widget(bytes_menu_factory, "/Bits View");
+        break;
+    default:
+        g_assert_not_reached();
+    }
+    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
 }
 
 
@@ -2326,15 +2474,10 @@ popup_menu_handler(GtkWidget *widget, GdkEvent *event, gpointer data)
     }
 
     /* Check if we are on tree_view object */
-    if (widget == tree_view) {
+    if (widget == tree_view_gbl) {
         tree_view_select(widget, (GdkEventButton *) event);
     }
 
-    /* Check if we are on byte_view object */
-    if(widget == get_notebook_bv_ptr(byte_nb_ptr)) {
-        byte_view_select(widget, (GdkEventButton *) event);
-    }
-
     /* context menu handler */
     if(event->type == GDK_BUTTON_PRESS) {
         event_button = (GdkEventButton *) event;
@@ -2342,19 +2485,22 @@ popup_menu_handler(GtkWidget *widget, GdkEvent *event, gpointer data)
         /* To qoute the "Gdk Event Structures" doc:
          * "Normally button 1 is the left mouse button, 2 is the middle button, and 3 is the right button" */
         if(event_button->button == 3) {
-            /* No popup window in the byte view */
-            if(widget != get_notebook_bv_ptr(byte_nb_ptr)) {
-                gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
-                               event_button->button,
-                               event_button->time);
-            }
+            gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
+                           event_button->button,
+                           event_button->time);
             g_signal_stop_emission_by_name(widget, "button_press_event");
             return TRUE;
         }
     }
+
+    /* Check if we are on byte_view object */
+    if(widget == get_notebook_bv_ptr(byte_nb_ptr_gbl)) {
+        byte_view_select(widget, (GdkEventButton *) event);
+    }
+
     /* GDK_2BUTTON_PRESS is a doubleclick -> expand/collapse tree row */
     /* GTK version 1 seems to be doing this automatically */
-    if (widget == tree_view && event->type == GDK_2BUTTON_PRESS) {
+    if (widget == tree_view_gbl && event->type == GDK_2BUTTON_PRESS) {
         GtkTreePath      *path;
 
         if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget),
@@ -2617,7 +2763,7 @@ packet_is_ssl(epan_dissect_t* edt)
         return FALSE;
     array = proto_find_finfo(edt->tree, ssl_id);
     is_ssl = (array->len > 0) ? TRUE : FALSE;
-    g_ptr_array_free(array, FALSE);
+    g_ptr_array_free(array, TRUE);
     return is_ssl;
 }
 
@@ -2633,10 +2779,18 @@ set_menus_for_selected_packet(capture_file *cf)
                          cf->current_frame != NULL);
     set_menu_sensitivity(main_menu_factory, "/Edit/Find Previous Mark",
                          cf->current_frame != NULL);
-    set_menu_sensitivity(main_menu_factory, "/Edit/Mark All Packets",
+    set_menu_sensitivity(main_menu_factory, "/Edit/Mark All Displayed Packets",
                          cf->current_frame != NULL);
     set_menu_sensitivity(main_menu_factory, "/Edit/Unmark All Packets",
                          cf->current_frame != NULL);
+    set_menu_sensitivity(main_menu_factory, "/Edit/Ignore Packet (toggle)",
+                         cf->current_frame != NULL);
+    set_menu_sensitivity(main_menu_factory, "/Edit/Ignore All Displayed Packets",
+                         cf->current_frame != NULL);
+    set_menu_sensitivity(main_menu_factory, "/Edit/Un-Ignore All Packets",
+                         cf->current_frame != NULL);
+    set_menu_sensitivity(packet_list_menu_factory, "/Ignore Packet (toggle)",
+                         cf->current_frame != NULL);
     set_menu_sensitivity(main_menu_factory, "/Edit/Set Time Reference (toggle)",
                          cf->current_frame != NULL);
     set_menu_sensitivity(packet_list_menu_factory, "/Set Time Reference (toggle)",
@@ -2663,6 +2817,8 @@ set_menus_for_selected_packet(capture_file *cf)
                          cf->current_frame != NULL);
     set_menu_sensitivity(packet_list_menu_factory, "/Show Packet in New Window",
                          cf->current_frame != NULL);
+    set_menu_sensitivity(packet_list_menu_factory, "/Manually Resolve Address",
+                         cf->current_frame != NULL ? ((cf->edt->pi.ethertype == ETHERTYPE_IP)||(cf->edt->pi.ethertype == ETHERTYPE_IPv6)) : FALSE);
     set_menu_sensitivity(packet_list_menu_factory, "/SCTP",
                          cf->current_frame != NULL ? (cf->edt->pi.ipproto == IP_PROTO_SCTP) : FALSE);
     set_menu_sensitivity(main_menu_factory, "/Analyze/Follow TCP Stream",
@@ -3081,7 +3237,7 @@ add_protocol_prefs_menu (pref_t *pref, gpointer data)
 }
 
 static void
-rebuild_protocol_prefs_menu (module_t *prefs, gboolean preferences)
+rebuild_protocol_prefs_menu (module_t *prefs_module_p, gboolean preferences)
 {
     GtkWidget *menu_preferences, *menu_item;
     GtkWidget *sub_menu;
@@ -3093,7 +3249,7 @@ rebuild_protocol_prefs_menu (module_t *prefs, gboolean preferences)
         sub_menu = gtk_menu_new();
         gtk_menu_item_set_submenu (GTK_MENU_ITEM(menu_preferences), sub_menu);
 
-        label = g_strdup_printf ("%s Preferences...", prefs->description);
+        label = g_strdup_printf ("%s Preferences...", prefs_module_p->description);
         menu_item = gtk_image_menu_item_new_with_label (label);
         gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM(menu_item), 
                                        gtk_image_new_from_stock(GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU));
@@ -3107,7 +3263,7 @@ rebuild_protocol_prefs_menu (module_t *prefs, gboolean preferences)
         gtk_menu_shell_append (GTK_MENU_SHELL(sub_menu), menu_item);
         gtk_widget_show (menu_item);
 
-        prefs_pref_foreach(prefs, add_protocol_prefs_menu, prefs);
+        prefs_pref_foreach(prefs_module_p, add_protocol_prefs_menu, prefs_module_p);
     } else {
         /* No preferences, remove sub menu */
         gtk_menu_item_set_submenu (GTK_MENU_ITEM(menu_preferences), NULL);
@@ -3115,6 +3271,44 @@ rebuild_protocol_prefs_menu (module_t *prefs, gboolean preferences)
 
 }
 
+void
+menus_set_column_align_default (gboolean right_justify)
+{
+    GtkWidget   *submenu, *menu_item_child;
+    GList       *child_list, *child_list_item;
+    const gchar *menu_item_name;
+    size_t       menu_item_len;
+    
+    /* get the submenu container item */
+    submenu = packet_list_heading_factory->widget;
+
+    /* find the corresponding menu items to update */
+    child_list = gtk_container_get_children(GTK_CONTAINER(submenu));
+    child_list_item = child_list;
+    while(child_list_item) {
+        menu_item_child = (GTK_BIN(child_list_item->data))->child;
+        if (menu_item_child != NULL) {
+            menu_item_name = gtk_label_get_text(GTK_LABEL(menu_item_child));
+            menu_item_len = strlen (menu_item_name);
+            if(strncmp(menu_item_name, "Align Left", 10) == 0) {
+                if (!right_justify && menu_item_len == 10) {
+                    gtk_label_set_text(GTK_LABEL(menu_item_child), "Align Left\t(default)");
+                } else if (right_justify && menu_item_len > 10) {
+                    gtk_label_set_text(GTK_LABEL(menu_item_child), "Align Left");
+                }
+            } else if (strncmp (menu_item_name, "Align Right", 11) == 0) {
+                if (right_justify && menu_item_len == 11) {
+                    gtk_label_set_text(GTK_LABEL(menu_item_child), "Align Right\t(default)");
+                } else if (!right_justify && menu_item_len > 11) {
+                    gtk_label_set_text(GTK_LABEL(menu_item_child), "Align Right");
+                }
+            }
+        }
+        child_list_item = g_list_next(child_list_item);
+    }
+    g_list_free(child_list);
+}
+
 void
 set_menus_for_selected_tree_row(capture_file *cf)
 {
@@ -3153,8 +3347,12 @@ set_menus_for_selected_tree_row(capture_file *cf)
                              TRUE);
         set_menu_sensitivity(tree_view_menu_factory, "/Copy/As Filter",
                              proto_can_match_selected(cf->finfo_selected, cf->edt));
+        set_menu_sensitivity(main_menu_factory, "/Analyze/Apply as Column",
+                             hfinfo->type != FT_NONE);
         set_menu_sensitivity(main_menu_factory, "/Analyze/Apply as Filter",
                              proto_can_match_selected(cf->finfo_selected, cf->edt));
+        set_menu_sensitivity(tree_view_menu_factory, "/Apply as Column",
+                             hfinfo->type != FT_NONE);
         set_menu_sensitivity(tree_view_menu_factory, "/Apply as Filter",
                              proto_can_match_selected(cf->finfo_selected, cf->edt));
         set_menu_sensitivity(main_menu_factory, "/Analyze/Prepare a Filter",
@@ -3170,15 +3368,15 @@ set_menus_for_selected_tree_row(capture_file *cf)
         set_menu_sensitivity(main_menu_factory, "/View/Expand Subtrees", cf->finfo_selected->tree_type != -1);
         set_menu_sensitivity(tree_view_menu_factory, "/Expand Subtrees", cf->finfo_selected->tree_type != -1);
         set_menu_sensitivity(tree_view_menu_factory, "/Wiki Protocol Page",
-                             TRUE);
+                             (id == -1) ? FALSE : TRUE);
         set_menu_sensitivity(tree_view_menu_factory, "/Filter Field Reference",
-                             TRUE);
+                             (id == -1) ? FALSE : TRUE);
         
         prev_abbrev = g_object_get_data(G_OBJECT(tree_view_menu_factory), "menu_abbrev");
         if (!prev_abbrev || (strcmp (prev_abbrev, abbrev) != 0)) {
             /* No previous protocol or protocol changed - update Protocol Preferences menu */
-            module_t *prefs = prefs_find_module(abbrev);
-            rebuild_protocol_prefs_menu (prefs, properties);
+            module_t *prefs_module_p = prefs_find_module(abbrev);
+            rebuild_protocol_prefs_menu (prefs_module_p, properties);
 
             g_object_set_data(G_OBJECT(tree_view_menu_factory), "menu_abbrev", g_strdup(abbrev));
             g_free (prev_abbrev);
@@ -3195,6 +3393,8 @@ set_menus_for_selected_tree_row(capture_file *cf)
         set_menu_sensitivity(main_menu_factory, "/Edit/Copy/Value", FALSE);
         set_menu_sensitivity(main_menu_factory, "/Edit/Copy/As Filter", FALSE);
         set_menu_sensitivity(tree_view_menu_factory, "/Copy", FALSE);
+        set_menu_sensitivity(main_menu_factory, "/Analyze/Apply as Column", FALSE);
+        set_menu_sensitivity(tree_view_menu_factory, "/Apply as Column", FALSE);
         set_menu_sensitivity(main_menu_factory, "/Analyze/Apply as Filter", FALSE);
         set_menu_sensitivity(tree_view_menu_factory, "/Apply as Filter", FALSE);
         set_menu_sensitivity(main_menu_factory, "/Analyze/Prepare a Filter", FALSE);