+static gint
+unsorted (GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer user_data)
+{
+ const struct variable *var_a;
+ const struct variable *var_b;
+
+
+ gtk_tree_model_get (model, a, DICT_TVM_COL_VAR, &var_a, -1);
+ gtk_tree_model_get (model, b, DICT_TVM_COL_VAR, &var_b, -1);
+
+ return compare_var_ptrs_by_dict_index (&var_a, &var_b, NULL);
+}
+
+static gint
+sort_by_name (GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer user_data)
+{
+ const struct variable *var_a;
+ const struct variable *var_b;
+
+ gtk_tree_model_get (model, a, DICT_TVM_COL_VAR, &var_a, -1);
+ gtk_tree_model_get (model, b, DICT_TVM_COL_VAR, &var_b, -1);
+
+ return g_strcmp0 (var_get_name (var_a), var_get_name (var_b));
+}
+
+
+static gint
+sort_by_label (GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer user_data)
+{
+ const struct variable *var_a;
+ const struct variable *var_b;
+
+ gtk_tree_model_get (model, a, DICT_TVM_COL_VAR, &var_a, -1);
+ gtk_tree_model_get (model, b, DICT_TVM_COL_VAR, &var_b, -1);
+
+ return g_strcmp0 (var_get_label (var_a), var_get_label (var_b));
+}
+
+
+static gint
+default_sort (GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer user_data)
+{
+ int what = -1;
+ psppire_conf_get_enum (psppire_conf_new (), "VariableLists", "sort-order",
+ PSPP_TYPE_OPTIONS_VAR_ORDER, &what);
+
+ switch (what)
+ {
+ default:
+ return unsorted (model, a, b, user_data);
+ break;
+ case PSPP_OPTIONS_VAR_ORDER_NAME:
+ return sort_by_name (model, a, b, user_data);
+ break;
+ case PSPP_OPTIONS_VAR_ORDER_LABEL:
+ return sort_by_label (model, a, b, user_data);
+ break;
+ }
+
+ g_assert_not_reached ();
+}
+
+
+
+