Sort the list of encapsulation types, but still have Ethernet be the default.
authorChris Maynard <Christopher.Maynard@GTECH.COM>
Thu, 20 Jun 2013 16:40:46 +0000 (16:40 -0000)
committerChris Maynard <Christopher.Maynard@GTECH.COM>
Thu, 20 Jun 2013 16:40:46 +0000 (16:40 -0000)
svn path=/trunk/; revision=50077

ui/gtk/file_import_dlg.c

index 447e3e812af292bb7ce7a3a558bc0c5c3a80cfec..a79a5806f458b3d106d641e47dcd0ddabf2dfb2c 100644 (file)
@@ -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 */