aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2009-05-18 20:57:06 +0000
committerBill Meier <wmeier@newsguy.com>2009-05-18 20:57:06 +0000
commit0608bff3c234fd58c124d9a5b1898e11267ce4c8 (patch)
tree09e5451863d4a46111adeeadf596b0580f5fecb7
parentdef30681546b653a4c9e13c02032e59b8342084e (diff)
prefs_capture: Interface Options Edit dialog: code cleanup;
- Fix typo which caused Properties|Descriptions value field to be incorrectly right-justified; - Fix several (small) memory leaks; - Rename variables & rework comments: What was a clist was replaced by a treeview/liststore; - Remove a left-over line of code still calling a gtk_clist function; - Rename some constants and variables to more closely reflect usage; - Add some defensive coding; - Use gtk_combo_box_get_active_text if GTK+ is 2.6 or greater; - Simplify code in several places; - Use consistent indentation; svn path=/trunk/; revision=28398
-rw-r--r--gtk/prefs_capture.c574
1 files changed, 288 insertions, 286 deletions
diff --git a/gtk/prefs_capture.c b/gtk/prefs_capture.c
index 2ef4b393b7..ff47ef4256 100644
--- a/gtk/prefs_capture.c
+++ b/gtk/prefs_capture.c
@@ -50,10 +50,10 @@
#include <epan/strutil.h>
-#define DEVICE_KEY "device"
-#define PROM_MODE_KEY "prom_mode"
+#define DEVICE_KEY "device"
+#define PROM_MODE_KEY "prom_mode"
#define CAPTURE_REAL_TIME_KEY "capture_real_time"
-#define AUTO_SCROLL_KEY "auto_scroll"
+#define AUTO_SCROLL_KEY "auto_scroll"
#define SHOW_INFO_KEY "show_info"
#define CAPTURE_TABLE_ROWS 6
@@ -61,27 +61,27 @@
#define IFOPTS_CALLER_PTR_KEY "ifopts_caller_ptr"
#define IFOPTS_DIALOG_PTR_KEY "ifopts_dialog_ptr"
#define IFOPTS_TABLE_ROWS 2
-#define IFOPTS_CLIST_COLS 5
+#define IFOPTS_LIST_COLS 5
#define IFOPTS_MAX_DESCR_LEN 128
#define IFOPTS_IF_NOSEL -1
/* interface options dialog */
-static GtkWidget *cur_clist, *if_dev_lb, *if_name_lb, *if_linktype_cb, *if_descr_te, *if_hide_cb;
+static GtkWidget *cur_list, *if_dev_lb, *if_name_lb, *if_linktype_cb, *if_descr_te, *if_hide_cb;
static GtkTreeSelection *if_selection; /* current interface row selected */
static int num_linktypes;
-static gboolean linktypes_nochange;
+static gboolean interfaces_info_nochange; /* TRUE to ignore Interface Options Properties */
+ /* widgets "changed" callbacks. */
static void ifopts_edit_cb(GtkWidget *w, gpointer data);
static void ifopts_edit_ok_cb(GtkWidget *w, gpointer parent_w);
static void ifopts_edit_destroy_cb(GtkWidget *win, gpointer data);
-static void ifopts_edit_ifsel_cb(GtkWidget *clist, GtkTreeSelection *selection, gint column,
- GdkEventButton *event, gpointer data);
+static void ifopts_edit_ifsel_cb(GtkTreeSelection *selection, gpointer data);
static void ifopts_edit_linktype_changed_cb(GtkComboBox *ed, gpointer udata);
static void ifopts_edit_descr_changed_cb(GtkEditable *ed, gpointer udata);
static void ifopts_edit_hide_changed_cb(GtkToggleButton *tbt, gpointer udata);
static void ifopts_options_add(GtkListStore *list_store, if_info_t *if_info);
static void ifopts_options_free(gchar *text[]);
-static void ifopts_if_clist_add(void);
+static void ifopts_if_liststore_add(void);
static void ifopts_write_new_linklayer(void);
static void ifopts_write_new_descr(void);
static void ifopts_write_new_hide(void);
@@ -252,34 +252,34 @@ capture_prefs_destroy(GtkWidget *w)
*/
enum
{
- DEVICE_COLUMN,
- DESC_COLUMN,
- DEF_LINK_LAYER_COLUMN,
- COMMENT_COLUMN,
- VISIBLE_COLUMN,
- DLT_COLUMN,
- N_COLUMN /* The number of columns */
+ DEVICE_COLUMN,
+ DESC_COLUMN,
+ DEF_LINK_LAYER_COLUMN,
+ COMMENT_COLUMN,
+ HIDE_COLUMN,
+ DLT_COLUMN,
+ N_COLUMN /* The number of columns */
};
static void
ifopts_edit_cb(GtkWidget *w, gpointer data _U_)
{
- GtkWidget *ifopts_edit_dlg, *cur_scr_win, *main_hb, *main_tb,
- *cur_opts_fr, *ed_opts_fr, *main_vb,
- *if_linktype_lb, *if_descr_lb, *if_hide_lb,
- *bbox, *ok_bt, *cancel_bt, *help_bt;
-
- GtkListStore *list_store;
- GtkWidget *list;
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
- GtkTreeView *list_view;
+ GtkWidget *ifopts_edit_dlg, *cur_scr_win, *main_hb, *main_tb,
+ *cur_opts_fr, *ed_opts_fr, *main_vb,
+ *if_linktype_lb, *if_descr_lb, *if_hide_lb,
+ *bbox, *ok_bt, *cancel_bt, *help_bt;
+
+ GtkListStore *list_store;
+ GtkWidget *list;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ GtkTreeView *list_view;
GtkTreeSelection *selection;
int row = 0;
- GtkWidget *caller = gtk_widget_get_toplevel(w);
- GtkTooltips *tooltips = gtk_tooltips_new();
+ GtkWidget *caller = gtk_widget_get_toplevel(w);
+ GtkTooltips *tooltips = gtk_tooltips_new();
/* Has an edit dialog box already been opened for that top-level
widget? */
@@ -304,115 +304,114 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_)
gtk_container_add(GTK_CONTAINER(main_vb), cur_opts_fr);
gtk_widget_show(cur_opts_fr);
- /* create a scrolled window to pack the current options CList widget into */
+ /* create a scrolled window to pack the current options TreeView widget into */
cur_scr_win = scrolled_window_new(NULL, NULL);
gtk_container_set_border_width(GTK_CONTAINER(cur_scr_win), 3);
gtk_container_add(GTK_CONTAINER(cur_opts_fr), cur_scr_win);
gtk_widget_show(cur_scr_win);
/*
- * Create current options CList.
+ * Create current options TreeView.
*/
- list_store = gtk_list_store_new(N_COLUMN, /* Total number of columns XXX*/
- G_TYPE_STRING, /* Device */
- G_TYPE_STRING, /* Description */
- G_TYPE_STRING, /* Default link-layer */
- G_TYPE_STRING, /* Comment */
- G_TYPE_STRING, /* Hide? */
- G_TYPE_INT); /* Dlt */
+ list_store = gtk_list_store_new(N_COLUMN, /* Total number of columns XXX */
+ G_TYPE_STRING, /* Device */
+ G_TYPE_STRING, /* Description */
+ G_TYPE_STRING, /* Default link-layer */
+ G_TYPE_STRING, /* Comment */
+ G_TYPE_STRING, /* Hide? */
+ G_TYPE_INT); /* Dlt */
- /* Create a view */
- list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
+ list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
list_view = GTK_TREE_VIEW(list);
- /* The view now holds a reference. We can get rid of our own reference */
- g_object_unref (G_OBJECT (list_store));
+ /* The view now holds a reference. We can get rid of our own reference */
+ g_object_unref (G_OBJECT (list_store));
- /*
+ /*
* Create the first column packet, associating the "text" attribute of the
- * cell_renderer to the first column of the model
+ * cell_renderer to the first column of the model
*/
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("Device", renderer,
- "text", DEVICE_COLUMN,
- NULL);
-
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 230);
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes ("Device", renderer,
+ "text", DEVICE_COLUMN,
+ NULL);
+
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 230);
/* Add the column to the view. */
- gtk_tree_view_append_column (list_view, column);
+ gtk_tree_view_append_column (list_view, column);
- column = gtk_tree_view_column_new_with_attributes ("Description", renderer,
- "text", DESC_COLUMN,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes ("Description", renderer,
+ "text", DESC_COLUMN,
+ NULL);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 260);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 260);
/* Add the column to the view. */
- gtk_tree_view_append_column (list_view, column);
+ gtk_tree_view_append_column (list_view, column);
- column = gtk_tree_view_column_new_with_attributes ("Default link-layer", renderer,
- "text", DEF_LINK_LAYER_COLUMN,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes ("Default link-layer", renderer,
+ "text", DEF_LINK_LAYER_COLUMN,
+ NULL);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 260);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 260);
/* Add the column to the view. */
- gtk_tree_view_append_column (list_view, column);
+ gtk_tree_view_append_column (list_view, column);
- column = gtk_tree_view_column_new_with_attributes ("Comment", renderer,
- "text", COMMENT_COLUMN,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes ("Comment", renderer,
+ "text", COMMENT_COLUMN,
+ NULL);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 100);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 100);
/* Add the column to the view. */
- gtk_tree_view_append_column (list_view, column);
+ gtk_tree_view_append_column (list_view, column);
- column = gtk_tree_view_column_new_with_attributes ("Hide?", renderer,
- "text", VISIBLE_COLUMN,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes ("Hide?", renderer,
+ "text", HIDE_COLUMN,
+ NULL);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 40);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 40);
/* Add the column to the view. */
- gtk_tree_view_append_column (list_view, column);
+ gtk_tree_view_append_column (list_view, column);
#if 0
/* Don't show the DLT column */
- column = gtk_tree_view_column_new_with_attributes ("DLT", renderer,
- "text", DLT_COLUMN,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes ("DLT", renderer,
+ "text", DLT_COLUMN,
+ NULL);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 40);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 40);
/* Add the column to the view. */
- gtk_tree_view_append_column (list_view, column);
+ gtk_tree_view_append_column (list_view, column);
#endif
/* Setup the selection handler */
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
+ selection = gtk_tree_view_get_selection(list_view);
gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
- cur_clist = list;
- gtk_container_add(GTK_CONTAINER(cur_scr_win), cur_clist);
-
- g_signal_connect (G_OBJECT (selection), "changed", /* select_row */
- G_CALLBACK (ifopts_edit_ifsel_cb),
- NULL);
+ cur_list = list;
+ gtk_container_add(GTK_CONTAINER(cur_scr_win), cur_list);
if_selection = selection;
- gtk_widget_show(cur_clist);
+ g_signal_connect (G_OBJECT (selection), "changed", /* select_row */
+ G_CALLBACK (ifopts_edit_ifsel_cb),
+ NULL);
+
+ gtk_widget_show(cur_list);
/* add interface names to cell */
- ifopts_if_clist_add();
+ ifopts_if_liststore_add();
/* create edit options frame */
ed_opts_fr = gtk_frame_new("Properties");
@@ -455,14 +454,14 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_)
if_linktype_lb = gtk_label_new("Default link-layer header type:");
gtk_table_attach_defaults(GTK_TABLE(main_tb), if_linktype_lb, 0, 1, row, row+1);
- gtk_misc_set_alignment(GTK_MISC(if_name_lb), 1.0f, 0.5f);
+ gtk_misc_set_alignment(GTK_MISC(if_linktype_lb), 1.0f, 0.5f);
gtk_widget_show(if_linktype_lb);
if_linktype_cb = gtk_combo_box_new_text();
num_linktypes = 0;
- linktypes_nochange = FALSE;
+ interfaces_info_nochange = FALSE;
g_signal_connect(if_linktype_cb, "changed", G_CALLBACK(ifopts_edit_linktype_changed_cb),
- cur_clist);
+ cur_list);
gtk_table_attach_defaults(GTK_TABLE(main_tb), if_linktype_cb, 1, 2, row, row+1);
gtk_widget_show(if_linktype_cb);
row++;
@@ -475,13 +474,13 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_)
if_descr_te = gtk_entry_new();
g_signal_connect(if_descr_te, "changed", G_CALLBACK(ifopts_edit_descr_changed_cb),
- cur_clist);
+ cur_list);
gtk_entry_set_max_length(GTK_ENTRY(if_descr_te), IFOPTS_MAX_DESCR_LEN);
gtk_table_attach_defaults(GTK_TABLE(main_tb), if_descr_te, 1, 2, row, row+1);
gtk_widget_show(if_descr_te);
row++;
- /* create hide interface label and button */
+ /* create "hide interface" label and button */
if_hide_lb = gtk_label_new("Hide interface?:");
gtk_table_attach_defaults(GTK_TABLE(main_tb), if_hide_lb, 0, 1, row, row+1);
gtk_misc_set_alignment(GTK_MISC(if_hide_lb), 1.0f, 0.5f);
@@ -489,7 +488,7 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_)
if_hide_cb = gtk_check_button_new();
g_signal_connect(if_hide_cb, "toggled", G_CALLBACK(ifopts_edit_hide_changed_cb),
- cur_clist);
+ cur_list);
gtk_table_attach_defaults(GTK_TABLE(main_tb), if_hide_cb, 1, 2, row, row+1);
gtk_widget_show(if_hide_cb);
row++;
@@ -527,10 +526,8 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_)
/* Set the key for the caller to point to us */
g_object_set_data(G_OBJECT(caller), IFOPTS_DIALOG_PTR_KEY, ifopts_edit_dlg);
- /* select the first row in if list, all option fields must exist for this */
- gtk_clist_select_row(GTK_CLIST(cur_clist), 0, -1);
-
- gtk_widget_show(ifopts_edit_dlg);
+ gtk_widget_show(ifopts_edit_dlg); /* triggers ifopts_edit_ifsel_cb() with the */
+ /* "interfaces" TreeView first row selected */
window_present(ifopts_edit_dlg);
}
@@ -540,7 +537,7 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_)
static void
ifopts_edit_ok_cb(GtkWidget *w _U_, gpointer parent_w)
{
- if (if_selection){
+ if (if_selection){ /* XXX: Cannot be NULL ?? */
/* create/write new interfaces link-layer string */
ifopts_write_new_linklayer();
@@ -578,28 +575,29 @@ ifopts_edit_destroy_cb(GtkWidget *win, gpointer data _U_)
static gint
ifopts_description_to_val (const char *if_name, const char *descr)
{
- data_link_info_t *data_link_info;
- GList *lt_list, *lt_entry;
+ GList *lt_list;
int dlt = -1;
lt_list = capture_pcap_linktype_list(if_name, NULL);
- for (lt_entry = g_list_next(lt_list); lt_entry != NULL; lt_entry = g_list_next(lt_entry)) {
- data_link_info = lt_entry->data;
- if (data_link_info->description) {
- if (strcmp(data_link_info->description, descr) == 0) {
- dlt = data_link_info->dlt;
- break;
- }
- } else {
- if (strcmp(data_link_info->name, descr) == 0) {
- dlt = data_link_info->dlt;
- break;
+ if (lt_list != NULL) {
+ GList *lt_entry;
+ /* XXX: Code skips first entry because that's the default ??? */
+ for (lt_entry = g_list_next(lt_list); lt_entry != NULL; lt_entry = g_list_next(lt_entry)) {
+ data_link_info_t *dli_p = lt_entry->data;
+ if (dli_p->description) {
+ if (strcmp(dli_p->description, descr) == 0) {
+ dlt = dli_p->dlt;
+ break;
+ }
+ } else {
+ if (strcmp(dli_p->name, descr) == 0) {
+ dlt = dli_p->dlt;
+ break;
+ }
}
}
+ free_pcap_linktype_list(lt_list);
}
- if (lt_list)
- free_pcap_linktype_list(lt_list);
-
return dlt;
}
@@ -607,103 +605,100 @@ ifopts_description_to_val (const char *if_name, const char *descr)
* Interface selected callback; update displayed widgets.
*/
static void
-ifopts_edit_ifsel_cb(GtkWidget *clist _U_,
- GtkTreeSelection *selection _U_,
- gint column _U_,
- GdkEventButton *event _U_,
- gpointer data _U_)
+ifopts_edit_ifsel_cb(GtkTreeSelection *selection _U_,
+ gpointer data _U_)
{
- GtkTreeIter iter;
- GtkTreeModel *model;
- gchar *desc, *comment, *vissible, *text;
- gchar *if_name, *linktype;
- data_link_info_t *data_link_info;
- GList *lt_list, *lt_entry;
- gint selected = 0;
-
- /* save currently selected row */
-
- /* get/display the interface device from current CList */
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gchar *desc, *comment, *hide, *text;
+ gchar *if_name, *linktype;
+ GList *lt_list;
+ gint selected = 0;
+
+ /* Get list_store data for currently selected interface */
if (!gtk_tree_selection_get_selected (if_selection, &model, &iter)){
return;
}
-
gtk_tree_model_get(model, &iter,
- DEVICE_COLUMN, &if_name,
- DESC_COLUMN, &desc,
- DEF_LINK_LAYER_COLUMN, &linktype,
- COMMENT_COLUMN, &comment,
- VISIBLE_COLUMN, &vissible,
- -1);
-
- /* is needed, as gtk_entry_set_text() will change text again (bug in GTK?) */
+ DEVICE_COLUMN, &if_name,
+ DESC_COLUMN, &desc,
+ DEF_LINK_LAYER_COLUMN, &linktype,
+ COMMENT_COLUMN, &comment,
+ HIDE_COLUMN, &hide,
+ -1);
+
+ /* display the interface device from current interfaces selection */
gtk_label_set_text(GTK_LABEL(if_dev_lb), if_name);
- /* get/display the interface name from current List */
+ /* display the interface name from current interfaces selection */
gtk_label_set_text(GTK_LABEL(if_name_lb), desc);
- g_free(desc);
- /* get/display the link-layer header type from current List */
- linktypes_nochange = TRUE;
+ /* Ignore "changed" callbacks while we update the Properties widgets */
+ interfaces_info_nochange = TRUE;
+
+ /* display the link-layer header type from current interfaces selection */
+ /* -- remove old linktype list (if any) from the ComboBox */
while (num_linktypes > 0) {
num_linktypes--;
gtk_combo_box_remove_text (GTK_COMBO_BOX(if_linktype_cb), num_linktypes);
}
+ /* -- build and add to the ComboBox a linktype list for the current interfaces selection */
lt_list = capture_pcap_linktype_list(if_name, NULL);
- for (lt_entry = lt_list; lt_entry != NULL; lt_entry = g_list_next(lt_entry)) {
- data_link_info = lt_entry->data;
- if (data_link_info->description) {
- text = g_strdup(data_link_info->description);
- } else {
- text = g_strdup(data_link_info->name);
- }
- if (strcmp(linktype, text) == 0) {
- selected = num_linktypes;
+ if (lt_list != NULL) {
+ GList *lt_entry;
+ for (lt_entry = lt_list; lt_entry != NULL; lt_entry = g_list_next(lt_entry)) {
+ data_link_info_t *dli_p = lt_entry->data;
+ text = (dli_p->description != NULL) ? dli_p->description : dli_p->name;
+ if (strcmp(linktype, text) == 0) {
+ selected = num_linktypes;
+ }
+ gtk_combo_box_append_text(GTK_COMBO_BOX(if_linktype_cb), text);
+ num_linktypes++;
}
- gtk_combo_box_append_text(GTK_COMBO_BOX(if_linktype_cb), text);
- g_free(text);
- num_linktypes++;
- }
- gtk_widget_set_sensitive(if_linktype_cb, num_linktypes >= 2);
- gtk_combo_box_set_active(GTK_COMBO_BOX(if_linktype_cb), selected);
- if (lt_list)
+ gtk_widget_set_sensitive(if_linktype_cb, num_linktypes >= 2);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(if_linktype_cb), selected);
free_pcap_linktype_list(lt_list);
- linktypes_nochange = FALSE;
-
- /* get/display the interface description from current List */
+ }
+
+ /* display the interface description from current interfaces selection */
gtk_entry_set_text(GTK_ENTRY(if_descr_te), comment);
- g_free(comment);
- /* get/display the "hidden" button state from current CList */
- if (strcmp("Yes", vissible) == 0)
+ /* display the "hide interface" button state from current interfaces selection */
+ if (strcmp("Yes", hide) == 0)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(if_hide_cb), TRUE);
else
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(if_hide_cb), FALSE);
- g_free(vissible);
- g_free(if_name);
+ interfaces_info_nochange = FALSE;
+ g_free(if_name);
+ g_free(desc);
+ g_free(linktype);
+ g_free(comment);
+ g_free(hide);
}
/*
- * Link-layer entry changed callback; update current CList.
+ * Link-layer entry changed callback; update list_store for currently selected interface.
*/
static void
ifopts_edit_linktype_changed_cb(GtkComboBox *cb, gpointer udata)
{
- gchar *ifnm, *text;
- gint linktype;
- GtkTreeModel *model;
+ gchar *ifnm, *text;
+ gint linktype;
GtkTreeModel *list_model;
- GtkTreeIter iter;
- GtkTreeIter list_iter;
+#if ! GTK_CHECK_VERSION(2,6,0)
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+#endif
+ GtkTreeIter list_iter;
GtkListStore *list_store;
- if (if_selection == NULL)
+ if (interfaces_info_nochange)
return;
- if (linktypes_nochange)
+ if (if_selection == NULL) /* XXX: Cannot be NULL ?? */
return;
if (!gtk_tree_selection_get_selected (if_selection, &list_model, &list_iter)){
@@ -714,62 +709,73 @@ ifopts_edit_linktype_changed_cb(GtkComboBox *cb, gpointer udata)
DEVICE_COLUMN, &ifnm,
-1);
- /* get current description text and set value in current CList */
+ /* get current description text and set value in list_store for currently selected interface */
+#if GTK_CHECK_VERSION(2,6,0)
+ text = gtk_combo_box_get_active_text(cb);
+ if (text) {
+#else
if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(cb), &iter)) {
model = gtk_combo_box_get_model(GTK_COMBO_BOX(cb));
gtk_tree_model_get(model, &iter, 0, &text, -1);
+#endif
linktype = ifopts_description_to_val(ifnm, text);
list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (udata))); /* Get store */
gtk_list_store_set (list_store, &list_iter,
- DEF_LINK_LAYER_COLUMN,text,
- DLT_COLUMN, linktype,
- -1);
+ DEF_LINK_LAYER_COLUMN, text,
+ DLT_COLUMN, linktype,
+ -1);
g_free(text);
}
}
/*
- * Comment text entry changed callback; update current CList.
+ * Comment text entry changed callback; update list_store for currently selected interface.
*/
static void
ifopts_edit_descr_changed_cb(GtkEditable *ed, gpointer udata)
{
- gchar *text;
+ gchar *text;
GtkTreeModel *list_model;
- GtkTreeIter list_iter;
+ GtkTreeIter list_iter;
GtkListStore *list_store;
- if (if_selection == NULL)
+ if (interfaces_info_nochange)
+ return;
+
+ if (if_selection == NULL) /* XXX: Cannot be NULL ?? */
return;
if (!gtk_tree_selection_get_selected (if_selection, &list_model, &list_iter)){
return;
}
- /* get current description text and set value in current CList */
+ /* get current description text and set value in list_store for currently selected interface */
text = gtk_editable_get_chars(GTK_EDITABLE(ed), 0, -1);
/* replace any reserved formatting characters "()," with spaces */
g_strdelimit(text, "(),", ' ');
list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (udata))); /* Get store */
gtk_list_store_set (list_store, &list_iter,
- COMMENT_COLUMN, text,
- -1);
+ COMMENT_COLUMN, text,
+ -1);
g_free(text);
}
/*
- * Hide toggle button changed callback; update current CList.
+ * Hide toggle button changed callback; update list_store for currently selected interface .
*/
static void
ifopts_edit_hide_changed_cb(GtkToggleButton *tbt, gpointer udata)
{
GtkTreeModel *list_model;
- GtkTreeIter list_iter;
+ GtkTreeIter list_iter;
GtkListStore *list_store;
- if (if_selection == NULL)
+ if (interfaces_info_nochange)
+ return;
+
+ if (if_selection == NULL) /* XXX: Cannot be NULL ?? */
return;
if (!gtk_tree_selection_get_selected (if_selection, &list_model, &list_iter)){
@@ -777,19 +783,19 @@ ifopts_edit_hide_changed_cb(GtkToggleButton *tbt, gpointer udata)
}
list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (udata))); /* Get store */
- /* get "hidden" button state and set text in current CList */
+ /* get "hide" button state and set text in list_store for currently selected interface */
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tbt)) == TRUE)
gtk_list_store_set (list_store, &list_iter,
- VISIBLE_COLUMN, "Yes",
- -1);
+ HIDE_COLUMN, "Yes",
+ -1);
else
gtk_list_store_set (list_store, &list_iter,
- VISIBLE_COLUMN, "No",
- -1);
+ HIDE_COLUMN, "No",
+ -1);
}
/*
- * Add any saved options that apply to cells in current CList.
+ * Add any saved interface options that apply to interfaces ListStore.
*
* NOTE:
* Interfaces that have been removed from the machine or disabled and
@@ -805,8 +811,7 @@ ifopts_options_add(GtkListStore *list_store, if_info_t *if_info)
gchar *desc;
gchar *pr_descr;
gchar *text[] = { NULL, NULL, NULL, NULL, NULL };
- GList *lt_list, *lt_entry;
- data_link_info_t *data_link_info;
+ GList *lt_list;
gint linktype;
GtkTreeIter iter;
@@ -822,21 +827,22 @@ ifopts_options_add(GtkListStore *list_store, if_info_t *if_info)
/* set default link-layer header type */
linktype = capture_dev_user_linktype_find(if_info->name);
lt_list = capture_pcap_linktype_list(if_info->name, NULL);
- for (lt_entry = lt_list; lt_entry != NULL; lt_entry = g_list_next(lt_entry)) {
- data_link_info = lt_entry->data;
- /* If we have no previous link-layer header type we use the first one */
- if (linktype == -1 || linktype == data_link_info->dlt) {
- if (data_link_info->description) {
- text[2] = g_strdup(data_link_info->description);
- } else {
- text[2] = g_strdup(data_link_info->name);
+ if (lt_list != NULL) {
+ GList *lt_entry;
+ for (lt_entry = lt_list; lt_entry != NULL; lt_entry = g_list_next(lt_entry)) {
+ data_link_info_t *dli_p = lt_entry->data;
+ /* If we have no previous link-layer header type we use the first one */
+ if (linktype == -1 || linktype == dli_p->dlt) {
+ if (dli_p->description) {
+ text[2] = g_strdup(dli_p->description);
+ } else {
+ text[2] = g_strdup(dli_p->name);
+ }
+ break;
}
- break;
}
- }
- if (lt_list)
free_pcap_linktype_list(lt_list);
-
+ }
/* if we have no link-layer */
if (text[2] == NULL)
text[2] = g_strdup("");
@@ -896,7 +902,7 @@ ifopts_options_add(GtkListStore *list_store, if_info_t *if_info)
else
text[4] = g_strdup("No");
- /* add row to CList */
+ /* add row to ListStore */
#if GTK_CHECK_VERSION(2,6,0)
gtk_list_store_insert_with_values( list_store , &iter, G_MAXINT,
@@ -904,13 +910,13 @@ ifopts_options_add(GtkListStore *list_store, if_info_t *if_info)
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter,
#endif
- DEVICE_COLUMN, text[0],
- DESC_COLUMN, text[1],
- DEF_LINK_LAYER_COLUMN, text[2],
- COMMENT_COLUMN, text[3],
- VISIBLE_COLUMN, text[4],
- DLT_COLUMN, linktype,
- -1);
+ DEVICE_COLUMN, text[0],
+ DESC_COLUMN, text[1],
+ DEF_LINK_LAYER_COLUMN, text[2],
+ COMMENT_COLUMN, text[3],
+ HIDE_COLUMN, text[4],
+ DLT_COLUMN, linktype,
+ -1);
ifopts_options_free(text);
}
@@ -920,7 +926,7 @@ ifopts_options_free(gchar *text[])
{
gint i;
- for (i=0; i < IFOPTS_CLIST_COLS; i++) {
+ for (i=0; i < IFOPTS_LIST_COLS; i++) {
if (text[i] != NULL) {
g_free(text[i]);
text[i] = NULL;
@@ -929,40 +935,35 @@ ifopts_options_free(gchar *text[])
}
/*
- * Add all interfaces to interfaces CList.
+ * Add all interfaces to interfaces ListStore.
*/
static void
-ifopts_if_clist_add(void)
+ifopts_if_liststore_add(void)
{
- GList *if_list;
- int err;
- gchar *err_str;
- if_info_t *if_info;
- guint i;
- guint nitems;
-
- if_list = capture_interface_list(&err, &err_str);
- if (if_list == NULL && err == CANT_GET_INTERFACE_LIST) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
+ GList *if_list, *ifl_p;
+ int err;
+ gchar *err_str;
+
+ if_list = capture_interface_list(&err, &err_str); /* if_list = ptr to first element of list (or NULL) */
+ if (if_list == NULL) {
+ if (err != NO_INTERFACES_FOUND) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
+ }
g_free(err_str);
return;
}
- /* Seems we need to be at list head for g_list_length()? */
- if_list = g_list_first(if_list);
- nitems = g_list_length(if_list);
-
- /* add OS description + interface name text to CList */
- for (i=0; i < nitems; i++) {
- if_info = g_list_nth_data(if_list, i);
+ /* We have an interface list. */
+ /* add OS description + interface name text to ListStore */
+ ifl_p = if_list;
+ for (ifl_p = if_list; ifl_p != NULL; ifl_p = g_list_next(ifl_p)) {
/* should never happen, but just in case */
- if (if_info == NULL)
+ if ((ifl_p->data) == NULL)
continue;
-
- /* fill current options CList with current preference values */
- ifopts_options_add(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (cur_clist))), if_info);
+ /* fill current options ListStore with current preference values */
+ ifopts_options_add(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (cur_list))),
+ (if_info_t *)ifl_p->data);
}
-
free_interface_list(if_list);
}
@@ -973,13 +974,13 @@ ifopts_if_clist_add(void)
static void
ifopts_write_new_linklayer(void)
{
- GtkListStore *store;
- GtkTreeIter iter;
- GtkTreeModel *model;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
- gboolean more_items = TRUE, first_if = TRUE; /* flag to check if first in list */
+ gboolean more_items = TRUE, first_if = TRUE; /* flag to check if first in list */
gchar *ifnm;
- gint linktype;
+ gint linktype;
gchar *tmp_linklayer;
gchar *new_linklayer;
@@ -987,15 +988,15 @@ ifopts_write_new_linklayer(void)
new_linklayer = g_malloc0(MAX_VAL_LEN);
/* get link-layer for each row (interface) */
- model = gtk_tree_view_get_model(GTK_TREE_VIEW(cur_clist));
+ model = gtk_tree_view_get_model(GTK_TREE_VIEW(cur_list));
store = GTK_LIST_STORE(model);
if( gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter) ) {
while (more_items) {
gtk_tree_model_get(GTK_TREE_MODEL(store), &iter,
- DEVICE_COLUMN, &ifnm,
- DLT_COLUMN, &linktype,
- -1);
+ DEVICE_COLUMN, &ifnm,
+ DLT_COLUMN, &linktype,
+ -1);
if (linktype == -1){
more_items = gtk_tree_model_iter_next (model,&iter);
@@ -1012,6 +1013,7 @@ ifopts_write_new_linklayer(void)
tmp_linklayer = g_strdup_printf("%s(%d)", ifnm, linktype);
g_strlcat(new_linklayer, tmp_linklayer, MAX_VAL_LEN);
g_free(tmp_linklayer);
+ g_free(ifnm);
/* set first-in-list flag to false */
first_if = FALSE;
more_items = gtk_tree_model_iter_next (model,&iter);
@@ -1038,21 +1040,21 @@ ifopts_write_new_linklayer(void)
static void
ifopts_write_new_descr(void)
{
- GtkListStore *store;
- GtkTreeIter iter;
- GtkTreeModel *model;
- gboolean more_items = TRUE;
- gboolean first_if = TRUE; /* flag to check if first in list */
- gchar *ifnm;
- gchar *desc;
- gchar *tmp_descr;
- gchar *new_descr;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gboolean more_items = TRUE;
+ gboolean first_if = TRUE; /* flag to check if first in list */
+ gchar *ifnm;
+ gchar *desc;
+ gchar *tmp_descr;
+ gchar *new_descr;
/* new preferences interfaces description string */
new_descr = g_malloc0(MAX_VAL_LEN);
/* get description for each row (interface) */
- model = gtk_tree_view_get_model(GTK_TREE_VIEW(cur_clist));
+ model = gtk_tree_view_get_model(GTK_TREE_VIEW(cur_list));
store = GTK_LIST_STORE(model);
if( gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter) ) {
while (more_items) {
@@ -1104,27 +1106,27 @@ ifopts_write_new_descr(void)
static void
ifopts_write_new_hide(void)
{
- GtkListStore *store;
- GtkTreeIter iter;
- GtkTreeModel *model;
- gboolean more_items = TRUE;
- gint first_if = TRUE; /* flag to check if first in list */
- gchar *ifnm;
- gchar *hide;
- gchar *new_hide;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gboolean more_items = TRUE;
+ gint first_if = TRUE; /* flag to check if first in list */
+ gchar *ifnm;
+ gchar *hide;
+ gchar *new_hide;
/* new preferences "hidden" interfaces string */
new_hide = g_malloc0(MAX_VAL_LEN);
- /* get "hidden" flag text for each row (interface) */
- model = gtk_tree_view_get_model(GTK_TREE_VIEW(cur_clist));
+ /* get "hide" flag text for each row (interface) */
+ model = gtk_tree_view_get_model(GTK_TREE_VIEW(cur_list));
store = GTK_LIST_STORE(model);
if( gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter) ) {
while (more_items) {
gtk_tree_model_get(GTK_TREE_MODEL(store), &iter,
- DEVICE_COLUMN, &ifnm,
- VISIBLE_COLUMN, &hide,
- -1);
+ DEVICE_COLUMN, &ifnm,
+ HIDE_COLUMN, &hide,
+ -1);
/* if flag text is "No", skip this interface */
if (strcmp("No", hide) == 0){
@@ -1132,9 +1134,9 @@ ifopts_write_new_hide(void)
continue;
}
- /*
- * create/cat interface to new string
- */
+ /*
+ * create/cat interface to new string
+ */
if (first_if != TRUE)
g_strlcat (new_hide, ",", MAX_VAL_LEN);
g_strlcat (new_hide, ifnm, MAX_VAL_LEN);