annotate src/dupe.c @ 9:d907d608745f

Sync to GQview 1.5.9 release. ######## DO NOT BASE ENHANCEMENTS OR TRANSLATION UPDATES ON CODE IN THIS CVS! This CVS is never up to date with current development and is provided solely for reference purposes, please use the latest official release package when making any changes or translation updates. ########
author gqview
date Sat, 26 Feb 2005 00:13:35 +0000
parents
children 04ff0df3ad2f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2 * GQview
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3 * (C) 2005 John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
4 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
5 * Author: John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
6 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
7 * This software is released under the GNU General Public License (GNU GPL).
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
8 * Please read the included file COPYING for more information.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
9 * This software comes with no warranty of any kind, use at your own risk!
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
10 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
11
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
12
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
13 #include "gqview.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
14 #include "dupe.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
15
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
16 #include "cache.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
17 #include "collect.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
18 #include "collect-table.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
19 #include "dnd.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
20 #include "editors.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
21 #include "filelist.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
22 #include "image-load.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
23 #include "img-view.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
24 #include "info.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
25 #include "layout.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
26 #include "layout_image.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
27 #include "md5-util.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
28 #include "menu.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
29 #include "print.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
30 #include "thumb.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
31 #include "utilops.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
32 #include "ui_bookmark.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
33 #include "ui_fileops.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
34 #include "ui_menu.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
35 #include "ui_misc.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
36 #include "ui_tree_edit.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
37
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
38 #include <gdk/gdkkeysyms.h> /* for keyboard values */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
39
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
40
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
41 #include <math.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
42
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
43
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
44 #define DUPE_DEF_WIDTH 600
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
45 #define DUPE_DEF_HEIGHT 400
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
46
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
47 /* column assignment order (simply change them here) */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
48 enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
49 DUPE_COLUMN_POINTER = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
50 DUPE_COLUMN_RANK,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
51 DUPE_COLUMN_THUMB,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
52 DUPE_COLUMN_NAME,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
53 DUPE_COLUMN_SIZE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
54 DUPE_COLUMN_DATE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
55 DUPE_COLUMN_DIMENSIONS,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
56 DUPE_COLUMN_PATH,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
57 DUPE_COLUMN_COLOR,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
58 DUPE_COLUMN_COUNT /* total columns */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
59 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
60
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
61
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
62 static GList *dupe_window_list = NULL; /* list of open DupeWindow *s */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
63
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
64 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
65 * Well, after adding the 'compare two sets' option things got a little sloppy in here
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
66 * because we have to account for two 'modes' everywhere. (be careful).
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
67 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
68
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
69 static void dupe_match_unlink(DupeItem *a, DupeItem *b);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
70 static DupeItem *dupe_match_find_parent(DupeWindow *dw, DupeItem *child);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
71
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
72 static gint dupe_match(DupeItem *a, DupeItem *b, DupeMatchType mask, gdouble *rank, gint fast);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
73
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
74 static void dupe_thumb_step(DupeWindow *dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
75 static gint dupe_check_cb(gpointer data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
76
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
77 static void dupe_second_add(DupeWindow *dw, DupeItem *di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
78 static void dupe_second_remove(DupeWindow *dw, DupeItem *di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
79 static GtkWidget *dupe_menu_popup_second(DupeWindow *dw, DupeItem *di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
80
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
81 static void dupe_dnd_init(DupeWindow *dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
82
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
83 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
84 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
85 * Window updates
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
86 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
87 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
88
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
89
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
90 static void dupe_window_update_count(DupeWindow *dw, gint count_only)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
91 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
92 gchar *text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
93
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
94 if (!dw->list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
95 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
96 text = g_strdup(_("Drop files to compare them."));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
97 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
98 else if (count_only)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
99 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
100 text = g_strdup_printf(_("%d files"), g_list_length(dw->list));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
101 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
102 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
103 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
104 text = g_strdup_printf(_("%d matches found in %d files"), g_list_length(dw->dupes), g_list_length(dw->list));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
105 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
106
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
107 if (dw->second_set)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
108 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
109 gchar *buf = g_strconcat(text, " ", _("[set 1]"), NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
110 g_free(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
111 text = buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
112 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
113 gtk_label_set_text(GTK_LABEL(dw->status_label), text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
114
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
115 g_free(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
116 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
117
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
118 static guint64 msec_time(void)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
119 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
120 struct timeval tv;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
121
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
122 if (gettimeofday(&tv, NULL) == -1) return 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
123
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
124 return (guint64)tv.tv_sec * 1000000 + (guint64)tv.tv_usec;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
125 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
126
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
127 static gint dupe_iterations(gint n)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
128 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
129 return (n * ((n + 1) / 2));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
130 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
131
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
132 static void dupe_window_update_progress(DupeWindow *dw, const gchar *status, gdouble value, gint force)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
133 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
134 const gchar *status_text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
135
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
136 if (status)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
137 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
138 guint64 new_time = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
139
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
140 if (dw->setup_n % 10 == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
141 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
142 new_time = msec_time() - dw->setup_time;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
143 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
144
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
145 if (!force &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
146 value != 0.0 &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
147 dw->setup_count > 0 &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
148 new_time > 2000000)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
149 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
150 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
151 gint t;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
152 gint d;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
153 guint32 rem;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
154
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
155 if (new_time - dw->setup_time_count < 250000) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
156 dw->setup_time_count = new_time;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
157
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
158 if (dw->setup_done)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
159 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
160 if (dw->second_set)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
161 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
162 t = dw->setup_count;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
163 d = dw->setup_count - dw->setup_n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
164 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
165 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
166 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
167 t = dupe_iterations(dw->setup_count);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
168 d = dupe_iterations(dw->setup_count - dw->setup_n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
169 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
170 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
171 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
172 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
173 t = dw->setup_count;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
174 d = dw->setup_count - dw->setup_n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
175 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
176
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
177 rem = (t - d) ? ((gdouble)(dw->setup_time_count / 1000000) / (t - d)) * d : 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
178
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
179 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(dw->extra_label), value);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
180
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
181 buf = g_strdup_printf("%s %d:%02d ", status, rem / 60, rem % 60);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
182 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(dw->extra_label), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
183 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
184
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
185 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
186 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
187 else if (force ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
188 value == 0.0 ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
189 dw->setup_count == 0 ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
190 dw->setup_time_count == 0 ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
191 (new_time > 0 && new_time - dw->setup_time_count >= 250000))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
192 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
193 if (dw->setup_time_count == 0) dw->setup_time_count = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
194 if (new_time > 0) dw->setup_time_count = new_time;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
195 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(dw->extra_label), value);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
196 status_text = status;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
197 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
198 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
199 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
200 status_text = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
201 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
202 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
203 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
204 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
205 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(dw->extra_label), 0.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
206 status_text = " ";
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
207 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
208
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
209 if (status_text) gtk_progress_bar_set_text(GTK_PROGRESS_BAR(dw->extra_label), status_text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
210 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
211
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
212 static void widget_set_cursor(GtkWidget *widget, gint icon)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
213 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
214 GdkCursor *cursor;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
215
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
216 if (!widget->window) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
217
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
218 if (icon == -1)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
219 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
220 cursor = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
221 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
222 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
223 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
224 cursor = gdk_cursor_new (icon);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
225 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
226
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
227 gdk_window_set_cursor(widget->window, cursor);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
228
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
229 if (cursor) gdk_cursor_unref(cursor);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
230 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
231
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
232 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
233 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
234 * row color utils
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
235 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
236 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
237
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
238 static void dupe_listview_realign_colors(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
239 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
240 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
241 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
242 gboolean color_set = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
243 DupeItem *parent = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
244 gint valid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
245
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
246 store = gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
247 valid = gtk_tree_model_get_iter_first(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
248 while (valid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
249 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
250 DupeItem *child;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
251 DupeItem *child_parent;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
252
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
253 gtk_tree_model_get(store, &iter, DUPE_COLUMN_POINTER, &child, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
254 child_parent = dupe_match_find_parent(dw, child);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
255 if (!parent || parent != child_parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
256 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
257 if (!parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
258 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
259 /* keep the first row as it is */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
260 gtk_tree_model_get(store, &iter, DUPE_COLUMN_COLOR, &color_set, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
261 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
262 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
263 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
264 color_set = !color_set;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
265 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
266 parent = dupe_match_find_parent(dw, child);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
267 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
268 gtk_list_store_set(GTK_LIST_STORE(store), &iter, DUPE_COLUMN_COLOR, color_set, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
269
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
270 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
271 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
272 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
273
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
274 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
275 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
276 * Dupe item utils
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
277 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
278 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
279
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
280 static DupeItem *dupe_item_new(const gchar *path, gint64 size, time_t date)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
281 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
282 DupeItem *di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
283
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
284 di = g_new0(DupeItem, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
285
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
286 di->path = g_strdup(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
287 di->name = filename_from_path(di->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
288 di->size = size;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
289 di->date = date;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
290
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
291 di->group = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
292 di->group_rank = 0.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
293
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
294 di->simd = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
295 di->checksum = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
296 di->md5sum = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
297 di->width = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
298 di->height = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
299
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
300 di->second = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
301
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
302 return di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
303 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
304
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
305 static void dupe_item_free(DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
306 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
307 g_free(di->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
308 image_sim_free(di->simd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
309 g_free(di->md5sum);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
310 if (di->pixbuf) g_object_unref(di->pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
311
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
312 g_free(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
313 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
314
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
315 static void dupe_list_free(GList *list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
316 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
317 GList *work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
318 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
319 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
320 DupeItem *di = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
321 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
322 dupe_item_free(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
323 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
324 g_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
325 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
326
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
327 static DupeItem *dupe_item_find_path_by_list(const gchar *path, GList *work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
328 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
329 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
330 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
331 DupeItem *di = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
332
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
333 if (strcmp(di->path, path) == 0) return di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
334
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
335 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
336 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
337
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
338 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
339 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
340
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
341 static DupeItem *dupe_item_find_path(DupeWindow *dw, const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
342 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
343 DupeItem *di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
344
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
345 di = dupe_item_find_path_by_list(path, dw->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
346 if (!di && dw->second_set) di = dupe_item_find_path_by_list(path, dw->second_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
347
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
348 return di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
349 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
350
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
351 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
352 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
353 * Image property cache
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
354 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
355 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
356
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
357 static void dupe_item_read_cache(DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
358 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
359 gchar *path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
360 CacheData *cd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
361
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
362 if (!di) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
363
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
364 path = cache_find_location(CACHE_TYPE_SIM, di->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
365 if (!path) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
366
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
367 if (filetime(di->path) != filetime(path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
368 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
369 g_free(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
370 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
371 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
372
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
373 cd = cache_sim_data_load(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
374 g_free(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
375
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
376 if (cd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
377 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
378 if (!di->simd && cd->sim)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
379 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
380 di->simd = cd->sim;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
381 cd->sim = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
382 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
383 if (di->width == 0 && di->height == 0 && cd->dimensions)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
384 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
385 di->width = cd->width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
386 di->height = cd->height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
387 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
388 if (di->checksum == 0 && cd->have_checksum)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
389 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
390 di->checksum = cd->checksum;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
391 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
392 if (!di->md5sum && cd->have_md5sum)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
393 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
394 di->md5sum = md5_digest_to_text(cd->md5sum);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
395 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
396 cache_sim_data_free(cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
397 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
398 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
399
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
400 static void dupe_item_write_cache(DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
401 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
402 gchar *base;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
403 mode_t mode = 0755;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
404
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
405 if (!di) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
406
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
407 base = cache_get_location(CACHE_TYPE_SIM, di->path, FALSE, &mode);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
408 if (cache_ensure_dir_exists(base, mode))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
409 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
410 CacheData *cd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
411
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
412 cd = cache_sim_data_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
413 cd->path = cache_get_location(CACHE_TYPE_SIM, di->path, TRUE, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
414
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
415 if (di->width != 0) cache_sim_data_set_dimensions(cd, di->width, di->height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
416 if (di->checksum != 0) cache_sim_data_set_checksum(cd, di->checksum);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
417 if (di->md5sum)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
418 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
419 guchar digest[16];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
420 if (md5_digest_from_text(di->md5sum, digest)) cache_sim_data_set_md5sum(cd, digest);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
421 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
422 if (di->simd) cache_sim_data_set_similarity(cd, di->simd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
423
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
424 if (cache_sim_data_save(cd))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
425 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
426 filetime_set(cd->path, filetime(di->path));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
427 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
428 cache_sim_data_free(cd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
429 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
430 g_free(base);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
431 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
432
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
433 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
434 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
435 * Window list utils
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
436 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
437 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
438
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
439 static gint dupe_listview_find_item(GtkListStore *store, DupeItem *item, GtkTreeIter *iter)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
440 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
441 gint valid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
442 gint row = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
443
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
444 valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
445 while (valid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
446 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
447 DupeItem *item_n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
448 gtk_tree_model_get(GTK_TREE_MODEL(store), iter, DUPE_COLUMN_POINTER, &item_n, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
449 if (item_n == item) return row;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
450
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
451 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
452 row++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
453 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
454
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
455 return -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
456 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
457
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
458 static void dupe_listview_add(DupeWindow *dw, DupeItem *parent, DupeItem *child)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
459 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
460 DupeItem *di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
461 gint row;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
462 gchar *text[DUPE_COLUMN_COUNT];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
463 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
464 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
465 gboolean color_set = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
466 gint rank;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
467
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
468 if (!parent) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
469
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
470 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
471
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
472 if (child)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
473 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
474 DupeMatch *dm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
475
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
476 row = dupe_listview_find_item(store, parent, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
477 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, DUPE_COLUMN_COLOR, &color_set, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
478
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
479 row++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
480
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
481 if (child->group)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
482 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
483 dm = child->group->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
484 rank = (gint)floor(dm->rank);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
485 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
486 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
487 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
488 rank = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
489 printf("NULL group in item!\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
490 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
491 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
492 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
493 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
494 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
495 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
496 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, DUPE_COLUMN_COLOR, &color_set, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
497 color_set = !color_set;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
498 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
499 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
500 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
501 color_set = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
502 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
503 row = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
504 rank = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
505 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
506
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
507 di = (child) ? child : parent;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
508
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
509 if (!child && dw->second_set)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
510 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
511 text[DUPE_COLUMN_RANK] = g_strdup("[1]");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
512 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
513 else if (rank == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
514 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
515 text[DUPE_COLUMN_RANK] = g_strdup((di->second) ? "(2)" : "");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
516 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
517 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
518 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
519 text[DUPE_COLUMN_RANK] = g_strdup_printf("%d%s", rank, (di->second) ? " (2)" : "");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
520 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
521
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
522 text[DUPE_COLUMN_THUMB] = "";
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
523 text[DUPE_COLUMN_NAME] = (gchar *)di->name;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
524 text[DUPE_COLUMN_SIZE] = text_from_size(di->size);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
525 text[DUPE_COLUMN_DATE] = (gchar *)text_from_time(di->date);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
526 if (di->width > 0 && di->height > 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
527 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
528 text[DUPE_COLUMN_DIMENSIONS] = g_strdup_printf("%d x %d", di->width, di->height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
529 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
530 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
531 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
532 text[DUPE_COLUMN_DIMENSIONS] = g_strdup("");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
533 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
534 text[DUPE_COLUMN_PATH] = di->path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
535 text[DUPE_COLUMN_COLOR] = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
536
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
537 gtk_list_store_insert(store, &iter, row);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
538 gtk_list_store_set(store, &iter,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
539 DUPE_COLUMN_POINTER, di,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
540 DUPE_COLUMN_RANK, text[DUPE_COLUMN_RANK],
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
541 DUPE_COLUMN_THUMB, NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
542 DUPE_COLUMN_NAME, text[DUPE_COLUMN_NAME],
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
543 DUPE_COLUMN_SIZE, text[DUPE_COLUMN_SIZE],
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
544 DUPE_COLUMN_DATE, text[DUPE_COLUMN_DATE],
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
545 DUPE_COLUMN_DIMENSIONS, text[DUPE_COLUMN_DIMENSIONS],
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
546 DUPE_COLUMN_PATH, text[DUPE_COLUMN_PATH],
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
547 DUPE_COLUMN_COLOR, color_set,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
548 -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
549
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
550 g_free(text[DUPE_COLUMN_RANK]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
551 g_free(text[DUPE_COLUMN_SIZE]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
552 g_free(text[DUPE_COLUMN_DIMENSIONS]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
553 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
554
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
555 static void dupe_listview_populate(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
556 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
557 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
558 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
559
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
560 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
561 gtk_list_store_clear(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
562
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
563 work = g_list_last(dw->dupes);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
564 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
565 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
566 DupeItem *parent = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
567 GList *temp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
568
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
569 dupe_listview_add(dw, parent, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
570
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
571 temp = g_list_last(parent->group);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
572 while (temp)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
573 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
574 DupeMatch *dm = temp->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
575 DupeItem *child;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
576
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
577 child = dm->di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
578
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
579 dupe_listview_add(dw, parent, child);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
580
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
581 temp = temp->prev;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
582 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
583
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
584 work = work->prev;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
585 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
586
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
587 gtk_tree_view_columns_autosize(GTK_TREE_VIEW(dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
588 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
589
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
590 static void dupe_listview_remove(DupeWindow *dw, DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
591 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
592 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
593 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
594 gint row;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
595
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
596 if (!di) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
597
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
598 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
599 row = dupe_listview_find_item(store, di, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
600 if (row < 0) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
601
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
602 tree_view_move_cursor_away(GTK_TREE_VIEW(dw->listview), &iter, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
603 gtk_list_store_remove(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
604
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
605 if (g_list_find(dw->dupes, di) != NULL)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
606 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
607 if (!dw->color_frozen) dupe_listview_realign_colors(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
608 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
609 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
610
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
611
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
612 static GList *dupe_listview_get_path_list(DupeWindow *dw, GtkWidget *listview)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
613 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
614 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
615 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
616 gint valid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
617 GList *list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
618
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
619 store = gtk_tree_view_get_model(GTK_TREE_VIEW(listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
620 valid = gtk_tree_model_get_iter_first(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
621 while (valid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
622 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
623 DupeItem *di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
624 gtk_tree_model_get(store, &iter, DUPE_COLUMN_POINTER, &di, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
625 list = g_list_prepend(list, g_strdup(di->path));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
626
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
627 valid = gtk_tree_model_iter_next(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
628 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
629
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
630 return g_list_reverse(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
631 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
632
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
633
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
634 static GList *dupe_listview_get_selection(DupeWindow *dw, GtkWidget *listview)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
635 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
636 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
637 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
638 GList *slist;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
639 GList *list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
640 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
641
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
642 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
643 slist = gtk_tree_selection_get_selected_rows(selection, &store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
644 work = slist;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
645 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
646 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
647 GtkTreePath *tpath = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
648 DupeItem *di = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
649 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
650
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
651 gtk_tree_model_get_iter(store, &iter, tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
652 gtk_tree_model_get(store, &iter, DUPE_COLUMN_POINTER, &di, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
653 if (di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
654 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
655 list = g_list_prepend(list, g_strdup(di->path));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
656 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
657 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
658 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
659 g_list_foreach(slist, (GFunc)gtk_tree_path_free, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
660 g_list_free(slist);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
661
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
662 return g_list_reverse(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
663 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
664
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
665 static gint dupe_listview_item_is_selected(DupeWindow *dw, DupeItem *di, GtkWidget *listview)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
666 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
667 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
668 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
669 GList *slist;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
670 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
671 gint found = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
672
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
673 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
674 slist = gtk_tree_selection_get_selected_rows(selection, &store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
675 work = slist;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
676 while (!found && work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
677 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
678 GtkTreePath *tpath = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
679 DupeItem *di_n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
680 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
681
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
682 gtk_tree_model_get_iter(store, &iter, tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
683 gtk_tree_model_get(store, &iter, DUPE_COLUMN_POINTER, &di_n, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
684 if (di_n == di) found = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
685 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
686 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
687 g_list_foreach(slist, (GFunc)gtk_tree_path_free, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
688 g_list_free(slist);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
689
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
690 return found;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
691 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
692
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
693 static void dupe_listview_select_dupes(DupeWindow *dw, gint parents)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
694 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
695 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
696 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
697 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
698 gint valid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
699
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
700 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
701 gtk_tree_selection_unselect_all(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
702
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
703 store = gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
704 valid = gtk_tree_model_get_iter_first(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
705 while (valid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
706 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
707 DupeItem *di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
708
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
709 gtk_tree_model_get(store, &iter, DUPE_COLUMN_POINTER, &di, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
710 if ( (dupe_match_find_parent(dw, di) == di) == (parents) )
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
711 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
712 gtk_tree_selection_select_iter(selection, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
713 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
714 valid = gtk_tree_model_iter_next(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
715 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
716 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
717
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
718 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
719 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
720 * Match group manipulation
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
721 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
722 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
723
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
724 static DupeMatch *dupe_match_find_match(DupeItem *child, DupeItem *parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
725 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
726 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
727
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
728 work = parent->group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
729 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
730 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
731 DupeMatch *dm = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
732 if (dm->di == child) return dm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
733 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
734 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
735 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
736 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
737
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
738 static void dupe_match_link_child(DupeItem *child, DupeItem *parent, gdouble rank)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
739 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
740 DupeMatch *dm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
741
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
742 dm = g_new0(DupeMatch, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
743 dm->di = child;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
744 dm->rank = rank;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
745 parent->group = g_list_append(parent->group, dm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
746 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
747
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
748 static void dupe_match_link(DupeItem *a, DupeItem *b, gdouble rank)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
749 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
750 dupe_match_link_child(a, b, rank);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
751 dupe_match_link_child(b, a, rank);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
752 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
753
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
754 static void dupe_match_unlink_child(DupeItem *child, DupeItem *parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
755 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
756 DupeMatch *dm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
757
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
758 dm = dupe_match_find_match(child, parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
759 if (dm)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
760 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
761 parent->group = g_list_remove(parent->group, dm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
762 g_free(dm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
763 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
764 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
765
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
766 static void dupe_match_unlink(DupeItem *a, DupeItem *b)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
767 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
768 dupe_match_unlink_child(a, b);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
769 dupe_match_unlink_child(b, a);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
770 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
771
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
772 static void dupe_match_link_clear(DupeItem *parent, gint unlink_children)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
773 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
774 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
775
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
776 work = parent->group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
777 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
778 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
779 DupeMatch *dm = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
780 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
781
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
782 if (unlink_children) dupe_match_unlink_child(parent, dm->di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
783
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
784 g_free(dm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
785 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
786
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
787 g_list_free(parent->group);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
788 parent->group = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
789 parent->group_rank = 0.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
790 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
791
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
792 static gint dupe_match_link_exists(DupeItem *child, DupeItem *parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
793 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
794 return (dupe_match_find_match(child, parent) != NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
795 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
796
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
797 static gdouble dupe_match_link_rank(DupeItem *child, DupeItem *parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
798 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
799 DupeMatch *dm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
800
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
801 dm = dupe_match_find_match(child, parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
802 if (dm) return dm->rank;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
803
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
804 return 0.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
805 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
806
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
807 static DupeItem *dupe_match_highest_rank(DupeItem *child)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
808 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
809 DupeMatch *dr;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
810 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
811
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
812 dr = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
813 work = child->group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
814 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
815 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
816 DupeMatch *dm = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
817 if (!dr || dm->rank > dr->rank) dr = dm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
818 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
819 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
820
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
821 return (dr) ? dr->di : NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
822 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
823
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
824 static void dupe_match_rank_update(DupeItem *parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
825 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
826 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
827 gdouble rank = 0.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
828 gint c = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
829
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
830 work = parent->group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
831 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
832 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
833 DupeMatch *dm = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
834 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
835 rank += dm->rank;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
836 c++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
837 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
838
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
839 if (c > 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
840 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
841 parent->group_rank = rank / c;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
842 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
843 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
844 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
845 parent->group_rank = 0.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
846 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
847 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
848
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
849 static DupeItem *dupe_match_find_parent(DupeWindow *dw, DupeItem *child)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
850 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
851 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
852
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
853 if (g_list_find(dw->dupes, child)) return child;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
854
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
855 work = child->group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
856 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
857 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
858 DupeMatch *dm = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
859 if (g_list_find(dw->dupes, dm->di)) return dm->di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
860 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
861 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
862
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
863 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
864 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
865
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
866 static void dupe_match_reset_list(GList *work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
867 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
868 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
869 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
870 DupeItem *di = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
871 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
872
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
873 dupe_match_link_clear(di, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
874 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
875 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
876
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
877 static void dupe_match_reparent(DupeWindow *dw, DupeItem *old, DupeItem *new)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
878 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
879 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
880
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
881 if (!old || !new || !dupe_match_link_exists(old, new)) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
882
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
883 dupe_match_link_clear(new, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
884 work = old->group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
885 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
886 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
887 DupeMatch *dm = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
888 dupe_match_unlink_child(old, dm->di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
889 dupe_match_link_child(new, dm->di, dm->rank);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
890 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
891 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
892
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
893 new->group = old->group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
894 old->group = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
895
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
896 work = g_list_find(dw->dupes, old);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
897 if (work) work->data = new;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
898 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
899
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
900 static void dupe_match_print_group(DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
901 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
902 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
903
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
904 printf("+ %f %s\n", di->group_rank, di->name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
905
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
906 work = di->group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
907 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
908 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
909 DupeMatch *dm = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
910 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
911
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
912 printf(" %f %s\n", dm->rank, dm->di->name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
913 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
914
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
915 printf("\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
916 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
917
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
918 static void dupe_match_print_list(GList *list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
919 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
920 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
921
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
922 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
923 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
924 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
925 DupeItem *di = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
926 dupe_match_print_group(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
927 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
928 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
929 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
930
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
931 /* level 3, unlinking and orphan handling */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
932 static GList *dupe_match_unlink_by_rank(DupeItem *child, DupeItem *parent, GList *list, DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
933 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
934 DupeItem *best;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
935
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
936 best = dupe_match_highest_rank(parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
937 if (best == child || dupe_match_highest_rank(child) == parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
938 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
939 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
940 gdouble rank;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
941
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
942 if (debug > 1) printf("link found %s to %s [%d]\n", child->name, parent->name, g_list_length(parent->group));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
943
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
944 work = parent->group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
945 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
946 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
947 DupeMatch *dm = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
948 DupeItem *orphan;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
949
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
950 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
951 orphan = dm->di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
952 if (orphan != child && g_list_length(orphan->group) < 2)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
953 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
954 dupe_match_link_clear(orphan, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
955 if (!dw->second_set || orphan->second)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
956 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
957 dupe_match(orphan, child, dw->match_mask, &rank, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
958 dupe_match_link(orphan, child, rank);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
959 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
960 list = g_list_remove(list, orphan);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
961 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
962 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
963
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
964 rank = dupe_match_link_rank(child, parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
965 dupe_match_link_clear(parent, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
966 dupe_match_link(child, parent, rank);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
967 list = g_list_remove(list, parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
968 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
969 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
970 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
971 if (debug > 1) printf("unlinking %s and %s\n", child->name, parent->name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
972
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
973 dupe_match_unlink(child, parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
974 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
975
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
976 return list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
977 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
978
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
979 /* level 2 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
980 static GList *dupe_match_group_filter(GList *list, DupeItem *di, DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
981 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
982 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
983
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
984 work = g_list_last(di->group);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
985 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
986 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
987 DupeMatch *dm = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
988 work = work->prev;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
989 list = dupe_match_unlink_by_rank(di, dm->di, list, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
990 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
991
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
992 return list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
993 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
994
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
995 /* level 1 (top) */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
996 static GList *dupe_match_group_trim(GList *list, DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
997 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
998 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
999
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1000 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1001 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1002 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1003 DupeItem *di = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1004 if (!di->second) list = dupe_match_group_filter(list, di, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1005 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1006 if (di->second) list = g_list_remove(list, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1007 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1008
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1009 return list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1010 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1011
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1012 static gint dupe_match_sort_groups_cb(gconstpointer a, gconstpointer b)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1013 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1014 DupeMatch *da = (DupeMatch *)a;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1015 DupeMatch *db = (DupeMatch *)b;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1016
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1017 if (da->rank > db->rank) return -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1018 if (da->rank < db->rank) return 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1019 return 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1020 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1021
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1022 static void dupe_match_sort_groups(GList *list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1023 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1024 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1025
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1026 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1027 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1028 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1029 DupeItem *di = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1030 di->group = g_list_sort(di->group, dupe_match_sort_groups_cb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1031 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1032 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1033 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1034
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1035 static gint dupe_match_rank_sort_cb(gconstpointer a, gconstpointer b)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1036 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1037 DupeItem *da = (DupeItem *)a;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1038 DupeItem *db = (DupeItem *)b;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1039
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1040 if (da->group_rank > db->group_rank) return -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1041 if (da->group_rank < db->group_rank) return 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1042 return 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1043 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1044
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1045 /* returns allocated GList of dupes sorted by rank */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1046 static GList *dupe_match_rank_sort(GList *source_list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1047 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1048 GList *list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1049 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1050
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1051 work = source_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1052 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1053 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1054 DupeItem *di = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1055
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1056 if (di->group)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1057 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1058 dupe_match_rank_update(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1059 list = g_list_prepend(list, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1060 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1061
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1062 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1063 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1064
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1065 return g_list_sort(list, dupe_match_rank_sort_cb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1066 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1067
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1068 static void dupe_match_rank(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1069 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1070 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1071
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1072 list = dupe_match_rank_sort(dw->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1073
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1074 if (debug > 1) dupe_match_print_list(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1075
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1076 if (debug) printf("Similar items: %d\n", g_list_length(list));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1077 list = dupe_match_group_trim(list, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1078 if (debug) printf("Unique groups: %d\n", g_list_length(list));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1079
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1080 dupe_match_sort_groups(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1081
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1082 if (debug) dupe_match_print_list(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1083
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1084 list = dupe_match_rank_sort(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1085
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1086 g_list_free(dw->dupes);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1087 dw->dupes = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1088 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1089
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1090 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1091 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1092 * Match group tests
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1093 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1094 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1095
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1096 static gint dupe_match(DupeItem *a, DupeItem *b, DupeMatchType mask, gdouble *rank, gint fast)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1097 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1098 *rank = 0.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1099
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1100 if (a == b) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1101
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1102 if (mask & DUPE_MATCH_PATH)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1103 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1104 if (strcmp(a->path, b->path) != 0) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1105 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1106 if (mask & DUPE_MATCH_NAME)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1107 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1108 if (strcmp(a->name, b->name) != 0) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1109 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1110 if (mask & DUPE_MATCH_SIZE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1111 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1112 if (a->size != b->size) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1113 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1114 if (mask & DUPE_MATCH_DATE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1115 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1116 if (a->date != b->date) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1117 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1118 if (mask & DUPE_MATCH_SUM)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1119 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1120 if (!a->md5sum) a->md5sum = md5_text_from_file_utf8(a->path, "");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1121 if (!b->md5sum) b->md5sum = md5_text_from_file_utf8(b->path, "");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1122 if (a->md5sum[0] == '\0' ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1123 b->md5sum[0] == '\0' ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1124 strcmp(a->md5sum, b->md5sum) != 0) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1125 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1126 if (mask & DUPE_MATCH_DIM)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1127 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1128 if (a->width == 0) image_load_dimensions(a->path, &a->width, &a->height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1129 if (b->width == 0) image_load_dimensions(b->path, &b->width, &b->height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1130 if (a->width != b->width || a->height != b->height) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1131 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1132 if (mask & DUPE_MATCH_SIM_HIGH ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1133 mask & DUPE_MATCH_SIM_MED ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1134 mask & DUPE_MATCH_SIM_LOW ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1135 mask & DUPE_MATCH_SIM_CUSTOM)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1136 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1137 gdouble f;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1138 gdouble m;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1139
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1140 if (mask & DUPE_MATCH_SIM_HIGH) m = 0.95;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1141 else if (mask & DUPE_MATCH_SIM_MED) m = 0.90;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1142 else if (mask & DUPE_MATCH_SIM_CUSTOM) m = (gdouble)dupe_custom_threshold / 100.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1143 else m = 0.85;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1144
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1145 if (fast)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1146 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1147 f = image_sim_compare_fast(a->simd, b->simd, m);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1148 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1149 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1150 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1151 f = image_sim_compare(a->simd, b->simd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1152 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1153
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1154 *rank = f * 100.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1155
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1156 if (f < m) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1157
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1158 if (debug > 2) printf("similar: %32s %32s = %f\n", a->name, b->name, f);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1159 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1160
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1161 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1162 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1163
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1164 static void dupe_list_check_match(DupeWindow *dw, DupeItem *needle, GList *start)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1165 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1166 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1167
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1168 if (dw->second_set)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1169 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1170 work = dw->second_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1171 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1172 else if (start)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1173 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1174 work = start;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1175 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1176 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1177 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1178 work = g_list_last(dw->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1179 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1180
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1181 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1182 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1183 DupeItem *di = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1184
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1185 /* speed opt: forward for second set, back for simple compare */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1186 if (dw->second_set)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1187 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1188 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1189 work = work->prev;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1190
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1191 if (!dupe_match_link_exists(needle, di))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1192 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1193 gdouble rank;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1194
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1195 if (dupe_match(di, needle, dw->match_mask, &rank, TRUE))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1196 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1197 dupe_match_link(di, needle, rank);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1198 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1199 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1200 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1201 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1202
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1203 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1204 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1205 * Thumbnail handling
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1206 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1207 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1208
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1209 static void dupe_listview_set_thumb(DupeWindow *dw, DupeItem *di, GtkTreeIter *iter)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1210 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1211 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1212 GtkTreeIter iter_n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1213
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1214 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1215 if (!iter)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1216 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1217 if (dupe_listview_find_item(store, di, &iter_n) >= 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1218 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1219 iter = &iter_n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1220 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1221 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1222
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1223 if (iter) gtk_list_store_set(store, iter, DUPE_COLUMN_THUMB, di->pixbuf, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1224 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1225
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1226 static void dupe_thumb_do(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1227 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1228 DupeItem *di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1229
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1230 if (!dw->thumb_loader || !dw->thumb_item) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1231 di = dw->thumb_item;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1232
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1233 if (di->pixbuf) g_object_unref(di->pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1234 di->pixbuf = thumb_loader_get_pixbuf(dw->thumb_loader, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1235
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1236 dupe_listview_set_thumb(dw, di, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1237 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1238
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1239 static void dupe_thumb_error_cb(ThumbLoader *tl, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1240 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1241 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1242
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1243 dupe_thumb_do(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1244 dupe_thumb_step(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1245 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1246
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1247 static void dupe_thumb_done_cb(ThumbLoader *tl, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1248 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1249 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1250
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1251 dupe_thumb_do(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1252 dupe_thumb_step(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1253 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1254
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1255 static void dupe_thumb_step(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1256 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1257 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1258 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1259 DupeItem *di = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1260 gint valid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1261 gint row = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1262 gint length = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1263
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1264 store = gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1265 valid = gtk_tree_model_get_iter_first(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1266
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1267 while (!di && valid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1268 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1269 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1270
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1271 length++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1272 gtk_tree_model_get(store, &iter, DUPE_COLUMN_POINTER, &di, DUPE_COLUMN_THUMB, &pixbuf, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1273 if (pixbuf || di->pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1274 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1275 if (!pixbuf) gtk_list_store_set(GTK_LIST_STORE(store), &iter, DUPE_COLUMN_THUMB, di->pixbuf, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1276 row++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1277 di = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1278 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1279 valid = gtk_tree_model_iter_next(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1280 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1281 if (valid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1282 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1283 while (gtk_tree_model_iter_next(store, &iter)) length++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1284 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1285
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1286 if (!di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1287 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1288 dw->thumb_item = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1289 thumb_loader_free(dw->thumb_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1290 dw->thumb_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1291
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1292 dupe_window_update_progress(dw, NULL, 0.0, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1293 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1294 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1295
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1296 dupe_window_update_progress(dw, _("Loading thumbs..."),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1297 length == 0 ? 0.0 : (gdouble)(row) / length, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1298
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1299 dw->thumb_item = di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1300 thumb_loader_free(dw->thumb_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1301 dw->thumb_loader = thumb_loader_new(thumb_max_width, thumb_max_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1302
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1303 thumb_loader_set_callbacks(dw->thumb_loader,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1304 dupe_thumb_done_cb,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1305 dupe_thumb_error_cb,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1306 NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1307 dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1308
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1309 /* start it */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1310 if (!thumb_loader_start(dw->thumb_loader, di->path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1311 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1312 /* error, handle it, do next */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1313 if (debug) printf("error loading thumb for %s\n", di->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1314 dupe_thumb_do(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1315 dupe_thumb_step(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1316 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1317 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1318
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1319 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1320 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1321 * Dupe checking loop
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1322 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1323 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1324
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1325 static void dupe_check_stop(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1326 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1327 if (dw->idle_id != -1 || dw->img_loader || dw->thumb_loader)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1328 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1329 g_source_remove(dw->idle_id);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1330 dw->idle_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1331 dupe_window_update_progress(dw, NULL, 0.0, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1332 widget_set_cursor(dw->listview, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1333 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1334
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1335 thumb_loader_free(dw->thumb_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1336 dw->thumb_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1337
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1338 image_loader_free(dw->img_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1339 dw->img_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1340 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1341
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1342 static void dupe_loader_done_cb(ImageLoader *il, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1343 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1344 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1345 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1346
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1347 pixbuf = image_loader_get_pixbuf(il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1348
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1349 if (dw->setup_point)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1350 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1351 DupeItem *di = dw->setup_point->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1352
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1353 if (!di->simd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1354 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1355 di->simd = image_sim_new_from_pixbuf(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1356 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1357 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1358 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1359 image_sim_fill_data(di->simd, pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1360 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1361
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1362 if (di->width == 0 && di->height == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1363 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1364 di->width = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1365 di->height = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1366 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1367 if (enable_thumb_caching)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1368 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1369 dupe_item_write_cache(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1370 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1371
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1372 image_sim_alternate_processing(di->simd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1373 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1374
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1375 image_loader_free(dw->img_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1376 dw->img_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1377
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1378 dw->idle_id = g_idle_add(dupe_check_cb, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1379 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1380
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1381 static void dupe_setup_reset(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1382 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1383 dw->setup_point = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1384 dw->setup_n = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1385 dw->setup_time = msec_time();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1386 dw->setup_time_count = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1387 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1388
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1389 static GList *dupe_setup_point_step(DupeWindow *dw, GList *p)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1390 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1391 if (!p) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1392
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1393 if (p->next) return p->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1394
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1395 if (dw->second_set && g_list_first(p) == dw->list) return dw->second_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1396
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1397 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1398 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1399
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1400 static gint dupe_check_cb(gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1401 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1402 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1403
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1404 if (dw->idle_id == -1) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1405
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1406 if (!dw->setup_done)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1407 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1408 if ((dw->match_mask & DUPE_MATCH_SUM) &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1409 !(dw->setup_mask & DUPE_MATCH_SUM) )
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1410 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1411 if (!dw->setup_point) dw->setup_point = dw->list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1412
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1413 while (dw->setup_point)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1414 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1415 DupeItem *di = dw->setup_point->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1416
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1417 dw->setup_point = dupe_setup_point_step(dw, dw->setup_point);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1418 dw->setup_n++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1419
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1420 if (!di->md5sum)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1421 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1422 dupe_window_update_progress(dw, _("Reading checksums..."),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1423 dw->setup_count == 0 ? 0.0 : (gdouble)(dw->setup_n - 1) / dw->setup_count, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1424
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1425 if (enable_thumb_caching)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1426 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1427 dupe_item_read_cache(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1428 if (di->md5sum) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1429 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1430
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1431 di->md5sum = md5_text_from_file_utf8(di->path, "");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1432 if (enable_thumb_caching)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1433 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1434 dupe_item_write_cache(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1435 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1436 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1437 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1438 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1439 dw->setup_mask |= DUPE_MATCH_SUM;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1440 dupe_setup_reset(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1441 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1442 if ((dw->match_mask & DUPE_MATCH_DIM) &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1443 !(dw->setup_mask & DUPE_MATCH_DIM) )
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1444 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1445 if (!dw->setup_point) dw->setup_point = dw->list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1446
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1447 while (dw->setup_point)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1448 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1449 DupeItem *di = dw->setup_point->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1450
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1451 dw->setup_point = dupe_setup_point_step(dw, dw->setup_point);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1452 dw->setup_n++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1453 if (di->width == 0 && di->height == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1454 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1455 dupe_window_update_progress(dw, _("Reading dimensions..."),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1456 dw->setup_count == 0 ? 0.0 : (gdouble)(dw->setup_n - 1) / dw->setup_count, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1457
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1458 if (enable_thumb_caching)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1459 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1460 dupe_item_read_cache(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1461 if (di->width != 0 || di->height != 0) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1462 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1463
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1464 image_load_dimensions(di->path, &di->width, &di->height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1465 if (enable_thumb_caching)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1466 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1467 dupe_item_write_cache(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1468 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1469 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1470 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1471 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1472 dw->setup_mask |= DUPE_MATCH_DIM;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1473 dupe_setup_reset(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1474 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1475 if ((dw->match_mask & DUPE_MATCH_SIM_HIGH ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1476 dw->match_mask & DUPE_MATCH_SIM_MED ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1477 dw->match_mask & DUPE_MATCH_SIM_LOW ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1478 dw->match_mask & DUPE_MATCH_SIM_CUSTOM) &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1479 !(dw->setup_mask & DUPE_MATCH_SIM_MED) )
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1480 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1481 if (!dw->setup_point) dw->setup_point = dw->list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1482
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1483 while (dw->setup_point)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1484 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1485 DupeItem *di = dw->setup_point->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1486
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1487 if (!di->simd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1488 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1489 dupe_window_update_progress(dw, _("Reading similarity data..."),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1490 dw->setup_count == 0 ? 0.0 : (gdouble)dw->setup_n / dw->setup_count, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1491
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1492 if (enable_thumb_caching)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1493 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1494 dupe_item_read_cache(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1495 if (cache_sim_data_filled(di->simd))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1496 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1497 image_sim_alternate_processing(di->simd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1498 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1499 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1500 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1501
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1502 dw->img_loader = image_loader_new(di->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1503 image_loader_set_buffer_size(dw->img_loader, 8);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1504 image_loader_set_error_func(dw->img_loader, dupe_loader_done_cb, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1505
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1506 if (!image_loader_start(dw->img_loader, dupe_loader_done_cb, dw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1507 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1508 image_sim_free(di->simd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1509 di->simd = image_sim_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1510 image_loader_free(dw->img_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1511 dw->img_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1512 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1513 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1514 dw->idle_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1515 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1516 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1517
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1518 dw->setup_point = dupe_setup_point_step(dw, dw->setup_point);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1519 dw->setup_n++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1520 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1521 dw->setup_mask |= DUPE_MATCH_SIM_MED;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1522 dupe_setup_reset(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1523 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1524 dupe_window_update_progress(dw, _("Comparing..."), 0.0, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1525 dw->setup_done = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1526 dupe_setup_reset(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1527 dw->setup_count = g_list_length(dw->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1528 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1529
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1530 if (!dw->working)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1531 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1532 if (dw->setup_count > 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1533 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1534 dw->setup_count = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1535 dupe_window_update_progress(dw, _("Sorting..."), 1.0, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1536 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1537 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1538 dw->idle_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1539 dupe_window_update_progress(dw, NULL, 0.0, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1540
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1541 dupe_match_rank(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1542 dupe_window_update_count(dw, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1543
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1544 dupe_listview_populate(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1545
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1546 /* check thumbs */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1547 if (dw->show_thumbs) dupe_thumb_step(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1548
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1549 widget_set_cursor(dw->listview, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1550
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1551 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1552 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1553
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1554 dupe_list_check_match(dw, (DupeItem *)dw->working->data, dw->working);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1555 dupe_window_update_progress(dw, _("Comparing..."), dw->setup_count == 0 ? 0.0 : (gdouble) dw->setup_n / dw->setup_count, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1556 dw->setup_n++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1557
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1558 dw->working = dw->working->prev;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1559
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1560 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1561 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1562
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1563 static void dupe_check_start(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1564 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1565 dw->setup_done = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1566
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1567 dw->setup_count = g_list_length(dw->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1568 if (dw->second_set) dw->setup_count += g_list_length(dw->second_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1569
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1570 dw->setup_mask = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1571 dupe_setup_reset(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1572
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1573 dw->working = g_list_last(dw->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1574
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1575 dupe_window_update_count(dw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1576 widget_set_cursor(dw->listview, GDK_WATCH);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1577
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1578 if (dw->idle_id != -1) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1579
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1580 dw->idle_id = g_idle_add(dupe_check_cb, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1581 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1582
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1583 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1584 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1585 * Item addition, removal
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1586 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1587 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1588
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1589 static void dupe_item_remove(DupeWindow *dw, DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1590 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1591 if (!di) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1592
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1593 /* handle things that may be in progress... */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1594 if (dw->working && dw->working->data == di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1595 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1596 dw->working = dw->working->prev;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1597 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1598 if (dw->thumb_loader && dw->thumb_item == di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1599 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1600 dupe_thumb_step(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1601 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1602 if (dw->setup_point && dw->setup_point->data == di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1603 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1604 dw->setup_point = dupe_setup_point_step(dw, dw->setup_point);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1605 if (dw->img_loader)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1606 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1607 image_loader_free(dw->img_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1608 dw->img_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1609 dw->idle_id = g_idle_add(dupe_check_cb, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1610 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1611 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1612
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1613 if (di->group && dw->dupes)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1614 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1615 /* is a dupe, must remove from group/reset children if a parent */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1616 DupeItem *parent;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1617
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1618 parent = dupe_match_find_parent(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1619 if (di == parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1620 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1621 if (g_list_length(parent->group) < 2)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1622 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1623 DupeItem *child;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1624
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1625 child = dupe_match_highest_rank(parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1626 dupe_match_link_clear(child, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1627 dupe_listview_remove(dw, child);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1628
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1629 dupe_match_link_clear(parent, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1630 dupe_listview_remove(dw, parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1631 dw->dupes = g_list_remove(dw->dupes, parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1632 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1633 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1634 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1635 DupeItem *new_parent;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1636 DupeMatch *dm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1637
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1638 dm = parent->group->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1639 new_parent = dm->di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1640 dupe_match_reparent(dw, parent, new_parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1641 dupe_listview_remove(dw, parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1642 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1643 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1644 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1645 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1646 if (g_list_length(parent->group) < 2)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1647 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1648 dupe_match_link_clear(parent, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1649 dupe_listview_remove(dw, parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1650 dw->dupes = g_list_remove(dw->dupes, parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1651 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1652 dupe_match_link_clear(di, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1653 dupe_listview_remove(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1654 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1655 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1656 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1657 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1658 /* not a dupe, or not sorted yet, simply reset */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1659 dupe_match_link_clear(di, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1660 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1661
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1662 if (dw->second_list && g_list_find(dw->second_list, di))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1663 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1664 dupe_second_remove(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1665 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1666 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1667 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1668 dw->list = g_list_remove(dw->list, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1669 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1670 dupe_item_free(di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1671
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1672 dupe_window_update_count(dw, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1673 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1674
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1675 static gint dupe_item_remove_by_path(DupeWindow *dw, const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1676 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1677 DupeItem *di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1678
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1679 di = dupe_item_find_path(dw, path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1680 if (!di) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1681
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1682 dupe_item_remove(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1683
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1684 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1685 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1686
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1687 static void dupe_files_add(DupeWindow *dw, CollectionData *collection, CollectInfo *info,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1688 const gchar *path, gint recurse)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1689 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1690 DupeItem *di = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1691
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1692 if (info)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1693 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1694 di = dupe_item_new(info->path, info->size, info->date);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1695 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1696 else if (path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1697 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1698 if (isfile(path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1699 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1700 di = dupe_item_new(path, filesize(path), filetime(path));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1701 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1702 else if (isdir(path) && recurse)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1703 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1704 GList *f, *d;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1705 if (path_list(path, &f, &d))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1706 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1707 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1708
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1709 f = path_list_filter(f, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1710 d = path_list_filter(d, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1711
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1712 work = f;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1713 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1714 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1715 dupe_files_add(dw, NULL, NULL, (gchar *)work->data, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1716 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1717 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1718 path_list_free(f);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1719 work = d;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1720 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1721 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1722 dupe_files_add(dw, NULL, NULL, (gchar *)work->data, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1723 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1724 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1725 path_list_free(d);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1726 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1727 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1728 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1729
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1730 if (!di) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1731
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1732 if (dw->second_drop)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1733 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1734 dupe_second_add(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1735 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1736 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1737 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1738 dw->list = g_list_prepend(dw->list, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1739 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1740 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1741
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1742 void dupe_window_add_collection(DupeWindow *dw, CollectionData *collection)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1743 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1744 CollectInfo *info;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1745
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1746 info = collection_get_first(collection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1747 while(info)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1748 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1749 dupe_files_add(dw, collection, info, NULL, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1750 info = collection_next_by_info(collection, info);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1751 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1752
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1753 dupe_check_start(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1754 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1755
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1756 void dupe_window_add_files(DupeWindow *dw, GList *list, gint recurse)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1757 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1758 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1759
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1760 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1761 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1762 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1763 gchar *path = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1764 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1765
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1766 dupe_files_add(dw, NULL, NULL, path, recurse);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1767 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1768
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1769 dupe_check_start(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1770 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1771
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1772 static gint dupe_item_set_path(DupeWindow *dw, const gchar *source, const gchar *dest)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1773 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1774 DupeItem *di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1775
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1776 di = dupe_item_find_path(dw, source);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1777 if (!di) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1778
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1779 if ( (dw->match_mask & DUPE_MATCH_NAME) || (dw->match_mask & DUPE_MATCH_PATH) )
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1780 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1781 /* only effects matches on name or path */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1782 gint second;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1783
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1784 second = di->second;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1785 dupe_item_remove(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1786
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1787 dw->second_drop = second;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1788 dupe_files_add(dw, NULL, NULL, dest, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1789 dw->second_drop = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1790
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1791 dupe_check_start(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1792 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1793 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1794 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1795 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1796 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1797 gint row;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1798
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1799 g_free(di->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1800 di->path = g_strdup(dest);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1801 di->name = filename_from_path(di->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1802
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1803 /* update the listview(s) */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1804
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1805 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1806 row = dupe_listview_find_item(store, di, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1807 if (row >= 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1808 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1809 gtk_list_store_set(store, &iter,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1810 DUPE_COLUMN_NAME, di->name,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1811 DUPE_COLUMN_PATH, di->path, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1812 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1813
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1814 if (dw->second_listview)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1815 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1816 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->second_listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1817 row = dupe_listview_find_item(store, di, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1818 if (row >= 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1819 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1820 gtk_list_store_set(store, &iter, 1, di->path, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1821 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1822 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1823 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1824
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1825 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1826 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1827
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1828 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1829 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1830 * Misc.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1831 * ------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1832 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1833
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1834 static GtkWidget *dupe_display_label(GtkWidget *vbox, const gchar *description, const gchar *text)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1835 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1836 GtkWidget *hbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1837 GtkWidget *label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1838
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1839 hbox = gtk_hbox_new(FALSE, 10);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1840
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1841 label = gtk_label_new(description);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1842 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1843 gtk_widget_show(label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1844
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1845 label = gtk_label_new(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1846 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1847 gtk_widget_show(label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1848
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1849 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1850 gtk_widget_show(hbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1851
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1852 return label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1853 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1854
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1855 static void dupe_display_stats(DupeWindow *dw, DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1856 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1857 GenericDialog *gd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1858 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1859
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1860 if (!di) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1861
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1862 gd = file_util_gen_dlg("Image thumbprint debug info", "GQview", "thumbprint",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1863 dw->window, TRUE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1864 NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1865 generic_dialog_add_button(gd, GTK_STOCK_CLOSE, NULL, NULL, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1866
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1867 dupe_display_label(gd->vbox, "name:", di->name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1868 buf = text_from_size(di->size);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1869 dupe_display_label(gd->vbox, "size:", buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1870 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1871 dupe_display_label(gd->vbox, "date:", text_from_time(di->date));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1872 buf = g_strdup_printf("%d x %d", di->width, di->height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1873 dupe_display_label(gd->vbox, "dimensions:", buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1874 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1875 dupe_display_label(gd->vbox, "md5sum:", (di->md5sum) ? di->md5sum : "not generated");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1876
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1877 dupe_display_label(gd->vbox, "thumbprint:", (di->simd) ? "" : "not generated");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1878 if (di->simd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1879 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1880 GtkWidget *image;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1881 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1882 gint x, y;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1883 guchar *d_pix;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1884 guchar *dp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1885 gint rs;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1886 gint sp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1887
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1888 pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, 32, 32);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1889 rs = gdk_pixbuf_get_rowstride(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1890 d_pix = gdk_pixbuf_get_pixels(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1891
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1892 for (y = 0; y < 32; y++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1893 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1894 dp = d_pix + (y * rs);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1895 sp = y * 32;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1896 for (x = 0; x < 32; x++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1897 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1898 *(dp++) = di->simd->avg_r[sp + x];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1899 *(dp++) = di->simd->avg_g[sp + x];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1900 *(dp++) = di->simd->avg_b[sp + x];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1901 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1902 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1903
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1904 image = gtk_image_new_from_pixbuf(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1905 gtk_box_pack_start(GTK_BOX(gd->vbox), image, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1906 gtk_widget_show(image);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1907
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1908 gdk_pixbuf_unref(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1909 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1910
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1911 gtk_widget_show(gd->dialog);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1912 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1913
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1914 static void dupe_window_recompare(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1915 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1916 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1917
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1918 dupe_check_stop(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1919
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1920 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1921 gtk_list_store_clear(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1922
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1923 g_list_free(dw->dupes);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1924 dw->dupes = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1925
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1926 dupe_match_reset_list(dw->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1927 dupe_match_reset_list(dw->second_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1928
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1929 dupe_check_start(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1930 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1931
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1932 static void dupe_menu_view(DupeWindow *dw, DupeItem *di, GtkWidget *listview, gint new_window)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1933 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1934 if (!di) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1935
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1936 if (di->collection && collection_info_valid(di->collection, di->info))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1937 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1938 if (new_window)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1939 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1940 view_window_new_from_collection(di->collection, di->info);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1941 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1942 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1943 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1944 layout_image_set_collection(NULL, di->collection, di->info);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1945 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1946 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1947 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1948 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1949 if (new_window)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1950 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1951 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1952
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1953 list = dupe_listview_get_selection(dw, listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1954 view_window_new_from_list(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1955 path_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1956 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1957 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1958 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1959 layout_image_set_path(NULL, di->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1960 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1961 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1962 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1963
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1964 static void dupe_window_remove_selection(DupeWindow *dw, GtkWidget *listview)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1965 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1966 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1967 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1968 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1969 GList *slist;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1970 GList *list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1971 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1972
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1973 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1974 slist = gtk_tree_selection_get_selected_rows(selection, &store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1975 work = slist;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1976 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1977 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1978 GtkTreePath *tpath = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1979 DupeItem *di = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1980
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1981 gtk_tree_model_get_iter(store, &iter, tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1982 gtk_tree_model_get(store, &iter, DUPE_COLUMN_POINTER, &di, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1983 if (di) list = g_list_prepend(list, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1984 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1985 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1986 g_list_foreach(slist, (GFunc)gtk_tree_path_free, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1987 g_list_free(slist);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1988
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1989 dw->color_frozen = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1990 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1991 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1992 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1993 DupeItem *di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1994
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1995 di = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1996 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1997 dupe_item_remove(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1998 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1999 dw->color_frozen = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2000
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2001 g_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2002
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2003 dupe_listview_realign_colors(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2004 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2005
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2006 static void dupe_window_edit_selected(DupeWindow *dw, gint n)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2007 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2008 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2009
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2010 list = dupe_listview_get_selection(dw, dw->listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2011
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2012 start_editor_from_path_list(n, list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2013
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2014 path_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2015 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2016
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2017 static void dupe_window_collection_from_selection(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2018 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2019 CollectWindow *w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2020 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2021
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2022 list = dupe_listview_get_selection(dw, dw->listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2023 w = collection_window_new(NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2024 collection_table_add_path_list(w->table, list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2025 path_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2026 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2027
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2028 static void dupe_window_append_file_list(DupeWindow *dw, gint on_second)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2029 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2030 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2031
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2032 dw->second_drop = (dw->second_set && on_second);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2033
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2034 list = layout_list(NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2035 dupe_window_add_files(dw, list, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2036 path_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2037 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2038
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2039 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2040 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2041 * main pop-up menu callbacks
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2042 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2043 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2044
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2045 static void dupe_menu_view_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2046 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2047 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2048
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2049 if (dw->click_item) dupe_menu_view(dw, dw->click_item, dw->listview, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2050 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2051
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2052 static void dupe_menu_viewnew_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2053 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2054 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2055
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2056 if (dw->click_item) dupe_menu_view(dw, dw->click_item, dw->listview, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2057 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2058
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2059 static void dupe_menu_select_all_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2060 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2061 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2062 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2063
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2064 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2065 gtk_tree_selection_select_all(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2066 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2067
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2068 static void dupe_menu_select_none_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2069 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2070 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2071 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2072
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2073 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2074 gtk_tree_selection_unselect_all(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2075 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2076
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2077 static void dupe_menu_select_dupes_set1_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2078 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2079 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2080
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2081 dupe_listview_select_dupes(dw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2082 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2083
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2084 static void dupe_menu_select_dupes_set2_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2085 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2086 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2087
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2088 dupe_listview_select_dupes(dw, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2089 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2090
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2091 static void dupe_menu_edit_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2092 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2093 DupeWindow *dw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2094 gint n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2095
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2096 dw = submenu_item_get_data(widget);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2097 n = GPOINTER_TO_INT(data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2098 if (!dw) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2099
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2100 dupe_window_edit_selected(dw, n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2101 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2102
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2103 static void dupe_menu_info_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2104 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2105 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2106
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2107 info_window_new(NULL, dupe_listview_get_selection(dw, dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2108 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2109
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2110 static void dupe_menu_collection_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2111 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2112 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2113
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2114 dupe_window_collection_from_selection(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2115 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2116
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2117 static void dupe_menu_print_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2118 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2119 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2120 const gchar *path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2121
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2122 path = (dw->click_item) ? dw->click_item->path : NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2123
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2124 print_window_new(path,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2125 dupe_listview_get_selection(dw, dw->listview),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2126 dupe_listview_get_path_list(dw, dw->listview), dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2127 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2128
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2129 static void dupe_menu_copy_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2130 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2131 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2132
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2133 file_util_copy(NULL, dupe_listview_get_selection(dw, dw->listview), NULL, dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2134 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2135
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2136 static void dupe_menu_move_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2137 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2138 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2139
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2140 file_util_move(NULL, dupe_listview_get_selection(dw, dw->listview), NULL, dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2141 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2142
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2143 static void dupe_menu_rename_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2144 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2145 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2146
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2147 file_util_rename(NULL, dupe_listview_get_selection(dw, dw->listview), dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2148 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2149
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2150 static void dupe_menu_delete_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2151 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2152 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2153
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2154 file_util_delete(NULL, dupe_listview_get_selection(dw, dw->listview), dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2155 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2156
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2157 static void dupe_menu_remove_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2158 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2159 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2160
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2161 dupe_window_remove_selection(dw, dw->listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2162 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2163
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2164 static void dupe_menu_clear_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2165 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2166 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2167
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2168 dupe_window_clear(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2169 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2170
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2171 static void dupe_menu_close_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2172 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2173 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2174
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2175 dupe_window_close(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2176 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2177
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2178 static GtkWidget *dupe_menu_popup_main(DupeWindow *dw, DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2179 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2180 GtkWidget *menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2181 GtkWidget *item;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2182 gint on_row;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2183
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2184 on_row = (di != NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2185
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2186 menu = popup_menu_short_lived();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2187 menu_item_add_sensitive(menu, _("_View"), on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2188 G_CALLBACK(dupe_menu_view_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2189 menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2190 G_CALLBACK(dupe_menu_viewnew_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2191 menu_item_add_divider(menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2192 menu_item_add_sensitive(menu, _("Select all"), (dw->dupes != NULL),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2193 G_CALLBACK(dupe_menu_select_all_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2194 menu_item_add_sensitive(menu, _("Select none"), (dw->dupes != NULL),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2195 G_CALLBACK(dupe_menu_select_none_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2196 menu_item_add_sensitive(menu, _("Select group _1 duplicates"), (dw->dupes != NULL),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2197 G_CALLBACK(dupe_menu_select_dupes_set1_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2198 menu_item_add_sensitive(menu, _("Select group _2 duplicates"), (dw->dupes != NULL),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2199 G_CALLBACK(dupe_menu_select_dupes_set2_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2200 menu_item_add_divider(menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2201 submenu_add_edit(menu, &item, G_CALLBACK(dupe_menu_edit_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2202 if (!on_row) gtk_widget_set_sensitive(item, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2203 menu_item_add_stock_sensitive(menu, _("_Properties"), GTK_STOCK_PROPERTIES, on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2204 G_CALLBACK(dupe_menu_info_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2205 menu_item_add_stock_sensitive(menu, _("Add to new collection"), GTK_STOCK_INDEX, on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2206 G_CALLBACK(dupe_menu_collection_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2207 menu_item_add_stock_sensitive(menu, _("Print..."), GTK_STOCK_PRINT, on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2208 G_CALLBACK(dupe_menu_print_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2209 menu_item_add_divider(menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2210 menu_item_add_stock_sensitive(menu, _("_Copy..."), GTK_STOCK_COPY, on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2211 G_CALLBACK(dupe_menu_copy_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2212 menu_item_add_sensitive(menu, _("_Move..."), on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2213 G_CALLBACK(dupe_menu_move_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2214 menu_item_add_sensitive(menu, _("_Rename..."), on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2215 G_CALLBACK(dupe_menu_rename_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2216 menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2217 G_CALLBACK(dupe_menu_delete_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2218 menu_item_add_divider(menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2219 menu_item_add_stock_sensitive(menu, _("Rem_ove"), GTK_STOCK_REMOVE, on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2220 G_CALLBACK(dupe_menu_remove_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2221 menu_item_add_stock_sensitive(menu, _("C_lear"), GTK_STOCK_CLEAR, (dw->list != NULL),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2222 G_CALLBACK(dupe_menu_clear_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2223 menu_item_add_divider(menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2224 menu_item_add_stock(menu, _("Close _window"), GTK_STOCK_CLOSE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2225 G_CALLBACK(dupe_menu_close_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2226
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2227 return menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2228 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2229
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2230 static gint dupe_listview_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2231 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2232 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2233 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2234 GtkTreePath *tpath;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2235 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2236 DupeItem *di = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2237
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2238 store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2239
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2240 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2241 &tpath, NULL, NULL, NULL))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2242 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2243 gtk_tree_model_get_iter(store, &iter, tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2244 gtk_tree_model_get(store, &iter, DUPE_COLUMN_POINTER, &di, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2245 gtk_tree_path_free(tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2246 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2247
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2248 dw->click_item = di;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2249
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2250 if (bevent->button == 3)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2251 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2252 /* right click menu */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2253 GtkWidget *menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2254
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2255 if (bevent->state & GDK_CONTROL_MASK && bevent->state & GDK_SHIFT_MASK)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2256 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2257 dupe_display_stats(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2258 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2259 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2260 if (widget == dw->listview)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2261 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2262 menu = dupe_menu_popup_main(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2263 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2264 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2265 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2266 menu = dupe_menu_popup_second(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2267 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2268 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, bevent->button, bevent->time);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2269 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2270
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2271 if (!di) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2272
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2273 if (bevent->button == 1 && bevent->type == GDK_2BUTTON_PRESS)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2274 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2275 dupe_menu_view(dw, di, widget, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2276 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2277
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2278 if (bevent->button == 2) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2279
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2280 if (bevent->button == 3)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2281 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2282 if (!dupe_listview_item_is_selected(dw, di, widget))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2283 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2284 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2285
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2286 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2287 gtk_tree_selection_unselect_all(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2288 gtk_tree_selection_select_iter(selection, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2289
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2290 tpath = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2291 gtk_tree_view_set_cursor(GTK_TREE_VIEW(widget), tpath, NULL, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2292 gtk_tree_path_free(tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2293 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2294
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2295 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2296 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2297
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2298 if (bevent->button == 1 && bevent->type == GDK_BUTTON_PRESS &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2299 !(bevent->state & GDK_SHIFT_MASK ) &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2300 !(bevent->state & GDK_CONTROL_MASK ) &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2301 dupe_listview_item_is_selected(dw, di, widget))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2302 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2303 /* this selection handled on release_cb */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2304 gtk_widget_grab_focus(widget);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2305 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2306 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2307
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2308 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2309 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2310
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2311 static gint dupe_listview_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2312 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2313 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2314 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2315 GtkTreePath *tpath;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2316 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2317 DupeItem *di = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2318
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2319 if (bevent->button != 1 && bevent->button != 2) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2320
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2321 store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2322
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2323 if ((bevent->x != 0 || bevent->y != 0) &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2324 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2325 &tpath, NULL, NULL, NULL))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2326 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2327 gtk_tree_model_get_iter(store, &iter, tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2328 gtk_tree_model_get(store, &iter, DUPE_COLUMN_POINTER, &di, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2329 gtk_tree_path_free(tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2330 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2331
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2332 if (bevent->button == 2)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2333 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2334 if (di && dw->click_item == di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2335 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2336 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2337
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2338 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2339 if (dupe_listview_item_is_selected(dw, di, widget))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2340 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2341 gtk_tree_selection_unselect_iter(selection, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2342 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2343 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2344 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2345 gtk_tree_selection_select_iter(selection, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2346 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2347 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2348 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2349 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2350
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2351 if (di && dw->click_item == di &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2352 !(bevent->state & GDK_SHIFT_MASK ) &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2353 !(bevent->state & GDK_CONTROL_MASK ) &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2354 dupe_listview_item_is_selected(dw, di, widget))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2355 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2356 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2357
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2358 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2359 gtk_tree_selection_unselect_all(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2360 gtk_tree_selection_select_iter(selection, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2361
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2362 tpath = gtk_tree_model_get_path(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2363 gtk_tree_view_set_cursor(GTK_TREE_VIEW(widget), tpath, NULL, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2364 gtk_tree_path_free(tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2365
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2366 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2367 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2368
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2369 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2370 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2371
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2372 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2373 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2374 * second set stuff
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2375 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2376 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2377
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2378 static void dupe_second_update_status(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2379 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2380 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2381
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2382 buf = g_strdup_printf(_("%d files (set 2)"), g_list_length(dw->second_list));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2383 gtk_label_set_text(GTK_LABEL(dw->second_status_label), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2384 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2385 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2386
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2387 static void dupe_second_add(DupeWindow *dw, DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2388 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2389 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2390 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2391
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2392 if (!di) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2393
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2394 di->second = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2395 dw->second_list = g_list_prepend(dw->second_list, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2396
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2397 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->second_listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2398 gtk_list_store_append(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2399 gtk_list_store_set(store, &iter, DUPE_COLUMN_POINTER, di, 1, di->path, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2400
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2401 dupe_second_update_status(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2402 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2403
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2404 static void dupe_second_remove(DupeWindow *dw, DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2405 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2406 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2407 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2408
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2409 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->second_listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2410 if (dupe_listview_find_item(store, di, &iter) >= 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2411 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2412 tree_view_move_cursor_away(GTK_TREE_VIEW(dw->second_listview), &iter, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2413 gtk_list_store_remove(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2414 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2415
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2416 dw->second_list = g_list_remove(dw->second_list, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2417
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2418 dupe_second_update_status(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2419 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2420
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2421 static void dupe_second_clear(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2422 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2423 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2424
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2425 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->second_listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2426 gtk_list_store_clear(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2427 gtk_tree_view_columns_autosize(GTK_TREE_VIEW(dw->second_listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2428
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2429 g_list_free(dw->dupes);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2430 dw->dupes = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2431
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2432 dupe_list_free(dw->second_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2433 dw->second_list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2434
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2435 dupe_match_reset_list(dw->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2436
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2437 dupe_second_update_status(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2438 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2439
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2440 static void dupe_second_menu_view_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2441 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2442 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2443
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2444 if (dw->click_item) dupe_menu_view(dw, dw->click_item, dw->second_listview, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2445 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2446
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2447 static void dupe_second_menu_viewnew_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2448 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2449 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2450
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2451 if (dw->click_item) dupe_menu_view(dw, dw->click_item, dw->second_listview, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2452 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2453
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2454 static void dupe_second_menu_select_all_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2455 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2456 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2457 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2458
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2459 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dw->second_listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2460 gtk_tree_selection_select_all(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2461 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2462
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2463 static void dupe_second_menu_select_none_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2464 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2465 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2466 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2467
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2468 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dw->second_listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2469 gtk_tree_selection_unselect_all(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2470 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2471
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2472 static void dupe_second_menu_remove_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2473 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2474 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2475
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2476 dupe_window_remove_selection(dw, dw->second_listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2477 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2478
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2479 static void dupe_second_menu_clear_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2480 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2481 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2482
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2483 dupe_second_clear(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2484 dupe_window_recompare(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2485 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2486
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2487 static GtkWidget *dupe_menu_popup_second(DupeWindow *dw, DupeItem *di)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2488 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2489 GtkWidget *menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2490 gint notempty;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2491 gint on_row;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2492
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2493 on_row = (di != NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2494 notempty = (dw->second_list != NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2495
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2496 menu = popup_menu_short_lived();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2497 menu_item_add_sensitive(menu, _("_View"), on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2498 G_CALLBACK(dupe_second_menu_view_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2499 menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2500 G_CALLBACK(dupe_second_menu_viewnew_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2501 menu_item_add_divider(menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2502 menu_item_add_sensitive(menu, _("Select all"), notempty,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2503 G_CALLBACK(dupe_second_menu_select_all_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2504 menu_item_add_sensitive(menu, _("Select none"), notempty,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2505 G_CALLBACK(dupe_second_menu_select_none_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2506 menu_item_add_divider(menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2507 menu_item_add_stock_sensitive(menu, _("Rem_ove"), GTK_STOCK_REMOVE, on_row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2508 G_CALLBACK(dupe_second_menu_remove_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2509 menu_item_add_stock_sensitive(menu, _("C_lear"), GTK_STOCK_CLEAR, notempty,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2510 G_CALLBACK(dupe_second_menu_clear_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2511 menu_item_add_divider(menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2512 menu_item_add_stock(menu, _("Close _window"), GTK_STOCK_CLOSE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2513 G_CALLBACK(dupe_menu_close_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2514
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2515 return menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2516 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2517
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2518 static void dupe_second_set_toggle_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2519 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2520 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2521
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2522 dw->second_set = GTK_TOGGLE_BUTTON(widget)->active;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2523
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2524 if (dw->second_set)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2525 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2526 dupe_second_update_status(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2527 gtk_table_set_col_spacings(GTK_TABLE(dw->table), PREF_PAD_GAP);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2528 gtk_widget_show(dw->second_vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2529 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2530 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2531 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2532 gtk_table_set_col_spacings(GTK_TABLE(dw->table), 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2533 gtk_widget_hide(dw->second_vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2534 dupe_second_clear(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2535 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2536
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2537 dupe_window_recompare(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2538 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2539
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2540 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2541 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2542 * match type menu
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2543 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2544 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2545
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2546 enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2547 DUPE_MENU_COLUMN_NAME = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2548 DUPE_MENU_COLUMN_MASK
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2549 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2550
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2551 static void dupe_menu_type_cb(GtkWidget *combo, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2552 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2553 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2554 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2555 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2556
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2557 store = gtk_combo_box_get_model(GTK_COMBO_BOX(combo));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2558 if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combo), &iter)) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2559 gtk_tree_model_get(store, &iter, DUPE_MENU_COLUMN_MASK, &dw->match_mask, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2560
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2561 dupe_window_recompare(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2562 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2563
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2564 static void dupe_menu_add_item(GtkListStore *store, const gchar *text, DupeMatchType type, DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2565 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2566 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2567
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2568 gtk_list_store_append(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2569 gtk_list_store_set(store, &iter, DUPE_MENU_COLUMN_NAME, text,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2570 DUPE_MENU_COLUMN_MASK, type, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2571
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2572 if (dw->match_mask == type) gtk_combo_box_set_active_iter(GTK_COMBO_BOX(dw->combo), &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2573 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2574
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2575 static void dupe_menu_setup(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2576 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2577 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2578 GtkCellRenderer *renderer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2579
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2580 store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2581 dw->combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2582 g_object_unref(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2583
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2584 renderer = gtk_cell_renderer_text_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2585 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dw->combo), renderer, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2586 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(dw->combo), renderer,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2587 "text", DUPE_MENU_COLUMN_NAME, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2588
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2589 dupe_menu_add_item(store, _("Name"), DUPE_MATCH_NAME, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2590 dupe_menu_add_item(store, _("Size"), DUPE_MATCH_SIZE, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2591 dupe_menu_add_item(store, _("Date"), DUPE_MATCH_DATE, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2592 dupe_menu_add_item(store, _("Dimensions"), DUPE_MATCH_DIM, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2593 dupe_menu_add_item(store, _("Checksum"), DUPE_MATCH_SUM, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2594 dupe_menu_add_item(store, _("Path"), DUPE_MATCH_PATH, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2595 dupe_menu_add_item(store, _("Similarity (high)"), DUPE_MATCH_SIM_HIGH, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2596 dupe_menu_add_item(store, _("Similarity"), DUPE_MATCH_SIM_MED, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2597 dupe_menu_add_item(store, _("Similarity (low)"), DUPE_MATCH_SIM_LOW, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2598 dupe_menu_add_item(store, _("Similarity (custom)"), DUPE_MATCH_SIM_CUSTOM, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2599
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2600 g_signal_connect(G_OBJECT(dw->combo), "changed",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2601 G_CALLBACK(dupe_menu_type_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2602 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2603
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2604 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2605 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2606 * list view columns
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2607 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2608 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2609
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2610 /* this overrides the low default of a GtkCellRenderer from 100 to CELL_HEIGHT_OVERRIDE, something sane for our purposes */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2611
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2612 #define CELL_HEIGHT_OVERRIDE 512
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2613
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2614 void cell_renderer_height_override(GtkCellRenderer *renderer)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2615 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2616 GParamSpec *spec;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2617
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2618 spec = g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(renderer)), "height");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2619 if (spec && G_IS_PARAM_SPEC_INT(spec))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2620 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2621 GParamSpecInt *spec_int;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2622
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2623 spec_int = G_PARAM_SPEC_INT(spec);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2624 if (spec_int->maximum < CELL_HEIGHT_OVERRIDE) spec_int->maximum = CELL_HEIGHT_OVERRIDE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2625 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2626 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2627
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2628 static GdkColor *dupe_listview_color_shifted(GtkWidget *widget)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2629 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2630 static GdkColor color;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2631 static GtkWidget *done = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2632
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2633 if (done != widget)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2634 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2635 GtkStyle *style;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2636
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2637 style = gtk_widget_get_style(widget);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2638 memcpy(&color, &style->base[GTK_STATE_NORMAL], sizeof(color));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2639 shift_color(&color, -1, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2640 done = widget;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2641 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2642
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2643 return &color;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2644 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2645
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2646 static void dupe_listview_color_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2647 GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2648 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2649 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2650 gboolean set;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2651
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2652 gtk_tree_model_get(tree_model, iter, DUPE_COLUMN_COLOR, &set, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2653 g_object_set(G_OBJECT(cell),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2654 "cell-background-gdk", dupe_listview_color_shifted(dw->listview),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2655 "cell-background-set", set, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2656 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2657
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2658 static void dupe_listview_add_column(DupeWindow *dw, GtkWidget *listview, gint n, const gchar *title, gint image, gint right_justify)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2659 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2660 GtkTreeViewColumn *column;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2661 GtkCellRenderer *renderer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2662
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2663 column = gtk_tree_view_column_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2664 gtk_tree_view_column_set_title(column, title);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2665 gtk_tree_view_column_set_min_width(column, 4);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2666
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2667 if (n != DUPE_COLUMN_RANK &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2668 n != DUPE_COLUMN_THUMB)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2669 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2670 gtk_tree_view_column_set_resizable(column, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2671 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2672
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2673 if (!image)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2674 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2675 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2676 renderer = gtk_cell_renderer_text_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2677 if (right_justify)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2678 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2679 g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2680 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2681 gtk_tree_view_column_pack_start(column, renderer, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2682 gtk_tree_view_column_add_attribute(column, renderer, "text", n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2683 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2684 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2685 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2686 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2687 renderer = gtk_cell_renderer_pixbuf_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2688 cell_renderer_height_override(renderer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2689 gtk_tree_view_column_pack_start(column, renderer, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2690 gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2691 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2692
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2693 if (listview == dw->listview)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2694 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2695 /* sets background before rendering */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2696 gtk_tree_view_column_set_cell_data_func(column, renderer, dupe_listview_color_cb, dw, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2697 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2698
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2699 gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2700 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2701
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2702 static void dupe_listview_set_height(GtkWidget *listview, gint thumb)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2703 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2704 GtkTreeViewColumn *column;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2705 GtkCellRenderer *cell;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2706 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2707
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2708 column = gtk_tree_view_get_column(GTK_TREE_VIEW(listview), DUPE_COLUMN_THUMB - 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2709 if (!column) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2710
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2711 gtk_tree_view_column_set_fixed_width(column, (thumb) ? thumb_max_width : 4);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2712
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2713 list = gtk_tree_view_column_get_cell_renderers(column);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2714 if (!list) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2715 cell = list->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2716 g_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2717
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2718 g_object_set(G_OBJECT(cell), "height", (thumb) ? thumb_max_height : -1, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2719 gtk_tree_view_columns_autosize(GTK_TREE_VIEW(listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2720 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2721
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2722
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2723 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2724 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2725 * misc cb
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2726 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2727 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2728
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2729 static void dupe_window_show_thumb_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2730 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2731 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2732
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2733 dw->show_thumbs = GTK_TOGGLE_BUTTON(widget)->active;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2734
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2735 if (dw->show_thumbs)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2736 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2737 if (!dw->working) dupe_thumb_step(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2738 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2739 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2740 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2741 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2742 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2743 gint valid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2744
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2745 thumb_loader_free(dw->thumb_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2746 dw->thumb_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2747
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2748 store = gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2749 valid = gtk_tree_model_get_iter_first(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2750
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2751 while (valid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2752 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2753 gtk_list_store_set(GTK_LIST_STORE(store), &iter, DUPE_COLUMN_THUMB, NULL, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2754 valid = gtk_tree_model_iter_next(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2755 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2756 dupe_window_update_progress(dw, NULL, 0.0, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2757 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2758
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2759 dupe_listview_set_height(dw->listview, dw->show_thumbs);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2760 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2761
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2762 static void dupe_popup_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2763 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2764 GtkWidget *view = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2765 GtkTreePath *tpath;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2766 gint cx, cy, cw, ch;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2767 gint column;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2768
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2769 gtk_tree_view_get_cursor(GTK_TREE_VIEW(view), &tpath, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2770 if (!tpath) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2771
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2772 if (gtk_tree_view_get_column(GTK_TREE_VIEW(view), DUPE_COLUMN_NAME - 1) != NULL)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2773 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2774 column = DUPE_COLUMN_NAME - 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2775 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2776 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2777 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2778 /* dw->second_listview */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2779 column = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2780 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2781 tree_view_get_cell_clamped(GTK_TREE_VIEW(view), tpath, column, TRUE, &cx, &cy, &cw, &ch);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2782 gtk_tree_path_free(tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2783 cy += ch;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2784 popup_menu_position_clamp(menu, &cx, &cy, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2785 *x = cx;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2786 *y = cy;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2787 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2788
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2789 static gint dupe_window_keypress_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2790 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2791 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2792 gint stop_signal = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2793 gint on_second;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2794 GtkWidget *listview;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2795 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2796 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2797 GList *slist;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2798 DupeItem *di = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2799
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2800 on_second = GTK_WIDGET_HAS_FOCUS(dw->second_listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2801
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2802 if (on_second)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2803 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2804 listview = dw->second_listview;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2805 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2806 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2807 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2808 listview = dw->listview;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2809 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2810
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2811 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2812 slist = gtk_tree_selection_get_selected_rows(selection, &store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2813 if (slist)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2814 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2815 GtkTreePath *tpath;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2816 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2817 GList *last;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2818
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2819 last = g_list_last(slist);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2820 tpath = last->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2821
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2822 /* last is newest selected file */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2823 gtk_tree_model_get_iter(store, &iter, tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2824 gtk_tree_model_get(store, &iter, DUPE_COLUMN_POINTER, &di, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2825 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2826 g_list_foreach(slist, (GFunc)gtk_tree_path_free, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2827 g_list_free(slist);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2828
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2829 if (event->state & GDK_CONTROL_MASK)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2830 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2831 gint edit_val = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2832
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2833 if (!on_second)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2834 switch (event->keyval)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2835 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2836 case '1':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2837 edit_val = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2838 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2839 case '2':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2840 edit_val = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2841 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2842 case '3':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2843 edit_val = 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2844 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2845 case '4':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2846 edit_val = 3;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2847 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2848 case '5':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2849 edit_val = 4;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2850 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2851 case '6':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2852 edit_val = 5;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2853 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2854 case '7':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2855 edit_val = 6;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2856 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2857 case '8':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2858 edit_val = 7;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2859 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2860 case '9':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2861 edit_val = 8;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2862 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2863 case '0':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2864 edit_val = 9;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2865 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2866 case 'C': case 'c':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2867 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2868 file_util_copy(NULL, dupe_listview_get_selection(dw, listview), NULL, dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2869 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2870 case 'M': case 'm':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2871 file_util_move(NULL, dupe_listview_get_selection(dw, listview), NULL, dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2872 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2873 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2874 case 'R': case 'r':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2875 file_util_rename(NULL, dupe_listview_get_selection(dw, listview), dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2876 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2877 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2878 case 'D': case 'd':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2879 file_util_delete(NULL, dupe_listview_get_selection(dw, listview), dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2880 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2881 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2882 case 'P': case 'p':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2883 info_window_new(NULL, dupe_listview_get_selection(dw, listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2884 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2885 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2886 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2887 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2888 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2889
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2890 switch (event->keyval)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2891 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2892 case 'A': case 'a':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2893 if (event->state & GDK_SHIFT_MASK)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2894 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2895 gtk_tree_selection_unselect_all(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2896 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2897 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2898 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2899 gtk_tree_selection_select_all(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2900 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2901 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2902 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2903 case GDK_Delete: case GDK_KP_Delete:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2904 if (on_second)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2905 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2906 dupe_second_clear(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2907 dupe_window_recompare(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2908 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2909 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2910 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2911 dupe_window_clear(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2912 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2913 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2914 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2915 case 'L': case 'l':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2916 dupe_window_append_file_list(dw, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2917 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2918 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2919 case 'T': case 't':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2920 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dw->button_thumbs),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2921 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dw->button_thumbs)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2922 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2923 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2924 case 'W': case 'w':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2925 dupe_window_close(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2926 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2927 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2928 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2929 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2930 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2931
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2932 if (edit_val >= 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2933 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2934 dupe_window_edit_selected(dw, edit_val);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2935 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2936 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2937 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2938 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2939 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2940 switch (event->keyval)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2941 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2942 case GDK_Return: case GDK_KP_Enter:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2943 dupe_menu_view(dw, di, listview, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2944 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2945 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2946 case 'V': case 'v':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2947 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2948 dupe_menu_view(dw, di, listview, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2949 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2950 case GDK_Delete: case GDK_KP_Delete:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2951 dupe_window_remove_selection(dw, listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2952 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2953 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2954 case 'C': case 'c':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2955 if (!on_second)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2956 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2957 dupe_window_collection_from_selection(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2958 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2959 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2960 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2961 case '1':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2962 dupe_listview_select_dupes(dw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2963 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2964 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2965 case '2':
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2966 dupe_listview_select_dupes(dw, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2967 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2968 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2969 case GDK_Menu:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2970 case GDK_F10:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2971 if (!on_second)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2972 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2973 GtkWidget *menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2974
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2975 menu = dupe_menu_popup_main(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2976 gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2977 dupe_popup_menu_pos_cb, listview, 0, GDK_CURRENT_TIME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2978 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2979 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2980 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2981 GtkWidget *menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2982
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2983 menu = dupe_menu_popup_second(dw, di);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2984 gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2985 dupe_popup_menu_pos_cb, listview, 0, GDK_CURRENT_TIME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2986 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2987 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2988 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2989 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2990 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2991 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2992
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2993 return stop_signal;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2994 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2995
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2996
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2997 void dupe_window_clear(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2998 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2999 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3000
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3001 dupe_check_stop(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3002
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3003 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dw->listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3004 gtk_list_store_clear(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3005 gtk_tree_view_columns_autosize(GTK_TREE_VIEW(dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3006
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3007 g_list_free(dw->dupes);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3008 dw->dupes = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3009
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3010 dupe_list_free(dw->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3011 dw->list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3012
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3013 dupe_match_reset_list(dw->second_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3014
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3015 dupe_window_update_count(dw, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3016 dupe_window_update_progress(dw, NULL, 0.0, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3017 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3018
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3019 void dupe_window_close(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3020 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3021 dupe_check_stop(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3022
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3023 dupe_window_list = g_list_remove(dupe_window_list, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3024 gtk_widget_destroy(dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3025
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3026 g_list_free(dw->dupes);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3027 dupe_list_free(dw->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3028
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3029 dupe_list_free(dw->second_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3030
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3031 g_free(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3032 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3033
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3034 static gint dupe_window_delete(GtkWidget *widget, GdkEvent *event, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3035 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3036 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3037 dupe_window_close(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3038
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3039 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3040 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3041
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3042 /* collection and files can be NULL */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3043 DupeWindow *dupe_window_new(DupeMatchType match_mask)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3044 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3045 DupeWindow *dw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3046 GtkWidget *vbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3047 GtkWidget *scrolled;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3048 GtkWidget *frame;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3049 GtkWidget *status_box;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3050 GtkWidget *label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3051 GtkWidget *button;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3052 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3053 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3054 GdkGeometry geometry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3055
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3056 dw = g_new0(DupeWindow, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3057
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3058 dw->list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3059 dw->dupes = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3060 dw->match_mask = match_mask;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3061 dw->show_thumbs = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3062
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3063 dw->idle_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3064
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3065 dw->second_set = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3066
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3067 dw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3068 window_set_icon(dw->window, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3069
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3070 geometry.min_width = 32;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3071 geometry.min_height = 32;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3072 geometry.base_width = DUPE_DEF_WIDTH;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3073 geometry.base_height = DUPE_DEF_HEIGHT;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3074 gtk_window_set_geometry_hints(GTK_WINDOW(dw->window), NULL, &geometry,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3075 GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3076
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3077 gtk_window_set_default_size(GTK_WINDOW(dw->window), DUPE_DEF_WIDTH, DUPE_DEF_HEIGHT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3078
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3079 gtk_window_set_resizable(GTK_WINDOW(dw->window), TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3080 gtk_window_set_title(GTK_WINDOW(dw->window), _("Find duplicates - GQview"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3081 gtk_window_set_wmclass(GTK_WINDOW(dw->window), "dupe", "GQview");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3082 gtk_container_set_border_width (GTK_CONTAINER (dw->window), 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3083
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3084 g_signal_connect(G_OBJECT(dw->window), "delete_event",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3085 G_CALLBACK(dupe_window_delete), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3086 g_signal_connect(G_OBJECT(dw->window), "key_press_event",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3087 G_CALLBACK(dupe_window_keypress_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3088
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3089 vbox = gtk_vbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3090 gtk_container_add(GTK_CONTAINER(dw->window), vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3091 gtk_widget_show(vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3092
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3093 dw->table = gtk_table_new(1, 3, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3094 gtk_box_pack_start(GTK_BOX(vbox), dw->table, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3095 gtk_widget_show(dw->table);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3096
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3097 scrolled = gtk_scrolled_window_new(NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3098 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3099 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3100 gtk_table_attach_defaults(GTK_TABLE(dw->table), scrolled, 0, 2, 0, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3101 gtk_widget_show(scrolled);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3102
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3103 store = gtk_list_store_new(9, G_TYPE_POINTER, G_TYPE_STRING, GDK_TYPE_PIXBUF,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3104 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3105 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3106 dw->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3107 g_object_unref(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3108
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3109 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dw->listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3110 gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_MULTIPLE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3111 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(dw->listview), TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3112 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(dw->listview), FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3113
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3114 dupe_listview_add_column(dw, dw->listview, DUPE_COLUMN_RANK, "", FALSE, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3115 dupe_listview_add_column(dw, dw->listview, DUPE_COLUMN_THUMB, "", TRUE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3116 dupe_listview_add_column(dw, dw->listview, DUPE_COLUMN_NAME, _("Name"), FALSE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3117 dupe_listview_add_column(dw, dw->listview, DUPE_COLUMN_SIZE, _("Size"), FALSE, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3118 dupe_listview_add_column(dw, dw->listview, DUPE_COLUMN_DATE, _("Date"), FALSE, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3119 dupe_listview_add_column(dw, dw->listview, DUPE_COLUMN_DIMENSIONS, _("Dimensions"), FALSE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3120 dupe_listview_add_column(dw, dw->listview, DUPE_COLUMN_PATH, _("Path"), FALSE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3121
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3122 gtk_container_add(GTK_CONTAINER(scrolled), dw->listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3123 gtk_widget_show(dw->listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3124
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3125 dw->second_vbox = gtk_vbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3126 gtk_table_attach_defaults(GTK_TABLE(dw->table), dw->second_vbox, 2, 3, 0, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3127 if (dw->second_set)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3128 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3129 gtk_table_set_col_spacings(GTK_TABLE(dw->table), PREF_PAD_GAP);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3130 gtk_widget_show(dw->second_vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3131 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3132 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3133 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3134 gtk_table_set_col_spacings(GTK_TABLE(dw->table), 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3135 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3136
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3137 scrolled = gtk_scrolled_window_new(NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3138 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3139 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3140 gtk_box_pack_start(GTK_BOX(dw->second_vbox), scrolled, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3141 gtk_widget_show(scrolled);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3142
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3143 store = gtk_list_store_new(2, G_TYPE_POINTER, G_TYPE_STRING);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3144 dw->second_listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3145
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3146 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dw->second_listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3147 gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_MULTIPLE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3148
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3149 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(dw->second_listview), TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3150 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(dw->second_listview), FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3151
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3152 dupe_listview_add_column(dw, dw->second_listview, 1, _("Compare to:"), FALSE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3153
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3154 gtk_container_add(GTK_CONTAINER(scrolled), dw->second_listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3155 gtk_widget_show(dw->second_listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3156
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3157 dw->second_status_label = gtk_label_new("");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3158 gtk_box_pack_start(GTK_BOX(dw->second_vbox), dw->second_status_label, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3159 gtk_widget_show(dw->second_status_label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3160
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3161 pref_line(dw->second_vbox, GTK_ORIENTATION_HORIZONTAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3162
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3163 status_box = pref_box_new(vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3164
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3165 label = gtk_label_new(_("Compare by:"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3166 gtk_box_pack_start(GTK_BOX(status_box), label, FALSE, FALSE, PREF_PAD_SPACE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3167 gtk_widget_show(label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3168
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3169 dupe_menu_setup(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3170 gtk_box_pack_start(GTK_BOX(status_box), dw->combo, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3171 gtk_widget_show(dw->combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3172
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3173 dw->button_thumbs = gtk_check_button_new_with_label(_("Thumbnails"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3174 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dw->button_thumbs), dw->show_thumbs);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3175 g_signal_connect(G_OBJECT(dw->button_thumbs), "toggled",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3176 G_CALLBACK(dupe_window_show_thumb_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3177 gtk_box_pack_start(GTK_BOX(status_box), dw->button_thumbs, FALSE, FALSE, PREF_PAD_SPACE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3178 gtk_widget_show(dw->button_thumbs);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3179
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3180 button = gtk_check_button_new_with_label(_("Compare two file sets"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3181 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), dw->second_set);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3182 g_signal_connect(G_OBJECT(button), "toggled",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3183 G_CALLBACK(dupe_second_set_toggle_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3184 gtk_box_pack_end(GTK_BOX(status_box), button, FALSE, FALSE, PREF_PAD_SPACE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3185 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3186
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3187 status_box = gtk_hbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3188 gtk_box_pack_start(GTK_BOX(vbox), status_box, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3189 gtk_widget_show(status_box);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3190
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3191 frame = gtk_frame_new(NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3192 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3193 gtk_box_pack_start(GTK_BOX(status_box), frame, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3194 gtk_widget_show(frame);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3195
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3196 dw->status_label = gtk_label_new("");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3197 gtk_container_add(GTK_CONTAINER(frame), dw->status_label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3198 gtk_widget_show(dw->status_label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3199
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3200 dw->extra_label = gtk_progress_bar_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3201 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(dw->extra_label), 0.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3202 gtk_box_pack_end(GTK_BOX(status_box), dw->extra_label, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3203 gtk_widget_show(dw->extra_label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3204
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3205 dupe_dnd_init(dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3206
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3207 /* order is important here, dnd_init should be seeing mouse
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3208 * presses before we possibly handle (and stop) the signal
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3209 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3210 g_signal_connect(G_OBJECT(dw->listview), "button_press_event",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3211 G_CALLBACK(dupe_listview_press_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3212 g_signal_connect(G_OBJECT(dw->listview), "button_release_event",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3213 G_CALLBACK(dupe_listview_release_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3214 g_signal_connect(G_OBJECT(dw->second_listview), "button_press_event",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3215 G_CALLBACK(dupe_listview_press_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3216 g_signal_connect(G_OBJECT(dw->second_listview), "button_release_event",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3217 G_CALLBACK(dupe_listview_release_cb), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3218
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3219 gtk_widget_show(dw->window);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3220
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3221 dupe_window_update_count(dw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3222 dupe_window_update_progress(dw, NULL, 0.0, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3223
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3224 dupe_window_list = g_list_append(dupe_window_list, dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3225
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3226 return dw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3227 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3228
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3229 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3230 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3231 * dnd confirm dir
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3232 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3233 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3234
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3235 typedef struct {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3236 DupeWindow *dw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3237 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3238 } CDupeConfirmD;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3239
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3240 static void confirm_dir_list_cancel(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3241 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3242 /* do nothing */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3243 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3244
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3245 static void confirm_dir_list_add(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3246 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3247 CDupeConfirmD *d = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3248 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3249
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3250 dupe_window_add_files(d->dw, d->list, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3251
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3252 work = d->list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3253 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3254 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3255 gchar *path = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3256 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3257 if (isdir(path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3258 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3259 GList *list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3260
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3261 path_list(path, &list, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3262 list = path_list_filter(list, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3263 if (list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3264 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3265 dupe_window_add_files(d->dw, list, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3266 path_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3267 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3268 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3269 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3270 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3271
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3272 static void confirm_dir_list_recurse(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3273 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3274 CDupeConfirmD *d = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3275 dupe_window_add_files(d->dw, d->list, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3276 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3277
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3278 static void confirm_dir_list_skip(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3279 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3280 CDupeConfirmD *d = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3281 dupe_window_add_files(d->dw, d->list, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3282 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3283
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3284 static void confirm_dir_list_destroy(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3285 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3286 CDupeConfirmD *d = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3287 path_list_free(d->list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3288 g_free(d);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3289 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3290
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3291 static GtkWidget *dupe_confirm_dir_list(DupeWindow *dw, GList *list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3292 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3293 GtkWidget *menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3294 CDupeConfirmD *d;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3295
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3296 d = g_new0(CDupeConfirmD, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3297 d->dw = dw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3298 d->list = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3299
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3300 menu = popup_menu_short_lived();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3301 g_signal_connect(G_OBJECT(menu), "destroy",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3302 G_CALLBACK(confirm_dir_list_destroy), d);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3303
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3304 menu_item_add_stock(menu, _("Dropped list includes folders."), GTK_STOCK_DND_MULTIPLE, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3305 menu_item_add_divider(menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3306 menu_item_add_stock(menu, _("_Add contents"), GTK_STOCK_OK, G_CALLBACK(confirm_dir_list_add), d);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3307 menu_item_add_stock(menu, _("Add contents _recursive"), GTK_STOCK_ADD, G_CALLBACK(confirm_dir_list_recurse), d);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3308 menu_item_add_stock(menu, _("_Skip folders"), GTK_STOCK_REMOVE, G_CALLBACK(confirm_dir_list_skip), d);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3309 menu_item_add_divider(menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3310 menu_item_add_stock(menu, _("Cancel"), GTK_STOCK_CANCEL, G_CALLBACK(confirm_dir_list_cancel), d);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3311
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3312 return menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3313 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3314
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3315 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3316 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3317 * dnd
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3318 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3319 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3320
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3321 static GtkTargetEntry dupe_drag_types[] = {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3322 { "text/uri-list", 0, TARGET_URI_LIST },
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3323 { "text/plain", 0, TARGET_TEXT_PLAIN }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3324 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3325 static gint n_dupe_drag_types = 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3326
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3327 static GtkTargetEntry dupe_drop_types[] = {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3328 { "application/x-gqview-collection-member", 0, TARGET_APP_COLLECTION_MEMBER },
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3329 { "text/uri-list", 0, TARGET_URI_LIST }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3330 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3331 static gint n_dupe_drop_types = 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3332
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3333 static void dupe_dnd_data_set(GtkWidget *widget, GdkDragContext *context,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3334 GtkSelectionData *selection_data, guint info,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3335 guint time, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3336 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3337 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3338 gchar *uri_text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3339 gint length;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3340 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3341
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3342 switch (info)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3343 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3344 case TARGET_URI_LIST:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3345 case TARGET_TEXT_PLAIN:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3346 list = dupe_listview_get_selection(dw, widget);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3347 if (!list) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3348 uri_text = uri_text_from_list(list, &length, (info == TARGET_TEXT_PLAIN));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3349 path_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3350 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3351 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3352 uri_text = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3353 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3354 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3355
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3356 if (uri_text) gtk_selection_data_set(selection_data, selection_data->target,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3357 8, uri_text, length);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3358 g_free(uri_text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3359 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3360
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3361 static void dupe_dnd_data_get(GtkWidget *widget, GdkDragContext *context,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3362 gint x, gint y,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3363 GtkSelectionData *selection_data, guint info,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3364 guint time, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3365 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3366 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3367 GtkWidget *source;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3368 GList *list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3369 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3370
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3371 source = gtk_drag_get_source_widget(context);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3372 if (source == dw->listview || source == dw->second_listview) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3373
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3374 dw->second_drop = (dw->second_set && widget == dw->second_listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3375
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3376 switch (info)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3377 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3378 case TARGET_APP_COLLECTION_MEMBER:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3379 collection_from_dnd_data((gchar *)selection_data->data, &list, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3380 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3381 case TARGET_URI_LIST:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3382 list = uri_list_from_text(selection_data->data, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3383 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3384 while(work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3385 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3386 if (isdir((gchar *)work->data))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3387 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3388 GtkWidget *menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3389 menu = dupe_confirm_dir_list(dw, list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3390 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, time);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3391 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3392 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3393 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3394 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3395 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3396 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3397 list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3398 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3399 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3400
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3401 if (list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3402 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3403 dupe_window_add_files(dw, list, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3404 path_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3405 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3406 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3407
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3408 static void dupe_dest_set(GtkWidget *widget, gint enable)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3409 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3410 if (enable)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3411 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3412 gtk_drag_dest_set(widget,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3413 GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3414 dupe_drop_types, n_dupe_drop_types,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3415 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3416
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3417 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3418 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3419 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3420 gtk_drag_dest_unset(widget);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3421 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3422 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3423
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3424 static void dupe_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3425 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3426 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3427 dupe_dest_set(dw->listview, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3428 dupe_dest_set(dw->second_listview, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3429
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3430 if (dw->click_item && !dupe_listview_item_is_selected(dw, dw->click_item, widget))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3431 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3432 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3433 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3434
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3435 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(widget)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3436 if (dupe_listview_find_item(store, dw->click_item, &iter) >= 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3437 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3438 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3439 GtkTreePath *tpath;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3440
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3441 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3442 gtk_tree_selection_unselect_all(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3443 gtk_tree_selection_select_iter(selection, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3444
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3445 tpath = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3446 gtk_tree_view_set_cursor(GTK_TREE_VIEW(widget), tpath, NULL, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3447 gtk_tree_path_free(tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3448 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3449 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3450
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3451 if (dw->show_thumbs &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3452 widget == dw->listview &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3453 dw->click_item && dw->click_item->pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3454 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3455 GtkTreeSelection *selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3456 gint items;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3457
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3458 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3459 items = gtk_tree_selection_count_selected_rows(selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3460 dnd_set_drag_icon(widget, context, dw->click_item->pixbuf, items);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3461 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3462 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3463
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3464 static void dupe_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3465 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3466 DupeWindow *dw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3467 dupe_dest_set(dw->listview, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3468 dupe_dest_set(dw->second_listview, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3469 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3470
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3471 static void dupe_dnd_init(DupeWindow *dw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3472 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3473 gtk_drag_source_set(dw->listview, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3474 dupe_drag_types, n_dupe_drag_types,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3475 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3476 g_signal_connect(G_OBJECT(dw->listview), "drag_data_get",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3477 G_CALLBACK(dupe_dnd_data_set), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3478 g_signal_connect(G_OBJECT(dw->listview), "drag_begin",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3479 G_CALLBACK(dupe_dnd_begin), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3480 g_signal_connect(G_OBJECT(dw->listview), "drag_end",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3481 G_CALLBACK(dupe_dnd_end), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3482
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3483 dupe_dest_set(dw->listview, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3484 g_signal_connect(G_OBJECT(dw->listview), "drag_data_received",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3485 G_CALLBACK(dupe_dnd_data_get), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3486
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3487 gtk_drag_source_set(dw->second_listview, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3488 dupe_drag_types, n_dupe_drag_types,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3489 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3490 g_signal_connect(G_OBJECT(dw->second_listview), "drag_data_get",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3491 G_CALLBACK(dupe_dnd_data_set), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3492 g_signal_connect(G_OBJECT(dw->second_listview), "drag_begin",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3493 G_CALLBACK(dupe_dnd_begin), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3494 g_signal_connect(G_OBJECT(dw->second_listview), "drag_end",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3495 G_CALLBACK(dupe_dnd_end), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3496
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3497 dupe_dest_set(dw->second_listview, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3498 g_signal_connect(G_OBJECT(dw->second_listview), "drag_data_received",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3499 G_CALLBACK(dupe_dnd_data_get), dw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3500 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3501
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3502 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3503 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3504 * maintenance (move, delete, etc.)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3505 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3506 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3507
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3508 void dupe_maint_removed(const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3509 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3510 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3511
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3512 work = dupe_window_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3513 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3514 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3515 DupeWindow *dw = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3516 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3517
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3518 while (dupe_item_remove_by_path(dw, path));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3519 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3520 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3521
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3522 void dupe_maint_renamed(const gchar *source, const gchar *dest)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3523 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3524 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3525
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3526 work = dupe_window_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3527 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3528 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3529 DupeWindow *dw = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3530 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3531
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3532 while (dupe_item_set_path(dw, source, dest));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3533 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3534
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3535 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3536