+static void dupe_help_cb(GtkAction *action, gpointer data)
+{
+ help_window_show("GuideImageSearchFindingDuplicates.html");
+}
+
+static gint default_sort_cb(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data)
+{
+ return 0;
+}
+
+static gint column_sort_cb(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data)
+{
+ GtkTreeSortable *sortable = data;
+ gint ret = 0;
+ gchar *rank_str_a, *rank_str_b;
+ gint rank_int_a;
+ gint rank_int_b;
+ gint group_a;
+ gint group_b;
+ gint sort_column_id;
+ GtkSortType sort_order;
+ DupeItem *di_a;
+ DupeItem *di_b;
+
+ gtk_tree_sortable_get_sort_column_id(sortable, &sort_column_id, &sort_order);
+
+ gtk_tree_model_get(model, a, DUPE_COLUMN_RANK, &rank_str_a, DUPE_COLUMN_SET, &group_a, DUPE_COLUMN_POINTER, &di_a, -1);
+
+ gtk_tree_model_get(model, b, DUPE_COLUMN_RANK, &rank_str_b, DUPE_COLUMN_SET, &group_b, DUPE_COLUMN_POINTER, &di_b, -1);
+
+ if (group_a == group_b)
+ {
+ switch (sort_column_id)
+ {
+ case DUPE_COLUMN_NAME:
+ ret = utf8_compare(di_a->fd->name, di_b->fd->name, TRUE);
+ break;
+ case DUPE_COLUMN_SIZE:
+ if (di_a->fd->size == di_b->fd->size)
+ {
+ ret = 0;
+ }
+ else
+ {
+ ret = (di_a->fd->size > di_b->fd->size) ? 1 : -1;
+ }
+ break;
+ case DUPE_COLUMN_DATE:
+ if (di_a->fd->date == di_b->fd->date)
+ {
+ ret = 0;
+ }
+ else
+ {
+ ret = (di_a->fd->date > di_b->fd->date) ? 1 : -1;
+ }
+ break;
+ case DUPE_COLUMN_DIMENSIONS:
+ if ((di_a->width == di_b->width) && (di_a->height == di_b->height))
+ {
+ ret = 0;
+ }
+ else
+ {
+ ret = ((di_a->width * di_a->height) > (di_b->width * di_b->height)) ? 1 : -1;
+ }
+ break;
+ case DUPE_COLUMN_RANK:
+ rank_int_a = atoi(rank_str_a);
+ rank_int_b = atoi(rank_str_b);
+ if (rank_int_a == 0) rank_int_a = 101;
+ if (rank_int_b == 0) rank_int_b = 101;
+
+ if (rank_int_a == rank_int_b)
+ {
+ ret = 0;
+ }
+ else
+ {
+ ret = (rank_int_a > rank_int_b) ? 1 : -1;
+ }
+ break;
+ case DUPE_COLUMN_PATH:
+ ret = utf8_compare(di_a->fd->path, di_b->fd->path, TRUE);
+ break;
+ }
+ }
+ else if (group_a < group_b)
+ {
+ ret = (sort_order == GTK_SORT_ASCENDING) ? 1 : -1;
+ }
+ else
+ {
+ ret = (sort_order == GTK_SORT_ASCENDING) ? -1 : 1;
+ }
+
+ return ret;
+}
+
+static gboolean dupe_window_recompare_cb(gpointer data)
+{
+ DupeWindow *dw = data;
+
+ dupe_window_recompare_cb(dw);
+}
+
+static void column_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ DupeWindow *dw = data;
+
+ options->duplicates_match = DUPE_SELECT_NONE;
+ dupe_listview_select_dupes(dw, DUPE_SELECT_NONE);
+ dupe_window_recompare_cb, dw;
+}
+