summaryrefslogtreecommitdiff
path: root/ui/gtk/expert_comp_dlg.c
diff options
context:
space:
mode:
Diffstat (limited to 'ui/gtk/expert_comp_dlg.c')
-rw-r--r--ui/gtk/expert_comp_dlg.c76
1 files changed, 59 insertions, 17 deletions
diff --git a/ui/gtk/expert_comp_dlg.c b/ui/gtk/expert_comp_dlg.c
index 311018e550..c882eb4a88 100644
--- a/ui/gtk/expert_comp_dlg.c
+++ b/ui/gtk/expert_comp_dlg.c
@@ -48,6 +48,7 @@
#include "ui/gtk/old-gtk-compat.h"
#include "ui/gtk/edit_packet_comment_dlg.h"
#include "ui/gtk/capture_comment_icons.h"
+#include "ui/gtk/gtkglobals.h"
void register_tap_listener_expert_comp(void);
@@ -85,12 +86,14 @@ typedef struct _expert_comp_dlg_t {
error_equiv_table note_table;
error_equiv_table warn_table;
error_equiv_table error_table;
+ expert_tapdata_t *etd; /* details tab info similar to error_equiv_table for others */
guint32 pkt_comments_events;
guint32 disp_events;
guint32 chat_events;
guint32 note_events;
guint32 warn_events;
guint32 error_events;
+ gboolean use_dfilter;
} expert_comp_dlg_t;
struct expert_tapdata_s {
@@ -137,6 +140,35 @@ select_row_cb(GtkTreeSelection *selection, gpointer *user_data _U_)
}
+static void
+expert_comp_select_filter_cb(GtkWidget *widget, gpointer callback_data, guint callback_action)
+{
+ expert_comp_dlg_t *ss = (expert_comp_dlg_t *)callback_data;
+ const char *filter;
+ GString *error_string;
+
+ ss->use_dfilter = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget));
+ if (ss->use_dfilter) {
+ filter = gtk_entry_get_text(GTK_ENTRY(main_display_filter_widget));
+ } else {
+ filter = NULL;
+ }
+ error_string = set_tap_dfilter (ss, filter);
+ if (error_string) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str);
+ g_string_free(error_string, TRUE);
+ return;
+ }
+ error_string = set_tap_dfilter (ss->etd, filter);
+ if (error_string) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str);
+ g_string_free(error_string, TRUE);
+ return;
+ }
+
+ cf_retap_packets(&cfile);
+}
+
/* reset of display only, e.g. for filtering */
static void expert_dlg_display_reset(expert_tapdata_t * etd)
{
@@ -225,6 +257,7 @@ error_reset(void *pss)
ss->note_events = 0;
ss->chat_events = 0;
ss->disp_events = 0;
+ ss->use_dfilter = FALSE;
ss->pkt_comments_events = 0;
reset_error_table_data(&ss->error_table);
@@ -760,7 +793,6 @@ static void
expert_comp_init(const char *opt_arg _U_, void* userdata _U_)
{
expert_comp_dlg_t *ss;
- const char *filter=NULL;
GString *error_string;
GtkWidget *temp_page, *details_page, *comments_page;
GtkWidget *main_nb;
@@ -770,9 +802,9 @@ expert_comp_init(const char *opt_arg _U_, void* userdata _U_)
GtkWidget *bbox;
GtkWidget *close_bt;
GtkWidget *help_bt;
- expert_tapdata_t *etd;
+ GtkWidget *filter_cb;
- ss=(expert_comp_dlg_t *)g_malloc(sizeof(expert_comp_dlg_t));
+ ss = (expert_comp_dlg_t *)g_malloc(sizeof(expert_comp_dlg_t));
ss->pkt_comments_events = 0;
ss->disp_events = 0;
@@ -788,7 +820,7 @@ expert_comp_init(const char *opt_arg _U_, void* userdata _U_)
error_set_title(ss);
- vbox=ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);
+ vbox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);
gtk_container_add(GTK_CONTAINER(ss->win), vbox);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 12);
@@ -799,7 +831,7 @@ expert_comp_init(const char *opt_arg _U_, void* userdata _U_)
gtk_widget_show_all(ss->win);
/* Errors */
- temp_page =ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 6, FALSE);
+ temp_page = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 6, FALSE);
ss->error_label = gtk_label_new("Errors: 0/y");
gtk_widget_show(ss->error_label);
hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3, FALSE);
@@ -881,33 +913,34 @@ expert_comp_init(const char *opt_arg _U_, void* userdata _U_)
gtk_box_pack_start(GTK_BOX(hbox), ss->pkt_comments_label, TRUE, TRUE, 0);
gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), comments_page, hbox);
- etd = expert_dlg_new_table();
- etd->label=gtk_label_new("Please wait ...");
- gtk_misc_set_alignment(GTK_MISC(etd->label), 0.0f, 0.5f);
+ ss->etd = expert_dlg_new_table();
+ ss->etd->label=gtk_label_new("Please wait ...");
+ gtk_misc_set_alignment(GTK_MISC(ss->etd->label), 0.0f, 0.5f);
- etd->win=ss->win;
- expert_dlg_init_table(etd, details_page);
- expert_dlg_init_comments_table(etd, comments_page);
+ ss->etd->win=ss->win;
+ expert_dlg_init_table(ss->etd, details_page);
+ expert_dlg_init_comments_table(ss->etd, comments_page);
/* Add tap listener functions for expert details, From expert_dlg.c*/
- error_string=register_tap_listener("expert", etd, NULL /* fstring */,
- TL_REQUIRES_PROTO_TREE,
+ error_string=register_tap_listener("expert", ss->etd, NULL,
+ TL_REQUIRES_NOTHING,
expert_dlg_reset,
expert_dlg_packet,
expert_dlg_draw);
if(error_string){
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str);
g_string_free(error_string, TRUE);
- g_free(etd);
+ g_free(ss->etd);
return;
}
- g_signal_connect(etd->win, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
- g_signal_connect(etd->win, "destroy", G_CALLBACK(expert_dlg_destroy_cb), etd);
+ g_signal_connect(ss->etd->win, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
+ g_signal_connect(ss->etd->win, "destroy", G_CALLBACK(expert_dlg_destroy_cb), ss->etd);
/* Register the tap listener */
- error_string=register_tap_listener("expert", ss, filter, 0, error_reset, error_packet, expert_comp_draw);
+ error_string=register_tap_listener("expert", ss, NULL,
+ TL_REQUIRES_NOTHING, error_reset, error_packet, expert_comp_draw);
if(error_string){
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str);
g_string_free(error_string, TRUE);
@@ -915,6 +948,15 @@ expert_comp_init(const char *opt_arg _U_, void* userdata _U_)
return;
}
+ hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, DLG_UNRELATED_SPACING, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ filter_cb = gtk_check_button_new_with_mnemonic("Limit to display filter");
+ gtk_box_pack_start(GTK_BOX(hbox), filter_cb, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filter_cb), FALSE);
+ gtk_widget_set_tooltip_text(filter_cb, "Limit the expert infos to packets matching the current display filter.");
+ g_signal_connect(filter_cb, "toggled", G_CALLBACK(expert_comp_select_filter_cb), ss);
+
/* Button row. */
bbox = dlg_button_row_new(GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL);
gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);