+static gint
+model_priority_sort_func (GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer user_data)
+{
+ gint retval;
+ RtmTask *task_a, *task_b;
+ const char *priority_str_a, *priority_str_b;
+ gint64 priority_a, priority_b;
+ const char *name_a, *name_b;
+
+ gtk_tree_model_get (model, a,
+ MILK_TASK_MODEL_COLUMN_TASK, &task_a,
+ -1);
+
+ gtk_tree_model_get (model, b,
+ MILK_TASK_MODEL_COLUMN_TASK, &task_b,
+ -1);
+
+ priority_str_a = rtm_task_get_priority (task_a);
+ priority_str_b = rtm_task_get_priority (task_b);
+
+ /* these will be assigned 0 if they're not the well-known priorites
+ * (1-3) */
+ priority_a = g_ascii_strtoll (priority_str_a, NULL, 10);
+ priority_b = g_ascii_strtoll (priority_str_b, NULL, 10);
+
+ priority_a = (priority_a <= 0) ? G_MAXINT : priority_a;
+ priority_b = (priority_b <= 0) ? G_MAXINT : priority_b;
+
+ retval = (priority_a - priority_b);
+ if (retval != 0)
+ return retval;
+
+ /* secondary sort, by name */
+ name_a = rtm_task_get_name (task_a);
+ name_b = rtm_task_get_name (task_b);
+
+ return g_utf8_collate (name_a, name_b);
+}
+