aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorChris Maynard <Christopher.Maynard@GTECH.COM>2013-06-20 16:40:46 +0000
committerChris Maynard <Christopher.Maynard@GTECH.COM>2013-06-20 16:40:46 +0000
commit9229a5eeb3642be035896ccebe7e37c369131690 (patch)
tree6c9b55959331a18b5bef3298349b67185ea8ad27 /ui
parent5d53d63cd79f48f15c16f41efe74c2a91a0c5003 (diff)
Sort the list of encapsulation types, but still have Ethernet be the default.
svn path=/trunk/; revision=50077
Diffstat (limited to 'ui')
-rw-r--r--ui/gtk/file_import_dlg.c42
1 files changed, 39 insertions, 3 deletions
diff --git a/ui/gtk/file_import_dlg.c b/ui/gtk/file_import_dlg.c
index 447e3e812a..a79a5806f4 100644
--- a/ui/gtk/file_import_dlg.c
+++ b/ui/gtk/file_import_dlg.c
@@ -125,6 +125,12 @@ timefmt_cb_toggle(GtkWidget *widget, gpointer data _U_)
gtk_widget_set_sensitive(timefmt_te, apply_fmt);
}
+static enum
+{
+ ENCAP_NAME_COLUMN,
+ ENCAP_VALUE_COLUMN
+};
+
/*****************************************************************************/
static void
create_encap_list_store(void)
@@ -132,8 +138,14 @@ create_encap_list_store(void)
GtkTreeIter iter;
gint encap;
const gchar *name;
+ GtkTreeSortable *sortable;
+ GtkSortType order = GTK_SORT_ASCENDING;
encap_list_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_UINT);
+ sortable = GTK_TREE_SORTABLE(encap_list_store);
+ gtk_tree_sortable_set_sort_func(sortable, ENCAP_NAME_COLUMN,
+ str_ptr_sort_func, GINT_TO_POINTER(ENCAP_NAME_COLUMN), NULL);
+ gtk_tree_sortable_set_sort_column_id(sortable, ENCAP_NAME_COLUMN, order);
/* Scan all Wiretap encapsulation types */
for (encap = 1; encap < wtap_get_num_encap_types(); encap++) {
@@ -181,7 +193,7 @@ encap_co_changed(GtkComboBox *widget, gpointer data)
if (result) {
guint encap;
GtkTreeModel *model = gtk_combo_box_get_model(widget);
- gtk_tree_model_get(model, &iter, 1, &encap, -1);
+ gtk_tree_model_get(model, &iter, ENCAP_VALUE_COLUMN, &encap, -1);
if (encap != WTAP_ENCAP_ETHERNET)
result = FALSE;
@@ -783,6 +795,31 @@ file_import_ok_cb(GtkWidget *widget _U_, gpointer data)
}
}
+static void
+set_default_encap(GtkWidget *encap_co, guint default_encap)
+{
+ gboolean result;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gboolean more_items = TRUE;
+ guint encap_value;
+
+ gtk_combo_box_set_active(GTK_COMBO_BOX(encap_co), 0);
+ result = gtk_combo_box_get_active_iter(GTK_COMBO_BOX(encap_co), &iter);
+ if (result) {
+ model = gtk_combo_box_get_model(GTK_COMBO_BOX(encap_co));
+ do {
+ gtk_tree_model_get(model, &iter, ENCAP_VALUE_COLUMN, &encap_value, -1);
+ if (encap_value == default_encap) {
+ gtk_combo_box_set_active_iter(GTK_COMBO_BOX(encap_co), &iter);
+ more_items = FALSE;
+ }
+ else
+ more_items = gtk_tree_model_iter_next(model, &iter);
+ } while (more_items);
+ }
+}
+
/*****************************************************************************/
/*
@@ -1105,8 +1142,7 @@ file_import_dlg_new(void)
g_signal_emit_by_name(G_OBJECT(header_cb), "toggled", header_frm);
g_signal_emit_by_name(G_OBJECT(header_eth_rb), "toggled", header_frm);
-
- gtk_combo_box_set_active(GTK_COMBO_BOX(encap_co), 0);
+ set_default_encap(encap_co, WTAP_ENCAP_ETHERNET);
g_signal_connect(encap_co, "changed", G_CALLBACK(encap_co_changed), header_frm);
/* Frame length */