diff options
author | Chris Maynard <Christopher.Maynard@GTECH.COM> | 2013-06-20 16:40:46 +0000 |
---|---|---|
committer | Chris Maynard <Christopher.Maynard@GTECH.COM> | 2013-06-20 16:40:46 +0000 |
commit | 9229a5eeb3642be035896ccebe7e37c369131690 (patch) | |
tree | 6c9b55959331a18b5bef3298349b67185ea8ad27 /ui | |
parent | 5d53d63cd79f48f15c16f41efe74c2a91a0c5003 (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.c | 42 |
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 */ |