new_packet_list_find_row_from_data() is always used to select a packet,

so get rid of the select_flag argument, and rename it
new_packet_list_select_row_from_data().

It's also always passed a frame_data *, so make its argument a
frame_data *.

Its return value is used only to detect whether the packet was found in
the display or not, so make it a gboolean.  Check it in *all* cases
where it's called, and change the dialog message a bit (the most likely
cause is that the user cancelled a redissection of the packets, so not
all packets in the capture file are in the display.

Also, in the find case, pass it the new packet we found.

svn path=/trunk/; revision=36839
This commit is contained in:
Guy Harris 2011-04-24 21:02:55 +00:00
parent b99f04d32c
commit a39c3fab30
3 changed files with 38 additions and 18 deletions

35
file.c
View File

@ -1923,7 +1923,15 @@ rescan_packets(capture_file *cf, const char *action, const char *action_item,
if (selected_frame_num == 0) { if (selected_frame_num == 0) {
new_packet_list_select_first_row(); new_packet_list_select_first_row();
}else{ }else{
new_packet_list_find_row_from_data(selected_frame, TRUE); if (!new_packet_list_select_row_from_data(selected_frame)) {
/* We didn't find a row corresponding to this frame.
This means that the frame isn't being displayed currently,
so we can't select it. */
simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
"%sEnd of capture exceeded!%s\n\n"
"The capture file is probably not fully dissected.",
simple_dialog_primary_start(), simple_dialog_primary_end());
}
} }
} }
@ -3214,7 +3222,7 @@ find_packet(capture_file *cf,
progdlg_t *progbar = NULL; progdlg_t *progbar = NULL;
gboolean stop_flag; gboolean stop_flag;
int count; int count;
int row; gboolean found;
float progbar_val; float progbar_val;
GTimeVal start_time; GTimeVal start_time;
gchar status_str[100]; gchar status_str[100];
@ -3357,16 +3365,16 @@ find_packet(capture_file *cf,
if (new_fd != NULL) { if (new_fd != NULL) {
/* Find and select */ /* Find and select */
cf->search_in_progress = TRUE; cf->search_in_progress = TRUE;
row = new_packet_list_find_row_from_data(fdata, TRUE); found = new_packet_list_select_row_from_data(new_fd);
cf->search_in_progress = FALSE; cf->search_in_progress = FALSE;
cf->search_pos = 0; /* Reset the position */ cf->search_pos = 0; /* Reset the position */
if (row == -1) { if (!found) {
/* We didn't find a row even though we know that a frame /* We didn't find a row corresponding to this frame.
* exists that satifies the search criteria. This means that the This means that the frame isn't being displayed currently,
* frame isn't being displayed currently so we can't select it. */ so we can't select it. */
simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK, simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
"%sEnd of capture exceeded!%s\n\n" "%sEnd of capture exceeded!%s\n\n"
"The capture file is probably not fully loaded.", "The capture file is probably not fully dissected.",
simple_dialog_primary_start(), simple_dialog_primary_end()); simple_dialog_primary_start(), simple_dialog_primary_end());
return FALSE; return FALSE;
} }
@ -3395,7 +3403,16 @@ cf_goto_frame(capture_file *cf, guint fnumber)
return FALSE; /* we failed to go to that packet */ return FALSE; /* we failed to go to that packet */
} }
new_packet_list_find_row_from_data(fdata, TRUE); if (!new_packet_list_select_row_from_data(fdata)) {
/* We didn't find a row corresponding to this frame.
This means that the frame isn't being displayed currently,
so we can't select it. */
simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
"%sEnd of capture exceeded!%s\n\n"
"The capture file is probably not fully dissected.",
simple_dialog_primary_start(), simple_dialog_primary_end());
return FALSE;
}
return TRUE; /* we got to that packet */ return TRUE; /* we got to that packet */
} }

View File

@ -1134,18 +1134,22 @@ new_packet_list_check_end(void)
return at_end; return at_end;
} }
gint /*
new_packet_list_find_row_from_data(gpointer data, gboolean select_flag) * Given a frame_data structure, scroll to and select the row in the
* packet list corresponding to that frame. If there is no such
* row, return FALSE, otherwise return TRUE.
*/
gboolean
new_packet_list_select_row_from_data(frame_data *fdata_needle)
{ {
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(packetlist->view)); GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(packetlist->view));
GtkTreeIter iter; GtkTreeIter iter;
frame_data *fdata_needle = data;
/* Initializes iter with the first iterator in the tree (the one at the path "0") /* Initializes iter with the first iterator in the tree (the one at the path "0")
* and returns TRUE. Returns FALSE if the tree is empty * and returns TRUE. Returns FALSE if the tree is empty
*/ */
if(!gtk_tree_model_get_iter_first(model, &iter)) if(!gtk_tree_model_get_iter_first(model, &iter))
return -1; return FALSE;
do { do {
PacketListRecord *record; PacketListRecord *record;
@ -1155,14 +1159,13 @@ new_packet_list_find_row_from_data(gpointer data, gboolean select_flag)
fdata = record->fdata; fdata = record->fdata;
if(fdata == fdata_needle) { if(fdata == fdata_needle) {
if(select_flag) scroll_to_and_select_iter(model, NULL, &iter);
scroll_to_and_select_iter(model, NULL, &iter);
return fdata->num; return TRUE;
} }
} while (gtk_tree_model_iter_next(model, &iter)); } while (gtk_tree_model_iter_next(model, &iter));
return -1; return FALSE;
} }
void void

View File

@ -71,7 +71,7 @@ void new_packet_list_select_first_row(void);
void new_packet_list_select_last_row(void); void new_packet_list_select_last_row(void);
void new_packet_list_moveto_end(void); void new_packet_list_moveto_end(void);
gboolean new_packet_list_check_end(void); gboolean new_packet_list_check_end(void);
gint new_packet_list_find_row_from_data(gpointer data, gboolean select); gboolean new_packet_list_select_row_from_data(frame_data *fdata_needle);
void new_packet_list_resize_column(gint col); void new_packet_list_resize_column(gint col);
#ifdef __cplusplus #ifdef __cplusplus