Mercurial > geeqie.yaz
annotate src/view_file_list.c @ 792:99ea3d973ad3
added NotifyType
author | nadvornik |
---|---|
date | Fri, 06 Jun 2008 22:11:03 +0000 |
parents | 6d65167764ea |
children | a25b228978a0 |
rev | line source |
---|---|
9 | 1 /* |
196 | 2 * Geeqie |
9 | 3 * (C) 2004 John Ellis |
475 | 4 * Copyright (C) 2008 The Geeqie Team |
9 | 5 * |
6 * Author: John Ellis | |
7 * | |
8 * This software is released under the GNU General Public License (GNU GPL). | |
9 * Please read the included file COPYING for more information. | |
10 * This software comes with no warranty of any kind, use at your own risk! | |
11 */ | |
12 | |
281 | 13 #include "main.h" |
9 | 14 #include "view_file_list.h" |
15 | |
16 #include "cache_maint.h" | |
17 #include "dnd.h" | |
18 #include "editors.h" | |
19 #include "img-view.h" | |
20 #include "info.h" | |
21 #include "layout.h" | |
22 #include "layout_image.h" | |
23 #include "menu.h" | |
24 #include "thumb.h" | |
25 #include "utilops.h" | |
26 #include "ui_bookmark.h" | |
27 #include "ui_fileops.h" | |
28 #include "ui_menu.h" | |
29 #include "ui_tree_edit.h" | |
633 | 30 #include "view_file.h" |
9 | 31 |
32 #include <gdk/gdkkeysyms.h> /* for keyboard values */ | |
33 | |
34 | |
35 enum { | |
36 FILE_COLUMN_POINTER = 0, | |
763
81f9e8dbb4bf
improved infrastructure for tracing changes, optimized vflist_populate_view
nadvornik
parents:
762
diff
changeset
|
37 FILE_COLUMN_VERSION, |
9 | 38 FILE_COLUMN_THUMB, |
39 FILE_COLUMN_NAME, | |
139 | 40 FILE_COLUMN_SIDECARS, |
9 | 41 FILE_COLUMN_SIZE, |
42 FILE_COLUMN_DATE, | |
43 FILE_COLUMN_COLOR, | |
139 | 44 FILE_COLUMN_MARKS, |
45 FILE_COLUMN_MARKS_LAST = FILE_COLUMN_MARKS + FILEDATA_MARKS_SIZE - 1, | |
9 | 46 FILE_COLUMN_COUNT |
47 }; | |
48 | |
49 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
50 static gint vflist_row_is_selected(ViewFile *vf, FileData *fd); |
9 | 51 static gint vflist_row_rename_cb(TreeEditData *td, const gchar *old, const gchar *new, gpointer data); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
52 static void vflist_populate_view(ViewFile *vf); |
792 | 53 static void vflist_notify_cb(FileData *fd, NotifyType type, gpointer data); |
9 | 54 |
55 | |
56 /* | |
57 *----------------------------------------------------------------------------- | |
58 * misc | |
59 *----------------------------------------------------------------------------- | |
60 */ | |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
61 typedef struct { |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
62 FileData *fd; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
63 GtkTreeIter *iter; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
64 gint found; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
65 gint row; |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
66 } ViewFileFindRowData; |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
67 |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
68 static gboolean vflist_find_row_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
69 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
70 ViewFileFindRowData *find = data; |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
71 FileData *fd; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
72 gtk_tree_model_get(model, iter, FILE_COLUMN_POINTER, &fd, -1); |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
73 if (fd == find->fd) |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
74 { |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
75 *find->iter = *iter; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
76 find->found = 1; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
77 return TRUE; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
78 } |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
79 find->row++; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
80 return FALSE; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
81 } |
9 | 82 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
83 static gint vflist_find_row(ViewFile *vf, FileData *fd, GtkTreeIter *iter) |
9 | 84 { |
85 GtkTreeModel *store; | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
86 ViewFileFindRowData data = {fd, iter, 0, 0}; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
87 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
88 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
89 gtk_tree_model_foreach(store, vflist_find_row_cb, &data); |
9 | 90 |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
91 if (data.found) |
9 | 92 { |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
93 return data.row; |
9 | 94 } |
95 | |
96 return -1; | |
97 } | |
98 | |
169 | 99 |
259 | 100 /* |
169 | 101 static gint vflist_find_sidecar_list_idx(GList *work, FileData *fd) |
102 { | |
103 gint i = 0; | |
104 while (work) | |
105 { | |
106 FileData *fd_p = work->data; | |
107 if (fd == fd_p) return i; | |
442 | 108 |
169 | 109 i++; |
110 | |
111 GList *work2 = fd_p->sidecar_files; | |
112 while (work2) | |
113 { | |
442 | 114 fd_p = work2->data; |
169 | 115 if (fd == fd_p) return i; |
442 | 116 |
169 | 117 i++; |
118 work2 = work2->next; | |
119 } | |
120 work = work->next; | |
121 } | |
122 return -1; | |
123 } | |
259 | 124 */ |
169 | 125 |
126 static gint vflist_sidecar_list_count(GList *work) | |
127 { | |
128 gint i = 0; | |
129 while (work) | |
130 { | |
131 FileData *fd = work->data; | |
132 i++; | |
133 | |
134 GList *work2 = fd->sidecar_files; | |
135 while (work2) | |
136 { | |
137 i++; | |
138 work2 = work2->next; | |
139 } | |
140 work = work->next; | |
141 } | |
142 return i; | |
143 } | |
144 | |
145 | |
659
542bb47fef04
Merge vflist_pop_menu() and vficon_pop_menu() into vf_pop_menu().
zas_
parents:
658
diff
changeset
|
146 void vflist_color_set(ViewFile *vf, FileData *fd, gint color_set) |
9 | 147 { |
148 GtkTreeModel *store; | |
149 GtkTreeIter iter; | |
150 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
151 if (vflist_find_row(vf, fd, &iter) < 0) return; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
152 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
153 gtk_tree_store_set(GTK_TREE_STORE(store), &iter, FILE_COLUMN_COLOR, color_set, -1); |
9 | 154 } |
155 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
156 static void vflist_move_cursor(ViewFile *vf, GtkTreeIter *iter) |
9 | 157 { |
158 GtkTreeModel *store; | |
159 GtkTreePath *tpath; | |
160 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
161 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
9 | 162 |
163 tpath = gtk_tree_model_get_path(store, iter); | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
164 gtk_tree_view_set_cursor(GTK_TREE_VIEW(vf->listview), tpath, NULL, FALSE); |
9 | 165 gtk_tree_path_free(tpath); |
166 } | |
167 | |
157 | 168 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
169 static gint vflist_column_idx(ViewFile *vf, gint store_idx) |
157 | 170 { |
171 GList *columns, *work; | |
172 gint i = 0; | |
173 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
174 columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(vf->listview)); |
157 | 175 work = columns; |
176 while (work) | |
177 { | |
178 GtkTreeViewColumn *column = work->data; | |
179 if (store_idx == GPOINTER_TO_INT(g_object_get_data (G_OBJECT(column), "column_store_idx"))) | |
180 break; | |
181 work = work->next; | |
182 i++; | |
183 } | |
442 | 184 |
157 | 185 g_list_free(columns); |
186 return i; | |
187 } | |
188 | |
189 | |
9 | 190 /* |
191 *----------------------------------------------------------------------------- | |
192 * dnd | |
193 *----------------------------------------------------------------------------- | |
194 */ | |
195 | |
196 static void vflist_dnd_get(GtkWidget *widget, GdkDragContext *context, | |
197 GtkSelectionData *selection_data, guint info, | |
198 guint time, gpointer data) | |
199 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
200 ViewFile *vf = data; |
9 | 201 GList *list = NULL; |
202 gchar *uri_text = NULL; | |
203 gint total; | |
204 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
205 if (!VFLIST_INFO(vf, click_fd)) return; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
206 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
207 if (vflist_row_is_selected(vf, VFLIST_INFO(vf, click_fd))) |
9 | 208 { |
633 | 209 list = vf_selection_get_list(vf); |
9 | 210 } |
211 else | |
212 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
213 list = g_list_append(NULL, file_data_ref(VFLIST_INFO(vf, click_fd))); |
9 | 214 } |
215 | |
216 if (!list) return; | |
217 | |
138 | 218 uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN)); |
219 filelist_free(list); | |
9 | 220 |
495 | 221 DEBUG_1(uri_text); |
9 | 222 |
64
04ff0df3ad2f
Mon Aug 15 17:13:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
223 gtk_selection_data_set(selection_data, selection_data->target, |
04ff0df3ad2f
Mon Aug 15 17:13:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
224 8, (guchar *)uri_text, total); |
9 | 225 g_free(uri_text); |
226 } | |
227 | |
228 static void vflist_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data) | |
229 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
230 ViewFile *vf = data; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
231 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
232 vflist_color_set(vf, VFLIST_INFO(vf, click_fd), TRUE); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
233 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
234 if (VFLIST_INFO(vf, thumbs_enabled) && |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
235 VFLIST_INFO(vf, click_fd) && VFLIST_INFO(vf, click_fd)->pixbuf) |
9 | 236 { |
736 | 237 guint items; |
9 | 238 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
239 if (vflist_row_is_selected(vf, VFLIST_INFO(vf, click_fd))) |
633 | 240 items = vf_selection_count(vf, NULL); |
9 | 241 else |
242 items = 1; | |
243 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
244 dnd_set_drag_icon(widget, context, VFLIST_INFO(vf, click_fd)->pixbuf, items); |
9 | 245 } |
246 } | |
247 | |
248 static void vflist_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data) | |
249 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
250 ViewFile *vf = data; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
251 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
252 vflist_color_set(vf, VFLIST_INFO(vf, click_fd), FALSE); |
9 | 253 |
254 if (context->action == GDK_ACTION_MOVE) | |
255 { | |
633 | 256 vf_refresh(vf); |
9 | 257 } |
258 } | |
259 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
260 void vflist_dnd_init(ViewFile *vf) |
9 | 261 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
262 gtk_drag_source_set(vf->listview, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, |
9 | 263 dnd_file_drag_types, dnd_file_drag_types_count, |
264 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
265 g_signal_connect(G_OBJECT(vf->listview), "drag_data_get", |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
266 G_CALLBACK(vflist_dnd_get), vf); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
267 g_signal_connect(G_OBJECT(vf->listview), "drag_begin", |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
268 G_CALLBACK(vflist_dnd_begin), vf); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
269 g_signal_connect(G_OBJECT(vf->listview), "drag_end", |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
270 G_CALLBACK(vflist_dnd_end), vf); |
9 | 271 } |
272 | |
273 /* | |
274 *----------------------------------------------------------------------------- | |
275 * pop-up menu | |
276 *----------------------------------------------------------------------------- | |
277 */ | |
278 | |
634 | 279 GList *vflist_pop_menu_file_list(ViewFile *vf) |
9 | 280 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
281 if (!VFLIST_INFO(vf, click_fd)) return NULL; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
282 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
283 if (vflist_row_is_selected(vf, VFLIST_INFO(vf, click_fd))) |
9 | 284 { |
633 | 285 return vf_selection_get_list(vf); |
9 | 286 } |
287 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
288 return g_list_append(NULL, file_data_ref(VFLIST_INFO(vf, click_fd))); |
9 | 289 } |
290 | |
637 | 291 void vflist_pop_menu_view_cb(GtkWidget *widget, gpointer data) |
9 | 292 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
293 ViewFile *vf = data; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
294 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
295 if (vflist_row_is_selected(vf, VFLIST_INFO(vf, click_fd))) |
9 | 296 { |
297 GList *list; | |
298 | |
633 | 299 list = vf_selection_get_list(vf); |
9 | 300 view_window_new_from_list(list); |
138 | 301 filelist_free(list); |
9 | 302 } |
303 else | |
304 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
305 view_window_new(VFLIST_INFO(vf, click_fd)); |
9 | 306 } |
307 } | |
308 | |
637 | 309 void vflist_pop_menu_rename_cb(GtkWidget *widget, gpointer data) |
9 | 310 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
311 ViewFile *vf = data; |
9 | 312 GList *list; |
313 | |
634 | 314 list = vf_pop_menu_file_list(vf); |
341
15c6b94545a2
Move safe_delete* and in place rename options to file_ops
zas_
parents:
334
diff
changeset
|
315 if (options->file_ops.enable_in_place_rename && |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
316 list && !list->next && VFLIST_INFO(vf, click_fd)) |
9 | 317 { |
318 GtkTreeModel *store; | |
319 GtkTreeIter iter; | |
320 | |
138 | 321 filelist_free(list); |
9 | 322 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
323 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
324 if (vflist_find_row(vf, VFLIST_INFO(vf, click_fd), &iter) >= 0) |
9 | 325 { |
326 GtkTreePath *tpath; | |
327 | |
328 tpath = gtk_tree_model_get_path(store, &iter); | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
329 tree_edit_by_path(GTK_TREE_VIEW(vf->listview), tpath, |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
330 vflist_column_idx(vf, FILE_COLUMN_NAME), VFLIST_INFO(vf, click_fd)->name, |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
331 vflist_row_rename_cb, vf); |
9 | 332 gtk_tree_path_free(tpath); |
333 } | |
334 return; | |
335 } | |
336 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
337 file_util_rename(NULL, list, vf->listview); |
9 | 338 } |
339 | |
659
542bb47fef04
Merge vflist_pop_menu() and vficon_pop_menu() into vf_pop_menu().
zas_
parents:
658
diff
changeset
|
340 void vflist_pop_menu_thumbs_cb(GtkWidget *widget, gpointer data) |
9 | 341 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
342 ViewFile *vf = data; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
343 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
344 vflist_color_set(vf, VFLIST_INFO(vf, click_fd), FALSE); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
345 if (vf->layout) |
9 | 346 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
347 layout_thumb_set(vf->layout, !VFLIST_INFO(vf, thumbs_enabled)); |
9 | 348 } |
349 else | |
350 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
351 vflist_thumb_set(vf, !VFLIST_INFO(vf, thumbs_enabled)); |
9 | 352 } |
353 } | |
354 | |
637 | 355 void vflist_pop_menu_refresh_cb(GtkWidget *widget, gpointer data) |
9 | 356 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
357 ViewFile *vf = data; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
358 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
359 vflist_color_set(vf, VFLIST_INFO(vf, click_fd), FALSE); |
633 | 360 vf_refresh(vf); |
9 | 361 } |
362 | |
637 | 363 void vflist_popup_destroy_cb(GtkWidget *widget, gpointer data) |
9 | 364 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
365 ViewFile *vf = data; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
366 vflist_color_set(vf, VFLIST_INFO(vf, click_fd), FALSE); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
367 VFLIST_INFO(vf, click_fd) = NULL; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
368 vf->popup = NULL; |
9 | 369 } |
370 | |
150 | 371 |
9 | 372 /* |
373 *----------------------------------------------------------------------------- | |
374 * callbacks | |
375 *----------------------------------------------------------------------------- | |
376 */ | |
377 | |
378 static gint vflist_row_rename_cb(TreeEditData *td, const gchar *old, const gchar *new, gpointer data) | |
379 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
380 ViewFile *vf = data; |
9 | 381 gchar *old_path; |
382 gchar *new_path; | |
383 | |
384 if (strlen(new) == 0) return FALSE; | |
385 | |
783 | 386 old_path = g_build_filename(vf->dir_fd->path, old, NULL); |
387 new_path = g_build_filename(vf->dir_fd->path, new, NULL); | |
9 | 388 |
726 | 389 if (strchr(new, G_DIR_SEPARATOR) != NULL) |
9 | 390 { |
391 gchar *text = g_strdup_printf(_("Invalid file name:\n%s"), new); | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
392 file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, vf->listview); |
9 | 393 g_free(text); |
394 } | |
395 else if (isfile(new_path)) | |
396 { | |
397 gchar *text = g_strdup_printf(_("A file with name %s already exists."), new); | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
398 file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, vf->listview); |
9 | 399 g_free(text); |
400 } | |
442 | 401 else |
9 | 402 { |
633 | 403 gint row = vf_index_by_path(vf, old_path); |
442 | 404 if (row >= 0) |
138 | 405 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
406 GList *work = g_list_nth(vf->list, row); |
138 | 407 FileData *fd = work->data; |
753 | 408 |
409 file_util_rename_simple(fd, new_path, vf->listview); | |
442 | 410 |
138 | 411 } |
412 | |
9 | 413 } |
414 g_free(old_path); | |
415 g_free(new_path); | |
416 | |
417 return FALSE; | |
418 } | |
419 | |
420 static void vflist_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data) | |
421 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
422 ViewFile *vf = data; |
9 | 423 GtkTreeModel *store; |
424 GtkTreeIter iter; | |
425 GtkTreePath *tpath; | |
426 gint cw, ch; | |
427 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
428 if (vflist_find_row(vf, VFLIST_INFO(vf, click_fd), &iter) < 0) return; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
429 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
9 | 430 tpath = gtk_tree_model_get_path(store, &iter); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
431 tree_view_get_cell_clamped(GTK_TREE_VIEW(vf->listview), tpath, FILE_COLUMN_NAME - 1, TRUE, x, y, &cw, &ch); |
9 | 432 gtk_tree_path_free(tpath); |
433 *y += ch; | |
434 popup_menu_position_clamp(menu, x, y, 0); | |
435 } | |
436 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
437 gint vflist_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) |
9 | 438 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
439 ViewFile *vf = data; |
9 | 440 GtkTreePath *tpath; |
441 | |
442 if (event->keyval != GDK_Menu) return FALSE; | |
443 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
444 gtk_tree_view_get_cursor(GTK_TREE_VIEW(vf->listview), &tpath, NULL); |
9 | 445 if (tpath) |
446 { | |
447 GtkTreeModel *store; | |
448 GtkTreeIter iter; | |
449 | |
450 store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); | |
451 gtk_tree_model_get_iter(store, &iter, tpath); | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
452 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &VFLIST_INFO(vf, click_fd), -1); |
9 | 453 gtk_tree_path_free(tpath); |
454 } | |
455 else | |
456 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
457 VFLIST_INFO(vf, click_fd) = NULL; |
9 | 458 } |
459 | |
659
542bb47fef04
Merge vflist_pop_menu() and vficon_pop_menu() into vf_pop_menu().
zas_
parents:
658
diff
changeset
|
460 vf->popup = vf_pop_menu(vf); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
461 gtk_menu_popup(GTK_MENU(vf->popup), NULL, NULL, vflist_menu_position_cb, vf, 0, GDK_CURRENT_TIME); |
9 | 462 |
463 return TRUE; | |
464 } | |
465 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
466 gint vflist_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) |
9 | 467 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
468 ViewFile *vf = data; |
9 | 469 GtkTreePath *tpath; |
470 GtkTreeIter iter; | |
471 FileData *fd = NULL; | |
149 | 472 GtkTreeViewColumn *column; |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
473 |
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
474 vf->clicked_mark = 0; |
442 | 475 |
9 | 476 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y, |
132 | 477 &tpath, &column, NULL, NULL)) |
9 | 478 { |
479 GtkTreeModel *store; | |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
480 gint col_idx = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(column), "column_store_idx")); |
442 | 481 |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
482 if (bevent->button == MOUSE_BUTTON_LEFT && |
149 | 483 col_idx >= FILE_COLUMN_MARKS && col_idx <= FILE_COLUMN_MARKS_LAST) |
484 return FALSE; | |
442 | 485 |
655
beacc4c68c53
Fix last patch, only set vf->clicked_mark for a valid mark.
zas_
parents:
654
diff
changeset
|
486 if (col_idx >= FILE_COLUMN_MARKS && col_idx <= FILE_COLUMN_MARKS_LAST) |
beacc4c68c53
Fix last patch, only set vf->clicked_mark for a valid mark.
zas_
parents:
654
diff
changeset
|
487 vf->clicked_mark = 1 + (col_idx - FILE_COLUMN_MARKS); |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
488 |
149 | 489 store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); |
9 | 490 |
491 gtk_tree_model_get_iter(store, &iter, tpath); | |
492 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1); | |
493 #if 0 | |
494 gtk_tree_view_set_cursor(GTK_TREE_VIEW(widget), tpath, NULL, FALSE); | |
495 #endif | |
496 gtk_tree_path_free(tpath); | |
497 } | |
498 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
499 VFLIST_INFO(vf, click_fd) = fd; |
9 | 500 |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
501 if (bevent->button == MOUSE_BUTTON_RIGHT) |
9 | 502 { |
659
542bb47fef04
Merge vflist_pop_menu() and vficon_pop_menu() into vf_pop_menu().
zas_
parents:
658
diff
changeset
|
503 vf->popup = vf_pop_menu(vf); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
504 gtk_menu_popup(GTK_MENU(vf->popup), NULL, NULL, NULL, NULL, |
9 | 505 bevent->button, bevent->time); |
506 return TRUE; | |
507 } | |
508 | |
509 if (!fd) return FALSE; | |
510 | |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
511 if (bevent->button == MOUSE_BUTTON_MIDDLE) |
9 | 512 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
513 if (!vflist_row_is_selected(vf, fd)) |
9 | 514 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
515 vflist_color_set(vf, fd, TRUE); |
9 | 516 } |
517 return TRUE; | |
518 } | |
519 | |
520 | |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
521 if (bevent->button == MOUSE_BUTTON_LEFT && bevent->type == GDK_BUTTON_PRESS && |
9 | 522 !(bevent->state & GDK_SHIFT_MASK ) && |
523 !(bevent->state & GDK_CONTROL_MASK ) && | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
524 vflist_row_is_selected(vf, fd)) |
9 | 525 { |
526 | 526 GtkTreeSelection *selection; |
527 | |
9 | 528 gtk_widget_grab_focus(widget); |
526 | 529 |
530 | |
531 /* returning FALSE and further processing of the event is needed for | |
532 correct operation of the expander, to show the sidecar files. | |
533 It however resets the selection of multiple files. With this condition | |
534 it should work for both cases */ | |
535 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)); | |
536 return (gtk_tree_selection_count_selected_rows(selection) > 1); | |
9 | 537 } |
538 | |
539 #if 0 | |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
540 if (bevent->button == MOUSE_BUTTON_LEFT && bevent->type == GDK_2BUTTON_PRESS) |
9 | 541 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
542 if (vf->layout) layout_image_full_screen_start(vf->layout); |
9 | 543 } |
544 #endif | |
545 | |
546 return FALSE; | |
547 } | |
548 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
549 gint vflist_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) |
9 | 550 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
551 ViewFile *vf = data; |
9 | 552 GtkTreePath *tpath; |
553 GtkTreeIter iter; | |
554 FileData *fd = NULL; | |
555 | |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
556 if (bevent->button == MOUSE_BUTTON_MIDDLE) |
9 | 557 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
558 vflist_color_set(vf, VFLIST_INFO(vf, click_fd), FALSE); |
9 | 559 } |
560 | |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
561 if (bevent->button != MOUSE_BUTTON_LEFT && bevent->button != MOUSE_BUTTON_MIDDLE) |
9 | 562 { |
563 return TRUE; | |
564 } | |
565 | |
566 if ((bevent->x != 0 || bevent->y != 0) && | |
567 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y, | |
568 &tpath, NULL, NULL, NULL)) | |
569 { | |
570 GtkTreeModel *store; | |
571 | |
572 store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); | |
573 gtk_tree_model_get_iter(store, &iter, tpath); | |
574 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1); | |
575 gtk_tree_path_free(tpath); | |
576 } | |
577 | |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
578 if (bevent->button == MOUSE_BUTTON_MIDDLE) |
9 | 579 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
580 if (fd && VFLIST_INFO(vf, click_fd) == fd) |
9 | 581 { |
582 GtkTreeSelection *selection; | |
583 | |
584 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)); | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
585 if (vflist_row_is_selected(vf, fd)) |
9 | 586 { |
587 gtk_tree_selection_unselect_iter(selection, &iter); | |
588 } | |
589 else | |
590 { | |
591 gtk_tree_selection_select_iter(selection, &iter); | |
592 } | |
593 } | |
594 return TRUE; | |
595 } | |
596 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
597 if (fd && VFLIST_INFO(vf, click_fd) == fd && |
9 | 598 !(bevent->state & GDK_SHIFT_MASK ) && |
599 !(bevent->state & GDK_CONTROL_MASK ) && | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
600 vflist_row_is_selected(vf, fd)) |
9 | 601 { |
602 GtkTreeSelection *selection; | |
603 | |
604 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)); | |
605 gtk_tree_selection_unselect_all(selection); | |
606 gtk_tree_selection_select_iter(selection, &iter); | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
607 vflist_move_cursor(vf, &iter); |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
608 // return TRUE;// FIXME - expand |
9 | 609 } |
610 | |
611 return FALSE; | |
612 } | |
613 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
614 static void vflist_select_image(ViewFile *vf, FileData *sel_fd) |
9 | 615 { |
138 | 616 FileData *read_ahead_fd = NULL; |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
617 gint row; |
144 | 618 FileData *cur_fd; |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
619 if (!sel_fd) return; |
442 | 620 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
621 cur_fd = layout_image_get_fd(vf->layout); |
144 | 622 if (sel_fd == cur_fd) return; /* no change */ |
442 | 623 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
624 row = g_list_index(vf->list, sel_fd); |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
625 // FIXME sidecar data |
9 | 626 |
334 | 627 if (sel_fd && options->image.enable_read_ahead && row >= 0) |
9 | 628 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
629 if (row > g_list_index(vf->list, cur_fd) && |
736 | 630 (guint) (row + 1) < vf_count(vf, NULL)) |
9 | 631 { |
633 | 632 read_ahead_fd = vf_index_get_data(vf, row + 1); |
9 | 633 } |
634 else if (row > 0) | |
635 { | |
633 | 636 read_ahead_fd = vf_index_get_data(vf, row - 1); |
9 | 637 } |
638 } | |
639 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
640 layout_image_set_with_ahead(vf->layout, sel_fd, read_ahead_fd); |
9 | 641 } |
642 | |
643 static gint vflist_select_idle_cb(gpointer data) | |
644 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
645 ViewFile *vf = data; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
646 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
647 if (!vf->layout) |
9 | 648 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
649 VFLIST_INFO(vf, select_idle_id) = -1; |
9 | 650 return FALSE; |
651 } | |
652 | |
633 | 653 vf_send_update(vf); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
654 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
655 if (VFLIST_INFO(vf, select_fd)) |
9 | 656 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
657 vflist_select_image(vf, VFLIST_INFO(vf, select_fd)); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
658 VFLIST_INFO(vf, select_fd) = NULL; |
9 | 659 } |
660 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
661 VFLIST_INFO(vf, select_idle_id) = -1; |
9 | 662 return FALSE; |
663 } | |
664 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
665 static void vflist_select_idle_cancel(ViewFile *vf) |
9 | 666 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
667 if (VFLIST_INFO(vf, select_idle_id) != -1) g_source_remove(VFLIST_INFO(vf, select_idle_id)); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
668 VFLIST_INFO(vf, select_idle_id) = -1; |
9 | 669 } |
670 | |
671 static gboolean vflist_select_cb(GtkTreeSelection *selection, GtkTreeModel *store, GtkTreePath *tpath, | |
672 gboolean path_currently_selected, gpointer data) | |
673 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
674 ViewFile *vf = data; |
9 | 675 GtkTreeIter iter; |
676 | |
677 if (!path_currently_selected && | |
678 gtk_tree_model_get_iter(store, &iter, tpath)) | |
679 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
680 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &VFLIST_INFO(vf, select_fd), -1); |
9 | 681 } |
682 else | |
683 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
684 VFLIST_INFO(vf, select_fd) = NULL; |
9 | 685 } |
686 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
687 if (vf->layout && |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
688 VFLIST_INFO(vf, select_idle_id) == -1) |
9 | 689 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
690 VFLIST_INFO(vf, select_idle_id) = g_idle_add(vflist_select_idle_cb, vf); |
9 | 691 } |
692 | |
693 return TRUE; | |
694 } | |
695 | |
696 /* | |
697 *----------------------------------------------------------------------------- | |
698 * misc | |
699 *----------------------------------------------------------------------------- | |
700 */ | |
701 | |
259 | 702 /* |
93
f1c8f8632e23
Thu Nov 2 14:38:54 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
703 static gboolean vflist_dummy_select_cb(GtkTreeSelection *selection, GtkTreeModel *store, GtkTreePath *tpath, |
442 | 704 gboolean path_currently_selected, gpointer data) |
93
f1c8f8632e23
Thu Nov 2 14:38:54 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
705 { |
f1c8f8632e23
Thu Nov 2 14:38:54 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
706 return TRUE; |
f1c8f8632e23
Thu Nov 2 14:38:54 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
707 } |
259 | 708 */ |
93
f1c8f8632e23
Thu Nov 2 14:38:54 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
709 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
710 static void vflist_setup_iter(ViewFile *vf, GtkTreeStore *store, GtkTreeIter *iter, FileData *fd) |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
711 { |
167 | 712 int i; |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
713 gchar *size; |
167 | 714 gchar *sidecars = NULL; |
715 | |
716 if (fd->sidecar_files) | |
596 | 717 sidecars = file_data_sc_list_to_string(fd); |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
718 size = text_from_size(fd->size); |
442 | 719 |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
720 gtk_tree_store_set(store, iter, FILE_COLUMN_POINTER, fd, |
763
81f9e8dbb4bf
improved infrastructure for tracing changes, optimized vflist_populate_view
nadvornik
parents:
762
diff
changeset
|
721 FILE_COLUMN_VERSION, fd->version, |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
722 FILE_COLUMN_THUMB, (VFLIST_INFO(vf, thumbs_enabled)) ? fd->pixbuf : NULL, |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
723 FILE_COLUMN_NAME, fd->name, |
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
724 FILE_COLUMN_SIDECARS, sidecars, |
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
725 FILE_COLUMN_SIZE, size, |
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
726 FILE_COLUMN_DATE, text_from_time(fd->date), |
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
727 FILE_COLUMN_COLOR, FALSE, -1); |
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
728 for (i = 0; i < FILEDATA_MARKS_SIZE; i++) |
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
729 gtk_tree_store_set(store, iter, FILE_COLUMN_MARKS + i, fd->marks[i], -1); |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
730 |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
731 g_free(size); |
167 | 732 if (sidecars) |
733 g_free(sidecars); | |
734 } | |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
735 |
771
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
736 static void vflist_setup_iter_recursive(ViewFile *vf, GtkTreeStore *store, GtkTreeIter *parent_iter, GList *list, GList *selected) |
167 | 737 { |
738 GList *work; | |
769 | 739 GtkTreeIter iter; |
167 | 740 gint valid; |
741 | |
769 | 742 valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(store), &iter, parent_iter); |
167 | 743 |
769 | 744 work = list; |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
745 while (work) |
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
746 { |
167 | 747 gint match; |
769 | 748 FileData *fd = work->data; |
167 | 749 gint done = FALSE; |
750 | |
751 while (!done) | |
752 { | |
769 | 753 FileData *old_fd = NULL; |
754 gint old_version = 0; | |
442 | 755 |
167 | 756 if (valid) |
757 { | |
769 | 758 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, |
759 FILE_COLUMN_POINTER, &old_fd, | |
760 FILE_COLUMN_VERSION, &old_version, | |
761 -1); | |
442 | 762 |
769 | 763 if (fd == old_fd) |
167 | 764 { |
765 match = 0; | |
766 } | |
767 else | |
768 { | |
769 | 769 if (parent_iter) |
770 match = filelist_sort_compare_filedata_full(fd, old_fd, SORT_NAME, TRUE); /* always sort sidecars by name */ | |
771 else | |
772 match = filelist_sort_compare_filedata_full(fd, old_fd, vf->sort_method, vf->sort_ascend); | |
773 | |
774 if (match == 0) g_warning("multiple fd for the same path"); | |
167 | 775 } |
769 | 776 |
167 | 777 } |
778 else | |
779 { | |
780 match = -1; | |
781 } | |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
782 |
167 | 783 if (match < 0) |
784 { | |
785 GtkTreeIter new; | |
442 | 786 |
167 | 787 if (valid) |
788 { | |
769 | 789 gtk_tree_store_insert_before(store, &new, parent_iter, &iter); |
167 | 790 } |
791 else | |
792 { | |
769 | 793 gtk_tree_store_append(store, &new, parent_iter); |
167 | 794 } |
442 | 795 |
769 | 796 vflist_setup_iter(vf, store, &new, fd); |
771
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
797 vflist_setup_iter_recursive(vf, store, &new, fd->sidecar_files, selected); |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
798 |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
799 if (g_list_find(selected, fd)) |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
800 { |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
801 /* renamed files - the same fd appears at different position - select it again*/ |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
802 GtkTreeSelection *selection; |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
803 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
804 gtk_tree_selection_select_iter(selection, &new); |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
805 } |
167 | 806 |
807 done = TRUE; | |
808 } | |
809 else if (match > 0) | |
810 { | |
769 | 811 valid = gtk_tree_store_remove(store, &iter); |
167 | 812 } |
813 else | |
814 { | |
769 | 815 if (fd->version != old_version) |
816 { | |
817 vflist_setup_iter(vf, store, &iter, fd); | |
771
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
818 vflist_setup_iter_recursive(vf, store, &iter, fd->sidecar_files, selected); |
769 | 819 } |
167 | 820 |
769 | 821 if (valid) valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter); |
167 | 822 |
823 done = TRUE; | |
824 } | |
825 } | |
826 work = work->next; | |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
827 } |
167 | 828 |
829 while (valid) | |
830 { | |
769 | 831 valid = gtk_tree_store_remove(store, &iter); |
167 | 832 } |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
833 } |
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
834 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
835 void vflist_sort_set(ViewFile *vf, SortType type, gint ascend) |
9 | 836 { |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
837 gint i; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
838 GHashTable *fd_idx_hash = g_hash_table_new(NULL, NULL); |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
839 gint *new_order; |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
840 GtkTreeStore *store; |
9 | 841 GList *work; |
842 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
843 if (vf->sort_method == type && vf->sort_ascend == ascend) return; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
844 if (!vf->list) return; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
845 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
846 work = vf->list; |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
847 i = 0; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
848 while (work) |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
849 { |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
850 FileData *fd = work->data; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
851 g_hash_table_insert(fd_idx_hash, fd, GINT_TO_POINTER(i)); |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
852 i++; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
853 work = work->next; |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
854 } |
9 | 855 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
856 vf->sort_method = type; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
857 vf->sort_ascend = ascend; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
858 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
859 vf->list = filelist_sort(vf->list, vf->sort_method, vf->sort_ascend); |
442 | 860 |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
861 new_order = g_malloc(i * sizeof(gint)); |
442 | 862 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
863 work = vf->list; |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
864 i = 0; |
93
f1c8f8632e23
Thu Nov 2 14:38:54 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
865 while (work) |
f1c8f8632e23
Thu Nov 2 14:38:54 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
866 { |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
867 FileData *fd = work->data; |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
868 new_order[i] = GPOINTER_TO_INT(g_hash_table_lookup(fd_idx_hash, fd)); |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
869 i++; |
93
f1c8f8632e23
Thu Nov 2 14:38:54 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
870 work = work->next; |
f1c8f8632e23
Thu Nov 2 14:38:54 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
871 } |
442 | 872 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
873 store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
874 gtk_tree_store_reorder(store, NULL, new_order); |
442 | 875 |
168
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
876 g_free(new_order); |
a55ada12322a
fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
nadvornik
parents:
167
diff
changeset
|
877 g_hash_table_destroy(fd_idx_hash); |
9 | 878 } |
879 | |
880 /* | |
881 *----------------------------------------------------------------------------- | |
882 * thumb updates | |
883 *----------------------------------------------------------------------------- | |
884 */ | |
885 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
886 static gint vflist_thumb_next(ViewFile *vf); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
887 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
888 static void vflist_thumb_status(ViewFile *vf, gdouble val, const gchar *text) |
9 | 889 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
890 if (vf->func_thumb_status) |
9 | 891 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
892 vf->func_thumb_status(vf, val, text, vf->data_thumb_status); |
9 | 893 } |
894 } | |
895 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
896 static void vflist_thumb_cleanup(ViewFile *vf) |
9 | 897 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
898 vflist_thumb_status(vf, 0.0, NULL); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
899 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
900 vf->thumbs_count = 0; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
901 vf->thumbs_running = FALSE; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
902 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
903 thumb_loader_free(vf->thumbs_loader); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
904 vf->thumbs_loader = NULL; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
905 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
906 vf->thumbs_filedata = NULL; |
9 | 907 } |
908 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
909 static void vflist_thumb_stop(ViewFile *vf) |
9 | 910 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
911 if (vf->thumbs_running) vflist_thumb_cleanup(vf); |
9 | 912 } |
913 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
914 static void vflist_thumb_do(ViewFile *vf, ThumbLoader *tl, FileData *fd) |
9 | 915 { |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
916 GtkTreeStore *store; |
9 | 917 GtkTreeIter iter; |
918 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
919 if (!fd || vflist_find_row(vf, fd, &iter) < 0) return; |
9 | 920 |
921 if (fd->pixbuf) g_object_unref(fd->pixbuf); | |
922 fd->pixbuf = thumb_loader_get_pixbuf(tl, TRUE); | |
923 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
924 store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
925 gtk_tree_store_set(store, &iter, FILE_COLUMN_THUMB, fd->pixbuf, -1); |
9 | 926 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
927 vflist_thumb_status(vf, (gdouble)(vf->thumbs_count) / vflist_sidecar_list_count(vf->list), _("Loading thumbs...")); |
9 | 928 } |
929 | |
930 static void vflist_thumb_error_cb(ThumbLoader *tl, gpointer data) | |
931 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
932 ViewFile *vf = data; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
933 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
934 if (vf->thumbs_filedata && vf->thumbs_loader == tl) |
9 | 935 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
936 vflist_thumb_do(vf, tl, vf->thumbs_filedata); |
9 | 937 } |
938 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
939 while (vflist_thumb_next(vf)); |
9 | 940 } |
941 | |
942 static void vflist_thumb_done_cb(ThumbLoader *tl, gpointer data) | |
943 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
944 ViewFile *vf = data; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
945 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
946 if (vf->thumbs_filedata && vf->thumbs_loader == tl) |
9 | 947 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
948 vflist_thumb_do(vf, tl, vf->thumbs_filedata); |
9 | 949 } |
950 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
951 while (vflist_thumb_next(vf)); |
9 | 952 } |
953 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
954 static gint vflist_thumb_next(ViewFile *vf) |
9 | 955 { |
956 GtkTreePath *tpath; | |
957 FileData *fd = NULL; | |
958 | |
959 /* first check the visible files */ | |
960 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
961 if (GTK_WIDGET_REALIZED(vf->listview) && |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
962 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL)) |
9 | 963 { |
964 GtkTreeModel *store; | |
965 GtkTreeIter iter; | |
966 gint valid = TRUE; | |
967 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
968 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
9 | 969 gtk_tree_model_get_iter(store, &iter, tpath); |
970 gtk_tree_path_free(tpath); | |
971 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
972 while (!fd && valid && tree_view_row_get_visibility(GTK_TREE_VIEW(vf->listview), &iter, FALSE) == 0) |
9 | 973 { |
974 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1); | |
975 if (fd->pixbuf) fd = NULL; | |
976 | |
977 valid = gtk_tree_model_iter_next(store, &iter); | |
978 } | |
979 } | |
980 | |
981 /* then find first undone */ | |
982 | |
983 if (!fd) | |
984 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
985 GList *work = vf->list; |
9 | 986 while (work && !fd) |
987 { | |
988 FileData *fd_p = work->data; | |
442 | 989 if (!fd_p->pixbuf) |
169 | 990 fd = fd_p; |
991 else | |
992 { | |
993 GList *work2 = fd_p->sidecar_files; | |
442 | 994 |
169 | 995 while (work2 && !fd) |
996 { | |
442 | 997 fd_p = work2->data; |
169 | 998 if (!fd_p->pixbuf) fd = fd_p; |
999 work2 = work2->next; | |
1000 } | |
1001 } | |
9 | 1002 work = work->next; |
1003 } | |
1004 } | |
1005 | |
1006 if (!fd) | |
1007 { | |
1008 /* done */ | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1009 vflist_thumb_cleanup(vf); |
9 | 1010 return FALSE; |
1011 } | |
1012 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1013 vf->thumbs_count++; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1014 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1015 vf->thumbs_filedata = fd; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1016 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1017 thumb_loader_free(vf->thumbs_loader); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1018 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1019 vf->thumbs_loader = thumb_loader_new(options->thumbnails.max_width, options->thumbnails.max_height); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1020 thumb_loader_set_callbacks(vf->thumbs_loader, |
9 | 1021 vflist_thumb_done_cb, |
1022 vflist_thumb_error_cb, | |
1023 NULL, | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1024 vf); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1025 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1026 if (!thumb_loader_start(vf->thumbs_loader, fd->path)) |
9 | 1027 { |
1028 /* set icon to unknown, continue */ | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1029 DEBUG_1("thumb loader start failed %s", vf->thumbs_loader->path); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1030 vflist_thumb_do(vf, vf->thumbs_loader, fd); |
9 | 1031 |
1032 return TRUE; | |
1033 } | |
1034 | |
1035 return FALSE; | |
1036 } | |
1037 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1038 static void vflist_thumb_update(ViewFile *vf) |
9 | 1039 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1040 vflist_thumb_stop(vf); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1041 if (!VFLIST_INFO(vf, thumbs_enabled)) return; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1042 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1043 vflist_thumb_status(vf, 0.0, _("Loading thumbs...")); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1044 vf->thumbs_running = TRUE; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1045 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1046 while (vflist_thumb_next(vf)); |
9 | 1047 } |
1048 | |
1049 /* | |
1050 *----------------------------------------------------------------------------- | |
1051 * row stuff | |
1052 *----------------------------------------------------------------------------- | |
1053 */ | |
1054 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1055 FileData *vflist_index_get_data(ViewFile *vf, gint row) |
9 | 1056 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1057 return g_list_nth_data(vf->list, row); |
9 | 1058 } |
1059 | |
664
db373fb1b9d8
Merge vflist_row_by_path() into vflist_index_by_path().
zas_
parents:
659
diff
changeset
|
1060 gint vflist_index_by_path(ViewFile *vf, const gchar *path) |
9 | 1061 { |
1062 gint p = 0; | |
1063 GList *work; | |
1064 | |
1065 if (!path) return -1; | |
1066 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1067 work = vf->list; |
9 | 1068 while (work) |
1069 { | |
664
db373fb1b9d8
Merge vflist_row_by_path() into vflist_index_by_path().
zas_
parents:
659
diff
changeset
|
1070 FileData *fd = work->data; |
db373fb1b9d8
Merge vflist_row_by_path() into vflist_index_by_path().
zas_
parents:
659
diff
changeset
|
1071 if (strcmp(path, fd->path) == 0) return p; |
db373fb1b9d8
Merge vflist_row_by_path() into vflist_index_by_path().
zas_
parents:
659
diff
changeset
|
1072 |
9 | 1073 work = work->next; |
1074 p++; | |
1075 } | |
1076 | |
1077 return -1; | |
1078 } | |
1079 | |
736 | 1080 guint vflist_count(ViewFile *vf, gint64 *bytes) |
9 | 1081 { |
1082 if (bytes) | |
1083 { | |
1084 gint64 b = 0; | |
1085 GList *work; | |
1086 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1087 work = vf->list; |
9 | 1088 while (work) |
1089 { | |
1090 FileData *fd = work->data; | |
1091 work = work->next; | |
1092 b += fd->size; | |
1093 } | |
1094 | |
1095 *bytes = b; | |
1096 } | |
1097 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1098 return g_list_length(vf->list); |
9 | 1099 } |
1100 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1101 GList *vflist_get_list(ViewFile *vf) |
9 | 1102 { |
1103 GList *list = NULL; | |
1104 GList *work; | |
1105 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1106 work = vf->list; |
9 | 1107 while (work) |
1108 { | |
1109 FileData *fd = work->data; | |
1110 work = work->next; | |
1111 | |
138 | 1112 list = g_list_prepend(list, file_data_ref(fd)); |
9 | 1113 } |
1114 | |
1115 return g_list_reverse(list); | |
1116 } | |
1117 | |
1118 /* | |
1119 *----------------------------------------------------------------------------- | |
1120 * selections | |
1121 *----------------------------------------------------------------------------- | |
1122 */ | |
1123 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1124 static gint vflist_row_is_selected(ViewFile *vf, FileData *fd) |
9 | 1125 { |
1126 GtkTreeModel *store; | |
1127 GtkTreeSelection *selection; | |
1128 GList *slist; | |
1129 GList *work; | |
1130 gint found = FALSE; | |
1131 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1132 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
9 | 1133 slist = gtk_tree_selection_get_selected_rows(selection, &store); |
1134 work = slist; | |
1135 while (!found && work) | |
1136 { | |
1137 GtkTreePath *tpath = work->data; | |
1138 FileData *fd_n; | |
1139 GtkTreeIter iter; | |
1140 | |
1141 gtk_tree_model_get_iter(store, &iter, tpath); | |
1142 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd_n, -1); | |
1143 if (fd_n == fd) found = TRUE; | |
1144 work = work->next; | |
1145 } | |
1146 g_list_foreach(slist, (GFunc)gtk_tree_path_free, NULL); | |
1147 g_list_free(slist); | |
1148 | |
1149 return found; | |
1150 } | |
1151 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1152 gint vflist_index_is_selected(ViewFile *vf, gint row) |
9 | 1153 { |
1154 FileData *fd; | |
1155 | |
633 | 1156 fd = vf_index_get_data(vf, row); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1157 return vflist_row_is_selected(vf, fd); |
9 | 1158 } |
1159 | |
736 | 1160 guint vflist_selection_count(ViewFile *vf, gint64 *bytes) |
9 | 1161 { |
1162 GtkTreeModel *store; | |
1163 GtkTreeSelection *selection; | |
1164 GList *slist; | |
736 | 1165 guint count; |
9 | 1166 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1167 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
9 | 1168 slist = gtk_tree_selection_get_selected_rows(selection, &store); |
1169 | |
1170 if (bytes) | |
1171 { | |
1172 gint64 b = 0; | |
1173 GList *work; | |
1174 | |
1175 work = slist; | |
1176 while (work) | |
1177 { | |
1178 GtkTreePath *tpath = work->data; | |
1179 GtkTreeIter iter; | |
1180 FileData *fd; | |
1181 | |
1182 gtk_tree_model_get_iter(store, &iter, tpath); | |
1183 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1); | |
1184 b += fd->size; | |
1185 | |
1186 work = work->next; | |
1187 } | |
1188 | |
1189 *bytes = b; | |
1190 } | |
1191 | |
1192 count = g_list_length(slist); | |
1193 g_list_foreach(slist, (GFunc)gtk_tree_path_free, NULL); | |
1194 g_list_free(slist); | |
1195 | |
1196 return count; | |
1197 } | |
1198 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1199 GList *vflist_selection_get_list(ViewFile *vf) |
9 | 1200 { |
1201 GtkTreeModel *store; | |
1202 GtkTreeSelection *selection; | |
1203 GList *slist; | |
1204 GList *list = NULL; | |
1205 GList *work; | |
1206 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1207 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
9 | 1208 slist = gtk_tree_selection_get_selected_rows(selection, &store); |
1209 work = slist; | |
1210 while (work) | |
1211 { | |
1212 GtkTreePath *tpath = work->data; | |
1213 FileData *fd; | |
1214 GtkTreeIter iter; | |
1215 | |
1216 gtk_tree_model_get_iter(store, &iter, tpath); | |
1217 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1); | |
1218 | |
138 | 1219 list = g_list_prepend(list, file_data_ref(fd)); |
9 | 1220 |
1221 work = work->next; | |
1222 } | |
1223 g_list_foreach(slist, (GFunc)gtk_tree_path_free, NULL); | |
1224 g_list_free(slist); | |
1225 | |
1226 return g_list_reverse(list); | |
1227 } | |
1228 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1229 GList *vflist_selection_get_list_by_index(ViewFile *vf) |
9 | 1230 { |
1231 GtkTreeModel *store; | |
1232 GtkTreeSelection *selection; | |
1233 GList *slist; | |
1234 GList *list = NULL; | |
1235 GList *work; | |
1236 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1237 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
9 | 1238 slist = gtk_tree_selection_get_selected_rows(selection, &store); |
1239 work = slist; | |
1240 while (work) | |
1241 { | |
1242 GtkTreePath *tpath = work->data; | |
1243 FileData *fd; | |
1244 GtkTreeIter iter; | |
1245 | |
1246 gtk_tree_model_get_iter(store, &iter, tpath); | |
1247 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1); | |
1248 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1249 list = g_list_prepend(list, GINT_TO_POINTER(g_list_index(vf->list, fd))); |
9 | 1250 |
1251 work = work->next; | |
1252 } | |
1253 g_list_foreach(slist, (GFunc)gtk_tree_path_free, NULL); | |
1254 g_list_free(slist); | |
1255 | |
1256 return g_list_reverse(list); | |
1257 } | |
1258 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1259 void vflist_select_all(ViewFile *vf) |
9 | 1260 { |
1261 GtkTreeSelection *selection; | |
1262 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1263 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
9 | 1264 gtk_tree_selection_select_all(selection); |
1265 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1266 VFLIST_INFO(vf, select_fd) = NULL; |
9 | 1267 } |
1268 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1269 void vflist_select_none(ViewFile *vf) |
9 | 1270 { |
1271 GtkTreeSelection *selection; | |
1272 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1273 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
9 | 1274 gtk_tree_selection_unselect_all(selection); |
1275 } | |
1276 | |
601 | 1277 static gboolean tree_model_iter_prev(GtkTreeModel *store, GtkTreeIter *iter) |
1278 { | |
1279 GtkTreePath *tpath; | |
1280 gboolean result; | |
1281 | |
1282 tpath = gtk_tree_model_get_path(store, iter); | |
1283 result = gtk_tree_path_prev(tpath); | |
1284 if (result) | |
1285 gtk_tree_model_get_iter(store, iter, tpath); | |
1286 | |
1287 gtk_tree_path_free(tpath); | |
1288 | |
1289 return result; | |
1290 } | |
1291 | |
1292 static gboolean tree_model_get_iter_last(GtkTreeModel *store, GtkTreeIter *iter) | |
1293 { | |
1294 if (!gtk_tree_model_get_iter_first(store, iter)) | |
1295 return FALSE; | |
1296 | |
1297 while (TRUE) | |
1298 { | |
1299 GtkTreeIter next = *iter; | |
1300 | |
1301 if (gtk_tree_model_iter_next(store, &next)) | |
1302 *iter = next; | |
1303 else | |
1304 break; | |
1305 } | |
1306 | |
1307 return TRUE; | |
1308 } | |
1309 | |
1310 void vflist_select_invert(ViewFile *vf) | |
1311 { | |
1312 GtkTreeIter iter; | |
1313 GtkTreeSelection *selection; | |
1314 GtkTreeModel *store; | |
1315 gboolean valid; | |
1316 | |
1317 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); | |
1318 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); | |
1319 | |
1320 /* Backward iteration prevents scrolling to the end of the list, | |
1321 * it scrolls to the first selected row instead. */ | |
1322 valid = tree_model_get_iter_last(store, &iter); | |
1323 | |
1324 while (valid) | |
1325 { | |
1326 gint selected = gtk_tree_selection_iter_is_selected(selection, &iter); | |
1327 | |
1328 if (selected) | |
1329 gtk_tree_selection_unselect_iter(selection, &iter); | |
1330 else | |
1331 gtk_tree_selection_select_iter(selection, &iter); | |
1332 | |
1333 valid = tree_model_iter_prev(store, &iter); | |
1334 } | |
1335 } | |
1336 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1337 void vflist_select_by_fd(ViewFile *vf, FileData *fd) |
138 | 1338 { |
9 | 1339 GtkTreeIter iter; |
1340 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1341 if (vflist_find_row(vf, fd, &iter) < 0) return; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1342 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1343 tree_view_row_make_visible(GTK_TREE_VIEW(vf->listview), &iter, TRUE); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1344 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1345 if (!vflist_row_is_selected(vf, fd)) |
9 | 1346 { |
1347 GtkTreeSelection *selection; | |
1348 GtkTreeModel *store; | |
1349 GtkTreePath *tpath; | |
1350 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1351 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
9 | 1352 gtk_tree_selection_unselect_all(selection); |
1353 gtk_tree_selection_select_iter(selection, &iter); | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1354 vflist_move_cursor(vf, &iter); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1355 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1356 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
9 | 1357 tpath = gtk_tree_model_get_path(store, &iter); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1358 gtk_tree_view_set_cursor(GTK_TREE_VIEW(vf->listview), tpath, NULL, FALSE); |
9 | 1359 gtk_tree_path_free(tpath); |
1360 } | |
1361 } | |
1362 | |
771
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1363 static void vflist_select_closest(ViewFile *vf, FileData *sel_fd) |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1364 { |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1365 GList *work; |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1366 |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1367 if (sel_fd->parent) sel_fd = sel_fd->parent; |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1368 work = vf->list; |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1369 |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1370 while (work) |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1371 { |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1372 gint match; |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1373 FileData *fd = work->data; |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1374 work = work->next; |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1375 |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1376 |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1377 match = filelist_sort_compare_filedata_full(fd, sel_fd, vf->sort_method, vf->sort_ascend); |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1378 |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1379 if (match >= 0) |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1380 { |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1381 vflist_select_by_fd(vf, fd); |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1382 break; |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1383 } |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1384 } |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1385 |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1386 } |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1387 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1388 void vflist_mark_to_selection(ViewFile *vf, gint mark, MarkToSelectionMode mode) |
150 | 1389 { |
1390 GtkTreeModel *store; | |
1391 GtkTreeIter iter; | |
1392 GtkTreeSelection *selection; | |
1393 gint valid; | |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
1394 gint n = mark - 1; |
442 | 1395 |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
1396 g_assert(mark >= 1 && mark <= FILEDATA_MARKS_SIZE); |
150 | 1397 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1398 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1399 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
442 | 1400 |
150 | 1401 valid = gtk_tree_model_get_iter_first(store, &iter); |
1402 while (valid) | |
1403 { | |
1404 FileData *fd; | |
161 | 1405 gboolean mark_val, selected; |
150 | 1406 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &fd, -1); |
442 | 1407 |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
1408 mark_val = fd->marks[n]; |
161 | 1409 selected = gtk_tree_selection_iter_is_selected(selection, &iter); |
442 | 1410 |
1411 switch (mode) | |
161 | 1412 { |
1413 case MTS_MODE_SET: selected = mark_val; | |
1414 break; | |
1415 case MTS_MODE_OR: selected = mark_val | selected; | |
1416 break; | |
1417 case MTS_MODE_AND: selected = mark_val & selected; | |
1418 break; | |
1419 case MTS_MODE_MINUS: selected = !mark_val & selected; | |
1420 break; | |
1421 } | |
442 | 1422 |
161 | 1423 if (selected) |
150 | 1424 gtk_tree_selection_select_iter(selection, &iter); |
161 | 1425 else |
1426 gtk_tree_selection_unselect_iter(selection, &iter); | |
150 | 1427 |
1428 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter); | |
1429 } | |
1430 } | |
1431 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1432 void vflist_selection_to_mark(ViewFile *vf, gint mark, SelectionToMarkMode mode) |
150 | 1433 { |
1434 GtkTreeModel *store; | |
1435 GtkTreeSelection *selection; | |
1436 GList *slist; | |
1437 GList *work; | |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
1438 gint n = mark - 1; |
150 | 1439 |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
1440 g_assert(mark >= 1 && mark <= FILEDATA_MARKS_SIZE); |
150 | 1441 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1442 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
150 | 1443 slist = gtk_tree_selection_get_selected_rows(selection, &store); |
1444 work = slist; | |
1445 while (work) | |
1446 { | |
1447 GtkTreePath *tpath = work->data; | |
1448 FileData *fd; | |
1449 GtkTreeIter iter; | |
1450 | |
1451 gtk_tree_model_get_iter(store, &iter, tpath); | |
1452 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1); | |
442 | 1453 |
161 | 1454 switch (mode) |
1455 { | |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
1456 case STM_MODE_SET: fd->marks[n] = 1; |
161 | 1457 break; |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
1458 case STM_MODE_RESET: fd->marks[n] = 0; |
161 | 1459 break; |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
1460 case STM_MODE_TOGGLE: fd->marks[n] = !fd->marks[n]; |
161 | 1461 break; |
1462 } | |
763
81f9e8dbb4bf
improved infrastructure for tracing changes, optimized vflist_populate_view
nadvornik
parents:
762
diff
changeset
|
1463 |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1464 file_data_unregister_notify_func(vflist_notify_cb, vf); /* we don't need the notification */ |
763
81f9e8dbb4bf
improved infrastructure for tracing changes, optimized vflist_populate_view
nadvornik
parents:
762
diff
changeset
|
1465 file_data_increment_version(fd); |
791 | 1466 file_data_register_notify_func(vflist_notify_cb, vf, NOTIFY_PRIORITY_MEDIUM); |
442 | 1467 |
654
6dcfac4b356f
Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
zas_
parents:
637
diff
changeset
|
1468 gtk_tree_store_set(GTK_TREE_STORE(store), &iter, FILE_COLUMN_MARKS + n, fd->marks[n], -1); |
150 | 1469 |
1470 work = work->next; | |
1471 } | |
1472 g_list_foreach(slist, (GFunc)gtk_tree_path_free, NULL); | |
1473 g_list_free(slist); | |
1474 } | |
1475 | |
9 | 1476 /* |
1477 *----------------------------------------------------------------------------- | |
1478 * core (population) | |
1479 *----------------------------------------------------------------------------- | |
1480 */ | |
1481 | |
1482 static void vflist_listview_set_height(GtkWidget *listview, gint thumb) | |
1483 { | |
1484 GtkTreeViewColumn *column; | |
1485 GtkCellRenderer *cell; | |
1486 GList *list; | |
1487 | |
770 | 1488 column = gtk_tree_view_get_column(GTK_TREE_VIEW(listview), 0); /* first column is thumbnail */ |
9 | 1489 if (!column) return; |
1490 | |
333 | 1491 gtk_tree_view_column_set_fixed_width(column, ((thumb) ? options->thumbnails.max_width : 4) + 10); |
9 | 1492 |
1493 list = gtk_tree_view_column_get_cell_renderers(column); | |
1494 if (!list) return; | |
1495 cell = list->data; | |
1496 g_list_free(list); | |
1497 | |
333 | 1498 g_object_set(G_OBJECT(cell), "height", (thumb) ? options->thumbnails.max_height : -1, NULL); |
9 | 1499 gtk_tree_view_columns_autosize(GTK_TREE_VIEW(listview)); |
1500 } | |
1501 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1502 static void vflist_populate_view(ViewFile *vf) |
9 | 1503 { |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
1504 GtkTreeStore *store; |
9 | 1505 gint thumbs; |
1506 GtkTreeRowReference *visible_row = NULL; | |
1507 GtkTreePath *tpath; | |
771
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1508 GList *selected; |
9 | 1509 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1510 store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1511 thumbs = VFLIST_INFO(vf, thumbs_enabled); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1512 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1513 vflist_thumb_stop(vf); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1514 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1515 if (!vf->list) |
9 | 1516 { |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
1517 gtk_tree_store_clear(store); |
633 | 1518 vf_send_update(vf); |
9 | 1519 return; |
1520 } | |
1521 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1522 if (GTK_WIDGET_REALIZED(vf->listview) && |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1523 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL)) |
9 | 1524 { |
1525 visible_row = gtk_tree_row_reference_new(GTK_TREE_MODEL(store), tpath); | |
1526 gtk_tree_path_free(tpath); | |
1527 } | |
1528 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1529 vflist_listview_set_height(vf->listview, thumbs); |
9 | 1530 |
771
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1531 selected = vflist_selection_get_list(vf); |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1532 |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1533 vflist_setup_iter_recursive(vf, store, NULL, vf->list, selected); |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1534 |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1535 if (selected && vflist_selection_count(vf, NULL) == 0) |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1536 { |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1537 /* all selected files disappeared */ |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1538 vflist_select_closest(vf, selected->data); |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1539 } |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1540 |
24726eddb252
vflist_populate_view: better handle selected files that are renamed or deleted
nadvornik
parents:
770
diff
changeset
|
1541 filelist_free(selected); |
769 | 1542 |
9 | 1543 if (visible_row) |
1544 { | |
1545 if (gtk_tree_row_reference_valid(visible_row)) | |
1546 { | |
1547 tpath = gtk_tree_row_reference_get_path(visible_row); | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1548 gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(vf->listview), tpath, NULL, TRUE, 0.0, 0.0); |
9 | 1549 gtk_tree_path_free(tpath); |
1550 } | |
1551 gtk_tree_row_reference_free(visible_row); | |
1552 } | |
1553 | |
633 | 1554 vf_send_update(vf); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1555 vflist_thumb_update(vf); |
9 | 1556 } |
1557 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1558 gint vflist_refresh(ViewFile *vf) |
9 | 1559 { |
1560 GList *old_list; | |
1561 gint ret = TRUE; | |
1562 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1563 old_list = vf->list; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1564 vf->list = NULL; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1565 |
762 | 1566 DEBUG_1("%s vflist_refresh: read dir", get_exec_time()); |
783 | 1567 if (vf->dir_fd) |
9 | 1568 { |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1569 file_data_unregister_notify_func(vflist_notify_cb, vf); /* we don't need the notification of changes detected by filelist_read */ |
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1570 |
783 | 1571 ret = filelist_read(vf->dir_fd, &vf->list, NULL); |
780
44128da39e13
Drop initialization to NULL since filelist_read() will take care of it.
zas_
parents:
775
diff
changeset
|
1572 |
791 | 1573 file_data_register_notify_func(vflist_notify_cb, vf, NOTIFY_PRIORITY_MEDIUM); |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1574 |
780
44128da39e13
Drop initialization to NULL since filelist_read() will take care of it.
zas_
parents:
775
diff
changeset
|
1575 DEBUG_1("%s vflist_refresh: sort", get_exec_time()); |
44128da39e13
Drop initialization to NULL since filelist_read() will take care of it.
zas_
parents:
775
diff
changeset
|
1576 vf->list = filelist_sort(vf->list, vf->sort_method, vf->sort_ascend); |
9 | 1577 } |
762 | 1578 |
1579 DEBUG_1("%s vflist_refresh: populate view", get_exec_time()); | |
1580 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1581 vflist_populate_view(vf); |
9 | 1582 |
1583 filelist_free(old_list); | |
762 | 1584 DEBUG_1("%s vflist_refresh: done", get_exec_time()); |
9 | 1585 |
1586 return ret; | |
1587 } | |
1588 | |
772
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1589 static gint vflist_refresh_idle_cb(gpointer data) |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1590 { |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1591 ViewFile *vf = data; |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1592 |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1593 vflist_refresh(vf); |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1594 vf->refresh_idle_id = -1; |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1595 return FALSE; |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1596 } |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1597 |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1598 static void vflist_refresh_idle_cancel(ViewFile *vf) |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1599 { |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1600 if (vf->refresh_idle_id != -1) g_source_remove(vf->refresh_idle_id); |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1601 vf->refresh_idle_id = -1; |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1602 } |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1603 |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1604 |
9 | 1605 /* this overrides the low default of a GtkCellRenderer from 100 to CELL_HEIGHT_OVERRIDE, something sane for our purposes */ |
1606 | |
1607 #define CELL_HEIGHT_OVERRIDE 512 | |
1608 | |
1609 static void cell_renderer_height_override(GtkCellRenderer *renderer) | |
1610 { | |
1611 GParamSpec *spec; | |
1612 | |
1613 spec = g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(renderer)), "height"); | |
1614 if (spec && G_IS_PARAM_SPEC_INT(spec)) | |
1615 { | |
1616 GParamSpecInt *spec_int; | |
1617 | |
1618 spec_int = G_PARAM_SPEC_INT(spec); | |
1619 if (spec_int->maximum < CELL_HEIGHT_OVERRIDE) spec_int->maximum = CELL_HEIGHT_OVERRIDE; | |
1620 } | |
1621 } | |
1622 | |
1623 static GdkColor *vflist_listview_color_shifted(GtkWidget *widget) | |
1624 { | |
1625 static GdkColor color; | |
1626 static GtkWidget *done = NULL; | |
1627 | |
1628 if (done != widget) | |
1629 { | |
1630 GtkStyle *style; | |
1631 | |
1632 style = gtk_widget_get_style(widget); | |
1633 memcpy(&color, &style->base[GTK_STATE_NORMAL], sizeof(color)); | |
1634 shift_color(&color, -1, 0); | |
1635 done = widget; | |
1636 } | |
1637 | |
1638 return &color; | |
1639 } | |
1640 | |
1641 static void vflist_listview_color_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, | |
1642 GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) | |
1643 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1644 ViewFile *vf = data; |
9 | 1645 gboolean set; |
1646 | |
1647 gtk_tree_model_get(tree_model, iter, FILE_COLUMN_COLOR, &set, -1); | |
1648 g_object_set(G_OBJECT(cell), | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1649 "cell-background-gdk", vflist_listview_color_shifted(vf->listview), |
9 | 1650 "cell-background-set", set, NULL); |
1651 } | |
1652 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1653 static void vflist_listview_add_column(ViewFile *vf, gint n, const gchar *title, gint image, gint right_justify, gint expand) |
9 | 1654 { |
1655 GtkTreeViewColumn *column; | |
1656 GtkCellRenderer *renderer; | |
1657 | |
1658 column = gtk_tree_view_column_new(); | |
1659 gtk_tree_view_column_set_title(column, title); | |
1660 gtk_tree_view_column_set_min_width(column, 4); | |
1661 | |
1662 if (!image) | |
1663 { | |
149 | 1664 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); |
9 | 1665 renderer = gtk_cell_renderer_text_new(); |
1666 if (right_justify) | |
1667 { | |
1668 g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL); | |
1669 } | |
1670 gtk_tree_view_column_pack_start(column, renderer, TRUE); | |
1671 gtk_tree_view_column_add_attribute(column, renderer, "text", n); | |
149 | 1672 if (expand) |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
1673 gtk_tree_view_column_set_expand(column, TRUE); |
149 | 1674 } |
9 | 1675 else |
1676 { | |
1677 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); | |
1678 renderer = gtk_cell_renderer_pixbuf_new(); | |
1679 cell_renderer_height_override(renderer); | |
1680 gtk_tree_view_column_pack_start(column, renderer, TRUE); | |
1681 gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", n); | |
1682 } | |
1683 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1684 gtk_tree_view_column_set_cell_data_func(column, renderer, vflist_listview_color_cb, vf, NULL); |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1685 g_object_set_data(G_OBJECT(column), "column_store_idx", GUINT_TO_POINTER(n)); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1686 g_object_set_data(G_OBJECT(renderer), "column_store_idx", GUINT_TO_POINTER(n)); |
9 | 1687 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1688 gtk_tree_view_append_column(GTK_TREE_VIEW(vf->listview), column); |
9 | 1689 } |
1690 | |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1691 static void vflist_listview_mark_toggled_cb(GtkCellRendererToggle *cell, gchar *path_str, gpointer data) |
132 | 1692 { |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1693 ViewFile *vf = data; |
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1694 GtkTreeStore *store; |
149 | 1695 GtkTreePath *path = gtk_tree_path_new_from_string(path_str); |
1696 GtkTreeIter iter; | |
1697 FileData *fd; | |
1698 gboolean mark; | |
1699 guint col_idx; | |
442 | 1700 |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1701 store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); |
149 | 1702 if (!path || !gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path)) |
1703 return; | |
132 | 1704 |
513
985fdfebd89e
Remove whitespace between function name and first parenthesis for the sake of consistency. (pass 2)
zas_
parents:
512
diff
changeset
|
1705 col_idx = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell), "column_store_idx")); |
442 | 1706 |
149 | 1707 g_assert(col_idx >= FILE_COLUMN_MARKS && col_idx <= FILE_COLUMN_MARKS_LAST); |
442 | 1708 |
149 | 1709 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &fd, col_idx, &mark, -1); |
150 | 1710 mark = !mark; |
149 | 1711 fd->marks[col_idx - FILE_COLUMN_MARKS] = mark; |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1712 file_data_unregister_notify_func(vflist_notify_cb, vf); /* we don't need the notification */ |
763
81f9e8dbb4bf
improved infrastructure for tracing changes, optimized vflist_populate_view
nadvornik
parents:
762
diff
changeset
|
1713 file_data_increment_version(fd); |
791 | 1714 file_data_register_notify_func(vflist_notify_cb, vf, NOTIFY_PRIORITY_MEDIUM); |
442 | 1715 |
149 | 1716 gtk_tree_store_set(store, &iter, col_idx, mark, -1); |
1717 gtk_tree_path_free(path); | |
132 | 1718 } |
1719 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1720 static void vflist_listview_add_column_toggle(ViewFile *vf, gint n, const gchar *title) |
132 | 1721 { |
149 | 1722 GtkTreeViewColumn *column; |
1723 GtkCellRenderer *renderer; | |
1724 GtkTreeStore *store; | |
1725 gint index; | |
442 | 1726 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1727 store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); |
132 | 1728 |
149 | 1729 renderer = gtk_cell_renderer_toggle_new(); |
1730 column = gtk_tree_view_column_new_with_attributes(title, renderer, "active", n, NULL); | |
132 | 1731 |
149 | 1732 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1733 g_object_set_data(G_OBJECT(column), "column_store_idx", GUINT_TO_POINTER(n)); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1734 g_object_set_data(G_OBJECT(renderer), "column_store_idx", GUINT_TO_POINTER(n)); |
442 | 1735 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1736 index = gtk_tree_view_append_column(GTK_TREE_VIEW(vf->listview), column); |
149 | 1737 gtk_tree_view_column_set_fixed_width(column, 16); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1738 gtk_tree_view_column_set_visible(column, vf->marks_enabled); |
132 | 1739 |
442 | 1740 |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1741 g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(vflist_listview_mark_toggled_cb), vf); |
132 | 1742 } |
1743 | |
9 | 1744 /* |
1745 *----------------------------------------------------------------------------- | |
1746 * base | |
1747 *----------------------------------------------------------------------------- | |
1748 */ | |
1749 | |
783 | 1750 gint vflist_set_fd(ViewFile *vf, FileData *dir_fd) |
9 | 1751 { |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
1752 GtkTreeStore *store; |
9 | 1753 |
783 | 1754 if (!dir_fd) return FALSE; |
1755 if (vf->dir_fd == dir_fd) return TRUE; | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1756 |
783 | 1757 file_data_unref(vf->dir_fd); |
1758 vf->dir_fd = file_data_ref(dir_fd); | |
9 | 1759 |
1760 /* force complete reload */ | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1761 store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
1762 gtk_tree_store_clear(store); |
9 | 1763 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1764 filelist_free(vf->list); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1765 vf->list = NULL; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1766 |
633 | 1767 return vf_refresh(vf); |
9 | 1768 } |
1769 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1770 void vflist_destroy_cb(GtkWidget *widget, gpointer data) |
9 | 1771 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1772 ViewFile *vf = data; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1773 |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1774 file_data_unregister_notify_func(vflist_notify_cb, vf); |
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1775 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1776 vflist_select_idle_cancel(vf); |
772
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1777 vflist_refresh_idle_cancel(vf); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1778 vflist_thumb_stop(vf); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1779 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1780 filelist_free(vf->list); |
9 | 1781 } |
1782 | |
783 | 1783 ViewFile *vflist_new(ViewFile *vf, FileData *dir_fd) |
9 | 1784 { |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
1785 GtkTreeStore *store; |
9 | 1786 GtkTreeSelection *selection; |
1787 | |
149 | 1788 GType flist_types[FILE_COLUMN_COUNT]; |
1789 int i; | |
442 | 1790 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1791 vf->info = g_new0(ViewFileInfoList, 1); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1792 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1793 VFLIST_INFO(vf, click_fd) = NULL; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1794 VFLIST_INFO(vf, select_fd) = NULL; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1795 VFLIST_INFO(vf, thumbs_enabled) = FALSE; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1796 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1797 VFLIST_INFO(vf, select_idle_id) = -1; |
772
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1798 vf->refresh_idle_id = -1; |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1799 |
9 | 1800 |
139 | 1801 flist_types[FILE_COLUMN_POINTER] = G_TYPE_POINTER; |
763
81f9e8dbb4bf
improved infrastructure for tracing changes, optimized vflist_populate_view
nadvornik
parents:
762
diff
changeset
|
1802 flist_types[FILE_COLUMN_VERSION] = G_TYPE_INT; |
139 | 1803 flist_types[FILE_COLUMN_THUMB] = GDK_TYPE_PIXBUF; |
1804 flist_types[FILE_COLUMN_NAME] = G_TYPE_STRING; | |
1805 flist_types[FILE_COLUMN_SIDECARS] = G_TYPE_STRING; | |
1806 flist_types[FILE_COLUMN_SIZE] = G_TYPE_STRING; | |
1807 flist_types[FILE_COLUMN_DATE] = G_TYPE_STRING; | |
1808 flist_types[FILE_COLUMN_COLOR] = G_TYPE_BOOLEAN; | |
1809 for (i = FILE_COLUMN_MARKS; i < FILE_COLUMN_MARKS + FILEDATA_MARKS_SIZE; i++) | |
1810 flist_types[i] = G_TYPE_BOOLEAN; | |
132 | 1811 |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
1812 store = gtk_tree_store_newv(FILE_COLUMN_COUNT, flist_types); |
442 | 1813 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1814 vf->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); |
9 | 1815 g_object_unref(store); |
1816 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1817 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
9 | 1818 gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_MULTIPLE); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1819 gtk_tree_selection_set_select_function(selection, vflist_select_cb, vf, NULL); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1820 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1821 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(vf->listview), FALSE); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1822 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(vf->listview), FALSE); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1823 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1824 vflist_listview_add_column(vf, FILE_COLUMN_THUMB, "", TRUE, FALSE, FALSE); |
9 | 1825 |
518 | 1826 for (i = 0; i < FILEDATA_MARKS_SIZE; i++) |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1827 vflist_listview_add_column_toggle(vf, i + FILE_COLUMN_MARKS, ""); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1828 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1829 vflist_listview_add_column(vf, FILE_COLUMN_NAME, _("Name"), FALSE, FALSE, FALSE); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1830 vflist_listview_add_column(vf, FILE_COLUMN_SIDECARS, _("SC"), FALSE, FALSE, FALSE); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1831 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1832 vflist_listview_add_column(vf, FILE_COLUMN_SIZE, _("Size"), FALSE, TRUE, FALSE); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1833 vflist_listview_add_column(vf, FILE_COLUMN_DATE, _("Date"), FALSE, TRUE, FALSE); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1834 |
791 | 1835 file_data_register_notify_func(vflist_notify_cb, vf, NOTIFY_PRIORITY_MEDIUM); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1836 return vf; |
9 | 1837 } |
1838 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1839 void vflist_thumb_set(ViewFile *vf, gint enable) |
9 | 1840 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1841 if (VFLIST_INFO(vf, thumbs_enabled) == enable) return; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1842 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1843 VFLIST_INFO(vf, thumbs_enabled) = enable; |
633 | 1844 if (vf->layout) vf_refresh(vf); |
9 | 1845 } |
1846 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1847 void vflist_marks_set(ViewFile *vf, gint enable) |
132 | 1848 { |
149 | 1849 GList *columns, *work; |
442 | 1850 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1851 if (vf->marks_enabled == enable) return; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1852 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1853 vf->marks_enabled = enable; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1854 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1855 columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(vf->listview)); |
442 | 1856 |
149 | 1857 work = columns; |
1858 while (work) | |
1859 { | |
1860 GtkTreeViewColumn *column = work->data; | |
513
985fdfebd89e
Remove whitespace between function name and first parenthesis for the sake of consistency. (pass 2)
zas_
parents:
512
diff
changeset
|
1861 gint col_idx = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(column), "column_store_idx")); |
149 | 1862 work = work->next; |
442 | 1863 |
1864 if (col_idx <= FILE_COLUMN_MARKS_LAST && col_idx >= FILE_COLUMN_MARKS) | |
149 | 1865 gtk_tree_view_column_set_visible(column, enable); |
1866 } | |
442 | 1867 |
149 | 1868 g_list_free(columns); |
633 | 1869 //vf_refresh(vf); |
132 | 1870 } |
1871 | |
9 | 1872 /* |
1873 *----------------------------------------------------------------------------- | |
1874 * maintenance (for rename, move, remove) | |
1875 *----------------------------------------------------------------------------- | |
1876 */ | |
1877 | |
792 | 1878 static void vflist_notify_cb(FileData *fd, NotifyType type, gpointer data) |
772
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1879 { |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1880 ViewFile *vf = data; |
775
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1881 gboolean refresh; |
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1882 |
772
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1883 if (vf->refresh_idle_id != -1) return; |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1884 |
783 | 1885 refresh = (fd == vf->dir_fd); |
775
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1886 |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1887 if (!refresh) |
783 | 1888 { |
1889 gchar *base = remove_level_from_path(fd->path); | |
1890 refresh = (strcmp(base, vf->dir_fd->path) == 0); | |
1891 g_free(base); | |
1892 } | |
1893 | |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1894 if (!refresh && fd->change && fd->change->dest) |
775
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1895 { |
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1896 gchar *dest_base = remove_level_from_path(fd->change->dest); |
783 | 1897 refresh = (strcmp(dest_base, vf->dir_fd->path) == 0); |
775
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1898 g_free(dest_base); |
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1899 } |
772
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1900 |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1901 if (!refresh && fd->change && fd->change->source) |
775
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1902 { |
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1903 gchar *source_base = remove_level_from_path(fd->change->source); |
783 | 1904 refresh = (strcmp(source_base, vf->dir_fd->path) == 0); |
775
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1905 g_free(source_base); |
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1906 } |
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1907 |
85253619d522
vflist_maint(): only allocate memory and compare strings if needed.
zas_
parents:
772
diff
changeset
|
1908 if (refresh) |
772
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1909 { |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1910 vf->refresh_idle_id = g_idle_add(vflist_refresh_idle_cb, vf); |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1911 } |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1912 } |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1913 |
784
16b3a5c8aedc
new notification system (used only in vflist for now)
nadvornik
parents:
783
diff
changeset
|
1914 #if 0 |
772
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1915 |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1916 gint vflist_maint_renamed(ViewFile *vf, FileData *fd) |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1917 { |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1918 vflist_maint(vf, fd); |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1919 return TRUE; |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1920 } |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1921 gint vflist_maint_removed(ViewFile *vf, FileData *fd, GList *ignore_list) |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1922 { |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1923 vflist_maint(vf, fd); |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1924 return TRUE; |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1925 } |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1926 gint vflist_maint_moved(ViewFile *vf, FileData *fd, GList *ignore_list) |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1927 { |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1928 vflist_maint(vf, fd); |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1929 return TRUE; |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1930 } |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1931 |
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
1932 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1933 static gint vflist_maint_find_closest(ViewFile *vf, gint row, gint count, GList *ignore_list) |
9 | 1934 { |
1935 GList *list = NULL; | |
1936 GList *work; | |
1937 gint rev = row - 1; | |
1938 row ++; | |
1939 | |
1940 work = ignore_list; | |
1941 while (work) | |
1942 { | |
633 | 1943 gint f = vf_index_by_path(vf, work->data); |
9 | 1944 if (f >= 0) list = g_list_prepend(list, GINT_TO_POINTER(f)); |
1945 work = work->next; | |
1946 } | |
1947 | |
1948 while (list) | |
1949 { | |
1950 gint c = TRUE; | |
1951 work = list; | |
1952 while (work && c) | |
1953 { | |
1954 gpointer p = work->data; | |
1955 work = work->next; | |
1956 if (row == GPOINTER_TO_INT(p)) | |
1957 { | |
1958 row++; | |
1959 c = FALSE; | |
1960 } | |
1961 if (rev == GPOINTER_TO_INT(p)) | |
1962 { | |
1963 rev--; | |
1964 c = FALSE; | |
1965 } | |
1966 if (!c) list = g_list_remove(list, p); | |
1967 } | |
1968 if (c && list) | |
1969 { | |
1970 g_list_free(list); | |
1971 list = NULL; | |
1972 } | |
1973 } | |
1974 if (row > count - 1) | |
1975 { | |
1976 if (rev < 0) | |
1977 return -1; | |
1978 else | |
1979 return rev; | |
1980 } | |
1981 else | |
1982 { | |
1983 return row; | |
1984 } | |
1985 } | |
1986 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1987 gint vflist_maint_renamed(ViewFile *vf, FileData *fd) |
9 | 1988 { |
1989 gint ret = FALSE; | |
1990 gchar *source_base; | |
1991 gchar *dest_base; | |
1992 | |
762 | 1993 DEBUG_1("%s vflist_maint_renamed: start", get_exec_time()); |
1994 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
1995 if (g_list_index(vf->list, fd) < 0) return FALSE; |
9 | 1996 |
138 | 1997 source_base = remove_level_from_path(fd->change->source); |
1998 dest_base = remove_level_from_path(fd->change->dest); | |
9 | 1999 |
2000 | |
2001 if (strcmp(source_base, dest_base) == 0) | |
2002 { | |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
2003 GtkTreeStore *store; |
9 | 2004 GtkTreeIter iter; |
2005 GtkTreeIter position; | |
2006 gint old_row; | |
2007 gint n; | |
2008 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2009 old_row = g_list_index(vf->list, fd); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2010 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2011 vf->list = g_list_remove(vf->list, fd); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2012 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2013 vf->list = filelist_insert_sort(vf->list, fd, vf->sort_method, vf->sort_ascend); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2014 n = g_list_index(vf->list, fd); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2015 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2016 store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2017 if (vflist_find_row(vf, fd, &iter) >= 0 && |
9 | 2018 gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &position, NULL, n)) |
2019 { | |
2020 if (old_row >= n) | |
2021 { | |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
2022 gtk_tree_store_move_before(store, &iter, &position); |
9 | 2023 } |
2024 else | |
2025 { | |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
2026 gtk_tree_store_move_after(store, &iter, &position); |
9 | 2027 } |
2028 } | |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
2029 gtk_tree_store_set(store, &iter, FILE_COLUMN_NAME, fd->name, -1); |
9 | 2030 |
2031 ret = TRUE; | |
2032 } | |
2033 else | |
2034 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2035 ret = vflist_maint_removed(vf, fd, NULL); |
9 | 2036 } |
2037 | |
2038 g_free(source_base); | |
2039 g_free(dest_base); | |
2040 | |
762 | 2041 DEBUG_1("%s vflist_maint_renamed: done", get_exec_time()); |
2042 | |
9 | 2043 return ret; |
2044 } | |
2045 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2046 gint vflist_maint_removed(ViewFile *vf, FileData *fd, GList *ignore_list) |
9 | 2047 { |
2048 GtkTreeIter iter; | |
2049 GList *list; | |
2050 gint row; | |
2051 gint new_row = -1; | |
2052 | |
762 | 2053 DEBUG_1("%s vflist_maint_removed: start", get_exec_time()); |
2054 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2055 row = g_list_index(vf->list, fd); |
9 | 2056 if (row < 0) return FALSE; |
2057 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2058 if (vflist_index_is_selected(vf, row) && |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2059 layout_image_get_collection(vf->layout, NULL) == NULL) |
9 | 2060 { |
2061 gint n; | |
2062 | |
633 | 2063 n = vf_count(vf, NULL); |
9 | 2064 if (ignore_list) |
2065 { | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2066 new_row = vflist_maint_find_closest(vf, row, n, ignore_list); |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
497
diff
changeset
|
2067 DEBUG_1("row = %d, closest is %d", row, new_row); |
9 | 2068 } |
2069 else | |
2070 { | |
2071 if (row + 1 < n) | |
2072 { | |
2073 new_row = row + 1; | |
2074 } | |
2075 else if (row > 0) | |
2076 { | |
2077 new_row = row - 1; | |
2078 } | |
2079 } | |
633 | 2080 vf_select_none(vf); |
9 | 2081 if (new_row >= 0) |
2082 { | |
633 | 2083 fd = vf_index_get_data(vf, new_row); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2084 if (vflist_find_row(vf, fd, &iter) >= 0) |
9 | 2085 { |
2086 GtkTreeSelection *selection; | |
2087 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2088 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
9 | 2089 gtk_tree_selection_select_iter(selection, &iter); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2090 vflist_move_cursor(vf, &iter); |
9 | 2091 } |
2092 } | |
2093 } | |
2094 | |
633 | 2095 fd = vf_index_get_data(vf, row); |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2096 if (vflist_find_row(vf, fd, &iter) >= 0) |
9 | 2097 { |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
2098 GtkTreeStore *store; |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2099 store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); |
142
b5aa95241859
display sidecar files (jpeg + raw) using gtk_tree_store
nadvornik
parents:
139
diff
changeset
|
2100 gtk_tree_store_remove(store, &iter); |
9 | 2101 } |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2102 list = g_list_nth(vf->list, row); |
9 | 2103 fd = list->data; |
2104 | |
2105 /* thumbnail loader check */ | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2106 if (fd == vf->thumbs_filedata) vf->thumbs_filedata = NULL; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2107 if (vf->thumbs_count > 0) vf->thumbs_count--; |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2108 |
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2109 vf->list = g_list_remove(vf->list, fd); |
138 | 2110 file_data_unref(fd); |
9 | 2111 |
633 | 2112 vf_send_update(vf); |
9 | 2113 |
762 | 2114 DEBUG_1("%s vflist_maint_removed: done", get_exec_time()); |
2115 | |
9 | 2116 return TRUE; |
2117 } | |
2118 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2119 gint vflist_maint_moved(ViewFile *vf, FileData *fd, GList *ignore_list) |
9 | 2120 { |
2121 gint ret = FALSE; | |
2122 gchar *buf; | |
2123 | |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2124 if (!fd->change->source || !vf->path) return FALSE; |
9 | 2125 |
138 | 2126 buf = remove_level_from_path(fd->change->source); |
9 | 2127 |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2128 if (strcmp(buf, vf->path) == 0) |
9 | 2129 { |
573
2996f1bbc305
Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
zas_
parents:
559
diff
changeset
|
2130 ret = vflist_maint_removed(vf, fd, ignore_list); |
9 | 2131 } |
2132 | |
2133 g_free(buf); | |
2134 | |
2135 return ret; | |
2136 } | |
772
f53c2bb5b1b1
replaced vflist_maint functions by vflist_refresh - it allows to follow
nadvornik
parents:
771
diff
changeset
|
2137 #endif |