Make 'Apply as filter'/'Prepare filter' work for new packet list.
authorkrj <krj@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 14 Aug 2009 19:35:01 +0000 (19:35 +0000)
committerkrj <krj@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 14 Aug 2009 19:35:01 +0000 (19:35 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@29419 f5534014-38df-0310-8fa8-9805f1628bb7

gtk/main.c
gtk/main.h
gtk/menus.c
gtk/new_packet_list.c
gtk/new_packet_list.h

index 8608649855ea336ada31eeab73563a290e18a5c2..1ac1b689e6c75b07cd15ae1c58856a9aec7da796 100644 (file)
@@ -494,41 +494,47 @@ selected_ptree_ref_cb(GtkWidget *widget _U_, gpointer data _U_)
     }
 }
 
-#ifndef NEW_PACKET_LIST
 static gchar *
 get_filter_from_packet_list_row_and_column(gpointer data)
 {
-    gint       row = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(data), E_MPACKET_LIST_ROW_KEY));
-    gint       column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(data), E_MPACKET_LIST_COL_KEY));
-    frame_data *fdata = (frame_data *) packet_list_get_row_data(row);
-    epan_dissect_t edt;
+    gint    row = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(data), E_MPACKET_LIST_ROW_KEY));
+    gint    column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(data), E_MPACKET_LIST_COL_KEY));
+    frame_data *fdata;
     gchar      *buf=NULL;
     int         err;
     gchar       *err_info;
 
+#ifdef NEW_PACKET_LIST
+    fdata = (frame_data *) new_packet_list_get_row_data(row);
+#else
+    fdata = (frame_data *) packet_list_get_row_data(row);
+#endif
+
     if (fdata != NULL) {
-       if (!wtap_seek_read(cfile.wth, fdata->file_off, &cfile.pseudo_header,
-                      cfile.pd, fdata->cap_len, &err, &err_info)) {
-           simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
-                         cf_read_error_message(err, err_info), cfile.filename);
-           return NULL;
-       }
-       /* proto tree, visible. We need a proto tree if there's custom columns */
-       epan_dissect_init(&edt, have_custom_cols(&cfile.cinfo), FALSE);
-       col_custom_prime_edt(&edt, &cfile.cinfo);
-           
-       epan_dissect_run(&edt, &cfile.pseudo_header, cfile.pd, fdata,
-                        &cfile.cinfo);
-       epan_dissect_fill_in_columns(&edt, TRUE);
+        epan_dissect_t edt;
 
-       if (strlen(cfile.cinfo.col_expr.col_expr[column]) != 0 &&
-           strlen(cfile.cinfo.col_expr.col_expr_val[column]) != 0) {
-           /* leak a little but safer than ep_ here*/
-           buf = se_strdup_printf("%s == %s", cfile.cinfo.col_expr.col_expr[column],
-                    cfile.cinfo.col_expr.col_expr_val[column]);
-       }
+        if (!wtap_seek_read(cfile.wth, fdata->file_off, &cfile.pseudo_header,
+                   cfile.pd, fdata->cap_len, &err, &err_info)) {
+            simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+                      cf_read_error_message(err, err_info), cfile.filename);
+            return NULL;
+        }
+        /* proto tree, visible. We need a proto tree if there's custom columns */
+        epan_dissect_init(&edt, have_custom_cols(&cfile.cinfo), FALSE);
+        col_custom_prime_edt(&edt, &cfile.cinfo);
+
+        epan_dissect_run(&edt, &cfile.pseudo_header, cfile.pd, fdata,
+                 &cfile.cinfo);
+        epan_dissect_fill_in_columns(&edt, TRUE);
+
+        if (strlen(cfile.cinfo.col_expr.col_expr[column]) != 0 &&
+            strlen(cfile.cinfo.col_expr.col_expr_val[column]) != 0) {
+            /* leak a little but safer than ep_ here*/
+            buf = se_strdup_printf("%s == %s", cfile.cinfo.col_expr.col_expr[column],
+                 cfile.cinfo.col_expr.col_expr_val[column]);
+        }
 
-       epan_dissect_cleanup(&edt);
+        epan_dissect_cleanup(&edt);
     }
 
     return buf;
@@ -541,7 +547,6 @@ match_selected_plist_cb(GtkWidget *w _U_, gpointer data, MATCH_SELECTED_E action
         action,
         get_filter_from_packet_list_row_and_column(data));
 }
-#endif /* NEW_PACKET_LIST */
 
 /* This function allows users to right click in the details window and copy the text
  * information to the operating systems clipboard.
index acd5a221f890d7b6ed763cdc35744b5815da8c78..5dafbf2e195fdcd3f250967153d6f378cb82f1f6 100644 (file)
@@ -159,7 +159,6 @@ extern void copy_selected_plist_cb(GtkWidget *w _U_, gpointer data, COPY_SELECTE
  */
 extern void colorize_selected_ptree_cb(GtkWidget *w, gpointer data, guint8 filt_nr);
 
-#ifndef NEW_PACKET_LIST
 /** User requested one of "Apply as Filter" or "Prepare a Filter" functions
  *  by context menu of packet list.
  *
@@ -168,7 +167,6 @@ extern void colorize_selected_ptree_cb(GtkWidget *w, gpointer data, guint8 filt_
  * @param action the function to use
  */
 extern void match_selected_plist_cb(GtkWidget *widget, gpointer data, MATCH_SELECTED_E action);
-#endif /* NEW_PACKET_LIST */
 
 /** User requested "Quit" by menu or toolbar.
  *
index 070fdc83296c6a32a99934110c8737fdf832639b..e1b87511bbf7503ae9ce7cec8e3044c911a87138 100644 (file)
@@ -754,7 +754,6 @@ static GtkItemFactoryEntry packet_list_menu_items[] =
     {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
 
     {"/Apply as Filter", NULL, NULL, 0, "<Branch>", NULL,},
-#ifndef NEW_PACKET_LIST
     {"/Apply as Filter/_Selected", NULL, GTK_MENU_FUNC(match_selected_plist_cb),
                        MATCH_SELECTED_REPLACE|MATCH_SELECTED_APPLY_NOW, NULL, NULL,},
     {"/Apply as Filter/_Not Selected", NULL, GTK_MENU_FUNC(match_selected_plist_cb),
@@ -780,7 +779,6 @@ static GtkItemFactoryEntry packet_list_menu_items[] =
                        MATCH_SELECTED_AND_NOT, NULL, NULL,},
     {"/Prepare a Filter/... o_r not Selected", NULL, GTK_MENU_FUNC(match_selected_plist_cb),
                        MATCH_SELECTED_OR_NOT, NULL, NULL,},
-#endif /* NEW_PACKET_LIST */
     {"/Conversation Filter", NULL, NULL, 0, "<Branch>",NULL,},
     {"/Conversation Filter/Ethernet", NULL, GTK_MENU_FUNC(conversation_cb),
                        CONV_ETHER, NULL, NULL,},
@@ -2306,12 +2304,17 @@ popup_menu_handler(GtkWidget *widget, GdkEvent *event, gpointer data)
     if (widget == g_object_get_data(G_OBJECT(popup_menu_object), E_MPACKET_LIST_KEY) &&
         ((GdkEventButton *)event)->button != 1) {
 #ifdef NEW_PACKET_LIST
-        if (new_packet_list_get_event_row_column(widget, (GdkEventButton *)event, &row, &column)) {
+        gint physical_row;
+        if (new_packet_list_get_event_row_column((GdkEventButton *)event, &physical_row, &row, &column)) {
 #else
         if (packet_list_get_event_row_column(widget, (GdkEventButton *)event, &row, &column)) {
 #endif
             g_object_set_data(G_OBJECT(popup_menu_object), E_MPACKET_LIST_ROW_KEY,
+#ifdef NEW_PACKET_LIST
+                            GINT_TO_POINTER(physical_row));
+#else
                             GINT_TO_POINTER(row));
+#endif
             g_object_set_data(G_OBJECT(popup_menu_object), E_MPACKET_LIST_COL_KEY,
                             GINT_TO_POINTER(column));
 #ifdef NEW_PACKET_LIST
index 2e474288a6cb8ad56097735c81173540a0897b2e..9c26ba78153038b0e01261c116aa10a0a418b23a 100644 (file)
@@ -427,8 +427,8 @@ new_packet_list_select_cb(GtkTreeView *tree_view, gpointer data _U_)
 }
 
 gboolean
-new_packet_list_get_event_row_column(GtkWidget *w _U_, GdkEventButton *event_button,
-                                                                gint *row, gint *column)
+new_packet_list_get_event_row_column(GdkEventButton *event_button,
+                                                                gint *physical_row, gint *row, gint *column)
 {
        GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(packetlist->view));
        GtkTreePath *path;
@@ -441,6 +441,7 @@ new_packet_list_get_event_row_column(GtkWidget *w _U_, GdkEventButton *event_but
                GtkTreeIter iter;
                GList *cols;
                gint *indices;
+               PacketListRecord *record;
 
                /* Fetch indices */
                gtk_tree_model_get_iter(model, &iter, path);
@@ -450,6 +451,10 @@ new_packet_list_get_event_row_column(GtkWidget *w _U_, GdkEventButton *event_but
                *row = indices[0] + 1;
                gtk_tree_path_free(path);
 
+               /* Fetch physical row */
+               record = new_packet_list_get_record(model, &iter);
+               *physical_row = record->fdata->num;
+
                /* Fetch column */
                /* XXX -doesn't work if columns are re-arranged? */
                cols = gtk_tree_view_get_columns(GTK_TREE_VIEW(packetlist->view));
index a790fb561691975a03325475f7a883c0804d2d4f..d475cf5b5e22b6db82cc762cc13b24b760c1afbe 100644 (file)
 #ifdef NEW_PACKET_LIST
 
 #include <gtk/gtk.h>
+
 GtkWidget *new_packet_list_create(void);
 void new_packet_list_resize_columns_cb(GtkWidget *widget _U_, gpointer data _U_);
-gboolean new_packet_list_get_event_row_column(GtkWidget *w, GdkEventButton *event_button, gint *row, gint *column);
+gboolean new_packet_list_get_event_row_column(GdkEventButton *event_button, gint *physical_row, gint *row, gint *column);
 
 /** Set the font of the packet list window.
  *