Mercurial > geeqie
annotate src/img-view.c @ 368:95fe470440ad
New Go to directory view feature that permits to find and display the directory
corresponding to an image view.
For example, when you open an image in new window from collection, right clicking on
the newly displayed image will let you choose Go to directory view, which would open
a new window, with image and directory list.
If current directory is the one of the image, menu item is disabled.
author | zas_ |
---|---|
date | Tue, 15 Apr 2008 06:56:25 +0000 |
parents | 384eed18df04 |
children | 959b6fcdaa17 |
rev | line source |
---|---|
1 | 1 /* |
196 | 2 * Geeqie |
94
50dc5a14d37b
Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
3 * (C) 2006 John Ellis |
1 | 4 * |
5 * Author: John Ellis | |
6 * | |
9 | 7 * This software is released under the GNU General Public License (GNU GPL). |
8 * Please read the included file COPYING for more information. | |
9 * This software comes with no warranty of any kind, use at your own risk! | |
1 | 10 */ |
11 | |
9 | 12 |
281 | 13 #include "main.h" |
9 | 14 #include "img-view.h" |
15 | |
16 #include "collect.h" | |
17 #include "collect-io.h" | |
18 #include "dnd.h" | |
19 #include "editors.h" | |
20 #include "filelist.h" | |
21 #include "fullscreen.h" | |
1 | 22 #include "image.h" |
9 | 23 #include "image-overlay.h" |
24 #include "info.h" | |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
25 #include "layout.h" |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
26 #include "layout_image.h" |
9 | 27 #include "menu.h" |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
28 #include "pixbuf-renderer.h" |
91
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
89
diff
changeset
|
29 #include "pixbuf_util.h" |
94
50dc5a14d37b
Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
30 #include "print.h" |
9 | 31 #include "slideshow.h" |
32 #include "utilops.h" | |
33 #include "ui_bookmark.h" | |
34 #include "ui_fileops.h" | |
35 #include "ui_menu.h" | |
36 | |
1 | 37 #include <gdk/gdkkeysyms.h> /* for keyboard values */ |
38 | |
9 | 39 |
40 typedef struct _ViewWindow ViewWindow; | |
41 struct _ViewWindow | |
42 { | |
43 GtkWidget *window; | |
44 ImageWindow *imd; | |
45 FullScreenData *fs; | |
46 SlideShowData *ss; | |
47 | |
48 GList *list; | |
49 GList *list_pointer; | |
50 }; | |
51 | |
52 | |
53 static GList *view_window_list = NULL; | |
54 | |
55 | |
56 static GtkWidget *view_popup_menu(ViewWindow *vw); | |
57 static void view_fullscreen_toggle(ViewWindow *vw, gint force_off); | |
58 static void view_overlay_toggle(ViewWindow *vw); | |
59 | |
60 static void view_slideshow_next(ViewWindow *vw); | |
61 static void view_slideshow_prev(ViewWindow *vw); | |
62 static void view_slideshow_start(ViewWindow *vw); | |
63 static void view_slideshow_stop(ViewWindow *vw); | |
64 | |
65 static void view_window_close(ViewWindow *vw); | |
66 | |
67 static void view_window_dnd_init(ViewWindow *vw); | |
68 | |
69 | |
70 /* | |
71 *----------------------------------------------------------------------------- | |
72 * misc | |
73 *----------------------------------------------------------------------------- | |
74 */ | |
75 | |
76 static ImageWindow *view_window_active_image(ViewWindow *vw) | |
77 { | |
78 if (vw->fs) return vw->fs->imd; | |
79 | |
80 return vw->imd; | |
81 } | |
82 | |
83 static void view_window_set_list(ViewWindow *vw, GList *list) | |
84 { | |
85 | |
138 | 86 filelist_free(vw->list); |
9 | 87 vw->list = NULL; |
88 vw->list_pointer = NULL; | |
89 | |
138 | 90 vw->list = filelist_copy(list); |
9 | 91 } |
92 | |
93 static gint view_window_contains_collection(ViewWindow *vw) | |
94 { | |
95 CollectionData *cd; | |
96 CollectInfo *info; | |
97 | |
98 cd = image_get_collection(view_window_active_image(vw), &info); | |
99 | |
100 return (cd && info); | |
101 } | |
102 | |
103 static void view_collection_step(ViewWindow *vw, gint next) | |
104 { | |
105 ImageWindow *imd = view_window_active_image(vw); | |
106 CollectionData *cd; | |
107 CollectInfo *info; | |
108 CollectInfo *read_ahead_info = NULL; | |
109 | |
110 cd = image_get_collection(imd, &info); | |
111 | |
112 if (!cd || !info) return; | |
113 | |
114 if (next) | |
115 { | |
116 info = collection_next_by_info(cd, info); | |
334 | 117 if (options->image.enable_read_ahead) |
9 | 118 { |
119 read_ahead_info = collection_next_by_info(cd, info); | |
120 if (!read_ahead_info) read_ahead_info = collection_prev_by_info(cd, info); | |
121 } | |
122 } | |
123 else | |
124 { | |
125 info = collection_prev_by_info(cd, info); | |
334 | 126 if (options->image.enable_read_ahead) |
9 | 127 { |
128 read_ahead_info = collection_prev_by_info(cd, info); | |
129 if (!read_ahead_info) read_ahead_info = collection_next_by_info(cd, info); | |
130 } | |
131 } | |
132 | |
133 if (info) | |
134 { | |
334 | 135 image_change_from_collection(imd, cd, info, image_zoom_get_default(imd, options->image.zoom_mode)); |
9 | 136 |
138 | 137 if (read_ahead_info) image_prebuffer_set(imd, read_ahead_info->fd); |
9 | 138 } |
139 | |
140 } | |
141 | |
142 static void view_collection_step_to_end(ViewWindow *vw, gint last) | |
143 { | |
144 ImageWindow *imd = view_window_active_image(vw); | |
145 CollectionData *cd; | |
146 CollectInfo *info; | |
147 CollectInfo *read_ahead_info = NULL; | |
148 | |
149 cd = image_get_collection(imd, &info); | |
150 | |
151 if (!cd || !info) return; | |
152 | |
153 if (last) | |
154 { | |
155 info = collection_get_last(cd); | |
334 | 156 if (options->image.enable_read_ahead) read_ahead_info = collection_prev_by_info(cd, info); |
9 | 157 } |
158 else | |
159 { | |
160 info = collection_get_first(cd); | |
334 | 161 if (options->image.enable_read_ahead) read_ahead_info = collection_next_by_info(cd, info); |
9 | 162 } |
163 | |
164 if (info) | |
165 { | |
334 | 166 image_change_from_collection(imd, cd, info, image_zoom_get_default(imd, options->image.zoom_mode)); |
138 | 167 if (read_ahead_info) image_prebuffer_set(imd, read_ahead_info->fd); |
9 | 168 } |
169 } | |
170 | |
171 static void view_list_step(ViewWindow *vw, gint next) | |
172 { | |
173 ImageWindow *imd = view_window_active_image(vw); | |
138 | 174 FileData *fd; |
9 | 175 GList *work; |
176 GList *work_ahead; | |
177 | |
178 if (!vw->list) return; | |
179 | |
138 | 180 fd = image_get_fd(imd); |
181 if (!fd) return; | |
9 | 182 |
183 if (g_list_position(vw->list, vw->list_pointer) >= 0) | |
184 { | |
185 work = vw->list_pointer; | |
186 } | |
187 else | |
188 { | |
189 gint found = FALSE; | |
190 | |
191 work = vw->list; | |
192 while (work && !found) | |
193 { | |
138 | 194 FileData *temp; |
9 | 195 |
196 temp = work->data; | |
197 | |
138 | 198 if (fd == temp) |
9 | 199 { |
200 found = TRUE; | |
201 } | |
202 else | |
203 { | |
204 work = work->next; | |
205 } | |
206 } | |
207 } | |
208 if (!work) return; | |
209 | |
210 work_ahead = NULL; | |
211 if (next) | |
212 { | |
213 work = work->next; | |
214 if (work) work_ahead = work->next; | |
215 } | |
216 else | |
217 { | |
218 work = work->prev; | |
219 if (work) work_ahead = work->prev; | |
220 } | |
118
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
221 |
9 | 222 if (!work) return; |
223 | |
224 vw->list_pointer = work; | |
138 | 225 fd = work->data; |
334 | 226 image_change_fd(imd, fd, image_zoom_get_default(imd, options->image.zoom_mode)); |
9 | 227 |
334 | 228 if (options->image.enable_read_ahead && work_ahead) |
9 | 229 { |
138 | 230 FileData *next_fd = work_ahead->data; |
231 image_prebuffer_set(imd, next_fd); | |
9 | 232 } |
233 } | |
234 | |
235 static void view_list_step_to_end(ViewWindow *vw, gint last) | |
236 { | |
237 ImageWindow *imd = view_window_active_image(vw); | |
138 | 238 FileData *fd; |
9 | 239 GList *work; |
240 GList *work_ahead; | |
241 | |
242 if (!vw->list) return; | |
243 | |
244 if (last) | |
245 { | |
246 work = g_list_last(vw->list); | |
247 work_ahead = work->prev; | |
248 } | |
249 else | |
250 { | |
251 work = vw->list; | |
252 work_ahead = work->next; | |
253 } | |
254 | |
255 vw->list_pointer = work; | |
138 | 256 fd = work->data; |
334 | 257 image_change_fd(imd, fd, image_zoom_get_default(imd, options->image.zoom_mode)); |
9 | 258 |
334 | 259 if (options->image.enable_read_ahead && work_ahead) |
9 | 260 { |
138 | 261 FileData *next_fd = work_ahead->data; |
262 image_prebuffer_set(imd, next_fd); | |
9 | 263 } |
264 } | |
265 | |
266 static void view_step_next(ViewWindow *vw) | |
267 { | |
268 if (vw->ss) | |
269 { | |
270 view_slideshow_next(vw); | |
271 } | |
272 else if (vw->list) | |
273 { | |
274 view_list_step(vw, TRUE); | |
275 } | |
276 else | |
277 { | |
278 view_collection_step(vw, TRUE); | |
279 } | |
280 } | |
281 | |
282 static void view_step_prev(ViewWindow *vw) | |
283 { | |
284 if (vw->ss) | |
285 { | |
286 view_slideshow_prev(vw); | |
287 } | |
288 else if (vw->list) | |
289 { | |
290 view_list_step(vw, FALSE); | |
291 } | |
292 else | |
293 { | |
294 view_collection_step(vw, FALSE); | |
295 } | |
296 } | |
297 | |
298 static void view_step_to_end(ViewWindow *vw, gint last) | |
299 { | |
300 if (vw->list) | |
301 { | |
302 view_list_step_to_end(vw, last); | |
303 } | |
304 else | |
305 { | |
306 view_collection_step_to_end(vw, last); | |
307 } | |
308 } | |
309 | |
1 | 310 /* |
311 *----------------------------------------------------------------------------- | |
312 * view window keyboard | |
313 *----------------------------------------------------------------------------- | |
314 */ | |
315 | |
9 | 316 static void view_window_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data) |
317 { | |
318 ViewWindow *vw = data; | |
319 ImageWindow *imd; | |
320 | |
321 imd = view_window_active_image(vw); | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
322 gdk_window_get_origin(imd->pr->window, x, y); |
9 | 323 popup_menu_position_clamp(menu, x, y, 0); |
324 } | |
325 | |
1 | 326 static gint view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) |
327 { | |
9 | 328 ViewWindow *vw = data; |
329 ImageWindow *imd; | |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
330 gint stop_signal; |
9 | 331 GtkWidget *menu; |
1 | 332 gint x = 0; |
333 gint y = 0; | |
334 | |
9 | 335 imd = view_window_active_image(vw); |
336 | |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
337 stop_signal = TRUE; |
1 | 338 switch (event->keyval) |
339 { | |
9 | 340 case GDK_Left: case GDK_KP_Left: |
1 | 341 x -= 1; |
342 break; | |
9 | 343 case GDK_Right: case GDK_KP_Right: |
1 | 344 x += 1; |
345 break; | |
9 | 346 case GDK_Up: case GDK_KP_Up: |
1 | 347 y -= 1; |
348 break; | |
9 | 349 case GDK_Down: case GDK_KP_Down: |
1 | 350 y += 1; |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
351 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
352 default: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
353 stop_signal = FALSE; |
1 | 354 break; |
9 | 355 } |
356 | |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
357 if (x != 0 || y!= 0) |
9 | 358 { |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
359 if (event->state & GDK_SHIFT_MASK) |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
360 { |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
361 x *= 3; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
362 y *= 3; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
363 } |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
364 |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
365 keyboard_scroll_calc(&x, &y, event); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
366 image_scroll(imd, x, y); |
1 | 367 } |
368 | |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
369 if (stop_signal) return stop_signal; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
370 |
1 | 371 if (event->state & GDK_CONTROL_MASK) |
372 { | |
373 gint n = -1; | |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
374 |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
375 stop_signal = TRUE; |
1 | 376 switch (event->keyval) |
377 { | |
378 case '1': | |
379 n = 0; | |
380 break; | |
381 case '2': | |
382 n = 1; | |
383 break; | |
384 case '3': | |
385 n = 2; | |
386 break; | |
387 case '4': | |
388 n = 3; | |
389 break; | |
390 case '5': | |
391 n = 4; | |
392 break; | |
393 case '6': | |
394 n = 5; | |
395 break; | |
396 case '7': | |
397 n = 6; | |
398 break; | |
399 case '8': | |
400 n = 7; | |
401 break; | |
9 | 402 case '9': |
403 n = 8; | |
404 break; | |
405 case '0': | |
406 n = 9; | |
407 break; | |
408 case 'C': case 'c': | |
138 | 409 file_util_copy(image_get_fd(imd), NULL, NULL, imd->widget); |
9 | 410 break; |
411 case 'M': case 'm': | |
138 | 412 file_util_move(image_get_fd(imd), NULL, NULL, imd->widget); |
9 | 413 break; |
414 case 'R': case 'r': | |
138 | 415 file_util_rename(image_get_fd(imd), NULL, imd->widget); |
9 | 416 break; |
417 case 'D': case 'd': | |
138 | 418 file_util_delete(image_get_fd(imd), NULL, imd->widget); |
9 | 419 break; |
420 case 'P': case 'p': | |
138 | 421 info_window_new(image_get_fd(imd), NULL); |
9 | 422 break; |
423 case 'W': case 'w': | |
424 view_window_close(vw); | |
425 break; | |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
426 default: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
427 stop_signal = FALSE; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
428 break; |
1 | 429 } |
430 if (n != -1) | |
431 { | |
60
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
432 if (!editor_window_flag_set(n)) |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
433 { |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
434 view_fullscreen_toggle(vw, TRUE); |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
435 } |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
436 imd = view_window_active_image(vw); |
138 | 437 start_editor_from_file(n, image_get_fd(imd)); |
1 | 438 } |
439 } | |
9 | 440 else if (event->state & GDK_SHIFT_MASK) |
1 | 441 { |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
442 stop_signal = TRUE; |
9 | 443 switch (event->keyval) |
444 { | |
445 case 'R': case 'r': | |
446 image_alter(imd, ALTER_ROTATE_180); | |
447 break; | |
448 case 'M': case 'm': | |
449 image_alter(imd, ALTER_MIRROR); | |
450 break; | |
451 case 'F': case 'f': | |
452 image_alter(imd, ALTER_FLIP); | |
453 break; | |
82
a4c1b7014e6e
Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
454 case 'G': case 'g': |
a4c1b7014e6e
Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
455 image_alter(imd, ALTER_DESATURATE); |
a4c1b7014e6e
Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
gqview
parents:
64
diff
changeset
|
456 break; |
94
50dc5a14d37b
Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
457 case 'P': case 'p': |
50dc5a14d37b
Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
458 { |
138 | 459 FileData *fd; |
94
50dc5a14d37b
Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
460 |
50dc5a14d37b
Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
461 view_fullscreen_toggle(vw, TRUE); |
50dc5a14d37b
Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
462 imd = view_window_active_image(vw); |
138 | 463 fd = image_get_fd(imd); |
464 print_window_new(fd, | |
465 fd ? g_list_append(NULL, file_data_ref(fd)) : NULL, | |
466 filelist_copy(vw->list), vw->window); | |
94
50dc5a14d37b
Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
467 } |
50dc5a14d37b
Thu Nov 2 17:51:31 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
468 break; |
9 | 469 default: |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
470 stop_signal = FALSE; |
9 | 471 break; |
472 } | |
1 | 473 } |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
474 else |
1 | 475 { |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
476 stop_signal = TRUE; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
477 switch (event->keyval) |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
478 { |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
479 case GDK_Page_Up: case GDK_KP_Page_Up: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
480 case GDK_BackSpace: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
481 case 'B': case 'b': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
482 view_step_prev(vw); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
483 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
484 case GDK_Page_Down: case GDK_KP_Page_Down: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
485 case GDK_space: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
486 case 'N': case 'n': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
487 view_step_next(vw); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
488 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
489 case GDK_Home: case GDK_KP_Home: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
490 view_step_to_end(vw, FALSE); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
491 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
492 case GDK_End: case GDK_KP_End: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
493 view_step_to_end(vw, TRUE); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
494 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
495 case '+': case '=': case GDK_KP_Add: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
496 image_zoom_adjust(imd, get_zoom_increment()); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
497 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
498 case '-': case GDK_KP_Subtract: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
499 image_zoom_adjust(imd, -get_zoom_increment()); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
500 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
501 case 'X': case 'x': case GDK_KP_Multiply: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
502 image_zoom_set(imd, 0.0); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
503 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
504 case 'Z': case 'z': case GDK_KP_Divide: case '1': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
505 image_zoom_set(imd, 1.0); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
506 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
507 case '2': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
508 image_zoom_set(imd, 2.0); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
509 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
510 case '3': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
511 image_zoom_set(imd, 3.0); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
512 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
513 case '4': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
514 image_zoom_set(imd, 4.0); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
515 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
516 case '7': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
517 image_zoom_set(imd, -4.0); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
518 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
519 case '8': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
520 image_zoom_set(imd, -3.0); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
521 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
522 case '9': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
523 image_zoom_set(imd, -2.0); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
524 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
525 case 'W': case 'w': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
526 image_zoom_set_fill_geometry(imd, FALSE); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
527 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
528 case 'H': case 'h': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
529 image_zoom_set_fill_geometry(imd, TRUE); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
530 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
531 case 'R': case 'r': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
532 image_reload(imd); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
533 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
534 case 'S': case 's': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
535 if (vw->ss) |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
536 { |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
537 view_slideshow_stop(vw); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
538 } |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
539 else |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
540 { |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
541 view_slideshow_start(vw); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
542 } |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
543 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
544 case 'P': case 'p': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
545 slideshow_pause_toggle(vw->ss); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
546 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
547 case 'F': case 'f': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
548 case 'V': case 'v': |
86
cade6a52a165
Mon Oct 23 05:34:29 2006 John Ellis <johne@verizon.net>
gqview
parents:
84
diff
changeset
|
549 case GDK_F11: |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
550 view_fullscreen_toggle(vw, FALSE); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
551 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
552 case 'I': case 'i': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
553 view_overlay_toggle(vw); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
554 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
555 case ']': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
556 image_alter(imd, ALTER_ROTATE_90); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
557 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
558 case '[': |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
559 image_alter(imd, ALTER_ROTATE_90_CC); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
560 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
561 case GDK_Delete: case GDK_KP_Delete: |
341
15c6b94545a2
Move safe_delete* and in place rename options to file_ops
zas_
parents:
339
diff
changeset
|
562 if (options->file_ops.enable_delete_key) |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
563 { |
138 | 564 file_util_delete(image_get_fd(imd), NULL, imd->widget); |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
565 } |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
566 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
567 case GDK_Escape: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
568 if (vw->fs) |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
569 { |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
570 view_fullscreen_toggle(vw, TRUE); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
571 } |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
572 else |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
573 { |
89
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
574 view_window_close(vw); |
84
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
575 } |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
576 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
577 case GDK_Menu: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
578 case GDK_F10: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
579 menu = view_popup_menu(vw); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
580 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
581 view_window_menu_pos_cb, vw, 0, GDK_CURRENT_TIME); |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
582 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
583 default: |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
584 stop_signal = FALSE; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
585 break; |
ba3c39002a24
Fri Oct 20 08:00:08 2006 John Ellis <johne@verizon.net>
gqview
parents:
82
diff
changeset
|
586 } |
1 | 587 } |
588 | |
589 return stop_signal; | |
590 } | |
591 | |
592 /* | |
593 *----------------------------------------------------------------------------- | |
594 * view window main routines | |
595 *----------------------------------------------------------------------------- | |
596 */ | |
597 | |
9 | 598 static void button_cb(ImageWindow *imd, gint button, guint32 time, |
599 gdouble x, gdouble y, guint state, gpointer data) | |
600 { | |
601 ViewWindow *vw = data; | |
602 GtkWidget *menu; | |
603 | |
604 switch (button) | |
605 { | |
606 case 1: | |
607 view_step_next(vw); | |
608 break; | |
609 case 2: | |
610 view_step_prev(vw); | |
611 break; | |
612 case 3: | |
613 menu = view_popup_menu(vw); | |
614 gtk_menu_popup (GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, time); | |
615 break; | |
616 default: | |
617 break; | |
618 } | |
619 } | |
620 | |
621 static void scroll_cb(ImageWindow *imd, GdkScrollDirection direction, guint32 time, | |
622 gdouble x, gdouble y, guint state, gpointer data) | |
1 | 623 { |
9 | 624 ViewWindow *vw = data; |
625 | |
626 if (state & GDK_CONTROL_MASK) | |
627 { | |
628 switch (direction) | |
629 { | |
630 case GDK_SCROLL_UP: | |
631 image_zoom_adjust_at_point(imd, get_zoom_increment(), x, y); | |
632 break; | |
633 case GDK_SCROLL_DOWN: | |
634 image_zoom_adjust_at_point(imd, -get_zoom_increment(), x, y); | |
635 break; | |
636 default: | |
637 break; | |
638 } | |
639 } | |
318 | 640 else if ( (state & GDK_SHIFT_MASK) != (options->mousewheel_scrolls)) |
9 | 641 { |
642 switch (direction) | |
643 { | |
644 case GDK_SCROLL_UP: | |
645 image_scroll(imd, 0, -MOUSEWHEEL_SCROLL_SIZE); | |
646 break; | |
647 case GDK_SCROLL_DOWN: | |
648 image_scroll(imd, 0, MOUSEWHEEL_SCROLL_SIZE); | |
649 break; | |
650 case GDK_SCROLL_LEFT: | |
651 image_scroll(imd, -MOUSEWHEEL_SCROLL_SIZE, 0); | |
652 break; | |
653 case GDK_SCROLL_RIGHT: | |
654 image_scroll(imd, MOUSEWHEEL_SCROLL_SIZE, 0); | |
655 break; | |
656 default: | |
657 break; | |
658 } | |
659 } | |
660 else | |
661 { | |
662 switch (direction) | |
663 { | |
664 case GDK_SCROLL_UP: | |
665 view_step_prev(vw); | |
666 break; | |
667 case GDK_SCROLL_DOWN: | |
668 view_step_next(vw); | |
669 break; | |
670 default: | |
671 break; | |
672 } | |
673 } | |
674 } | |
675 | |
676 static void view_image_set_buttons(ViewWindow *vw, ImageWindow *imd) | |
677 { | |
678 image_set_button_func(imd, button_cb, vw); | |
679 image_set_scroll_func(imd, scroll_cb, vw); | |
680 } | |
681 | |
682 static void view_fullscreen_stop_func(FullScreenData *fs, gpointer data) | |
683 { | |
684 ViewWindow *vw = data; | |
685 | |
686 vw->fs = NULL; | |
687 | |
688 if (vw->ss) vw->ss->imd = vw->imd; | |
1 | 689 } |
690 | |
9 | 691 static void view_fullscreen_toggle(ViewWindow *vw, gint force_off) |
4 | 692 { |
9 | 693 if (force_off && !vw->fs) return; |
694 | |
695 if (vw->fs) | |
696 { | |
122
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
118
diff
changeset
|
697 if (image_osd_get(vw->fs->imd, NULL, NULL)) |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
94
diff
changeset
|
698 { |
122
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
118
diff
changeset
|
699 image_osd_set(vw->imd, TRUE, TRUE); |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
94
diff
changeset
|
700 } |
9 | 701 |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
94
diff
changeset
|
702 fullscreen_stop(vw->fs); |
9 | 703 } |
704 else | |
705 { | |
706 vw->fs = fullscreen_start(vw->window, vw->imd, view_fullscreen_stop_func, vw); | |
707 | |
708 view_image_set_buttons(vw, vw->fs->imd); | |
709 g_signal_connect(G_OBJECT(vw->fs->window), "key_press_event", | |
710 G_CALLBACK(view_window_key_press_cb), vw); | |
711 | |
712 if (vw->ss) vw->ss->imd = vw->fs->imd; | |
713 | |
122
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
118
diff
changeset
|
714 if (image_osd_get(vw->imd, NULL, NULL)) |
9 | 715 { |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
94
diff
changeset
|
716 image_osd_set(vw->imd, FALSE, FALSE); |
122
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
118
diff
changeset
|
717 image_osd_set(vw->fs->imd, TRUE, TRUE); |
9 | 718 } |
719 } | |
720 } | |
721 | |
722 static void view_overlay_toggle(ViewWindow *vw) | |
723 { | |
724 ImageWindow *imd; | |
725 | |
726 imd = view_window_active_image(vw); | |
727 | |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
94
diff
changeset
|
728 if (!image_osd_get(imd, NULL, NULL)) |
9 | 729 { |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
94
diff
changeset
|
730 image_osd_set(imd, TRUE, TRUE); |
122
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
118
diff
changeset
|
731 image_osd_icon(imd, IMAGE_OSD_ICON, -1); |
9 | 732 } |
733 else | |
734 { | |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
94
diff
changeset
|
735 image_osd_set(imd, FALSE, FALSE); |
9 | 736 } |
737 } | |
738 | |
739 static void view_slideshow_next(ViewWindow *vw) | |
740 { | |
741 if (vw->ss) slideshow_next(vw->ss); | |
4 | 742 } |
743 | |
9 | 744 static void view_slideshow_prev(ViewWindow *vw) |
745 { | |
746 if (vw->ss) slideshow_prev(vw->ss); | |
747 } | |
748 | |
749 static void view_slideshow_stop_func(SlideShowData *fs, gpointer data) | |
750 { | |
751 ViewWindow *vw = data; | |
118
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
752 GList *work; |
138 | 753 FileData *fd; |
9 | 754 |
755 vw->ss = NULL; | |
118
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
756 |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
757 work = vw->list; |
138 | 758 fd = image_get_fd(view_window_active_image(vw)); |
118
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
759 while (work) |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
760 { |
138 | 761 FileData *temp; |
118
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
762 |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
763 temp = work->data; |
138 | 764 if (fd == temp) |
118
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
765 { |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
766 vw->list_pointer = work; |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
767 work = NULL; |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
768 } |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
769 else |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
770 { |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
771 work = work->next; |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
772 } |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
773 } |
9 | 774 } |
775 | |
776 static void view_slideshow_start(ViewWindow *vw) | |
4 | 777 { |
9 | 778 if (!vw->ss) |
779 { | |
780 CollectionData *cd; | |
781 CollectInfo *info; | |
782 | |
783 if (vw->list) | |
784 { | |
138 | 785 vw->ss = slideshow_start_from_filelist(view_window_active_image(vw), |
786 filelist_copy(vw->list), | |
9 | 787 view_slideshow_stop_func, vw); |
788 vw->list_pointer = NULL; | |
789 return; | |
790 } | |
791 | |
792 cd = image_get_collection(view_window_active_image(vw), &info); | |
793 if (cd && info) | |
794 { | |
795 vw->ss = slideshow_start_from_collection(view_window_active_image(vw), cd, | |
796 view_slideshow_stop_func, vw, info); | |
797 } | |
798 } | |
799 } | |
800 | |
801 static void view_slideshow_stop(ViewWindow *vw) | |
802 { | |
803 if (vw->ss) slideshow_free(vw->ss); | |
804 } | |
805 | |
89
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
806 static void view_window_destroy_cb(GtkWidget *widget, gpointer data) |
9 | 807 { |
89
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
808 ViewWindow *vw = data; |
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
809 |
9 | 810 view_window_list = g_list_remove(view_window_list, vw); |
811 | |
812 view_slideshow_stop(vw); | |
89
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
813 fullscreen_stop(vw->fs); |
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
814 |
138 | 815 filelist_free(vw->list); |
89
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
816 g_free(vw); |
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
817 } |
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
818 |
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
819 static void view_window_close(ViewWindow *vw) |
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
820 { |
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
821 view_slideshow_stop(vw); |
9 | 822 view_fullscreen_toggle(vw, TRUE); |
823 gtk_widget_destroy(vw->window); | |
4 | 824 } |
825 | |
1 | 826 static gint view_window_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data) |
827 { | |
9 | 828 ViewWindow *vw = data; |
829 | |
830 view_window_close(vw); | |
1 | 831 return TRUE; |
832 } | |
833 | |
138 | 834 static ViewWindow *real_view_window_new(FileData *fd, GList *list, CollectionData *cd, CollectInfo *info) |
1 | 835 { |
9 | 836 ViewWindow *vw; |
1 | 837 GtkAllocation req_size; |
9 | 838 GdkGeometry geometry; |
1 | 839 gint w, h; |
9 | 840 |
138 | 841 if (!fd && !list && (!cd || !info)) return NULL; |
9 | 842 |
843 vw = g_new0(ViewWindow, 1); | |
844 vw->fs = NULL; | |
845 vw->ss = NULL; | |
846 vw->list = NULL; | |
847 vw->list_pointer = NULL; | |
848 | |
289
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
849 vw->window = window_new(GTK_WINDOW_TOPLEVEL, "view", PIXBUF_INLINE_ICON_VIEW, NULL, NULL); |
9 | 850 |
851 geometry.min_width = 8; | |
852 geometry.min_height = 8; | |
853 gtk_window_set_geometry_hints(GTK_WINDOW(vw->window), NULL, &geometry, GDK_HINT_MIN_SIZE); | |
1 | 854 |
9 | 855 gtk_window_set_resizable(GTK_WINDOW(vw->window), TRUE); |
856 gtk_container_set_border_width(GTK_CONTAINER(vw->window), 0); | |
857 | |
858 vw->imd = image_new(FALSE); | |
859 | |
339
de1c2cd06fce
Rename user_specified_window_background and window_background_color
zas_
parents:
334
diff
changeset
|
860 image_background_set_color(vw->imd, options->image.use_custom_border_color ? &options->image.border_color : NULL); |
9 | 861 |
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
281
diff
changeset
|
862 image_attach_window(vw->imd, vw->window, NULL, GQ_APPNAME, TRUE); |
9 | 863 |
864 image_auto_refresh(vw->imd, 0); | |
865 image_top_window_set_sync(vw->imd, TRUE); | |
866 | |
867 gtk_container_add(GTK_CONTAINER(vw->window), vw->imd->widget); | |
868 gtk_widget_show(vw->imd->widget); | |
869 | |
870 view_window_dnd_init(vw); | |
1 | 871 |
9 | 872 view_image_set_buttons(vw, vw->imd); |
1 | 873 |
89
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
874 g_signal_connect(G_OBJECT(vw->window), "destroy", |
b3149a34d0dd
Sat Oct 28 14:41:10 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
875 G_CALLBACK(view_window_destroy_cb), vw); |
9 | 876 g_signal_connect(G_OBJECT(vw->window), "delete_event", |
877 G_CALLBACK(view_window_delete_cb), vw); | |
878 g_signal_connect(G_OBJECT(vw->window), "key_press_event", | |
879 G_CALLBACK(view_window_key_press_cb), vw); | |
880 if (cd && info) | |
881 { | |
334 | 882 image_change_from_collection(vw->imd, cd, info, image_zoom_get_default(NULL, options->image.zoom_mode)); |
883 if (options->image.enable_read_ahead) | |
9 | 884 { |
885 CollectInfo * r_info = collection_next_by_info(cd, info); | |
886 if (!r_info) r_info = collection_prev_by_info(cd, info); | |
138 | 887 if (r_info) image_prebuffer_set(vw->imd, r_info->fd); |
9 | 888 } |
889 } | |
890 else if (list) | |
891 { | |
892 view_window_set_list(vw, list); | |
893 vw->list_pointer = vw->list; | |
334 | 894 image_change_fd(vw->imd, (FileData *)vw->list->data, image_zoom_get_default(NULL, options->image.zoom_mode)); |
1 | 895 |
334 | 896 if (options->image.enable_read_ahead) |
9 | 897 { |
898 GList *work = vw->list->next; | |
138 | 899 if (work) image_prebuffer_set(vw->imd, (FileData *)work->data); |
9 | 900 } |
901 } | |
902 else | |
903 { | |
334 | 904 image_change_fd(vw->imd, fd, image_zoom_get_default(NULL, options->image.zoom_mode)); |
9 | 905 } |
1 | 906 |
9 | 907 if (image_zoom_get(vw->imd) == 0.0) |
908 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
909 pixbuf_renderer_get_image_size(PIXBUF_RENDERER(vw->imd->pr), &w, &h); |
9 | 910 } |
911 else | |
912 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
913 pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(vw->imd->pr), &w, &h); |
9 | 914 } |
334 | 915 if (options->image.limit_window_size) |
1 | 916 { |
334 | 917 gint mw = gdk_screen_width() * options->image.max_window_size / 100; |
918 gint mh = gdk_screen_height() * options->image.max_window_size / 100; | |
1 | 919 |
920 if (w > mw) w = mw; | |
921 if (h > mh) h = mh; | |
922 } | |
923 | |
9 | 924 gtk_window_set_default_size(GTK_WINDOW(vw->window), w, h); |
1 | 925 req_size.x = req_size.y = 0; |
926 req_size.width = w; | |
927 req_size.height = h; | |
9 | 928 gtk_widget_size_allocate(GTK_WIDGET(vw->window), &req_size); |
929 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
930 gtk_widget_set_size_request(vw->imd->pr, w, h); |
9 | 931 |
932 gtk_widget_show(vw->window); | |
933 | |
934 view_window_list = g_list_append(view_window_list, vw); | |
935 | |
936 return vw; | |
937 } | |
938 | |
939 static void view_window_collection_unref_cb(GtkWidget *widget, gpointer data) | |
940 { | |
941 CollectionData *cd = data; | |
942 | |
943 collection_unref(cd); | |
944 } | |
945 | |
138 | 946 void view_window_new(FileData *fd) |
9 | 947 { |
138 | 948 if (file_extension_match(fd->path, ".gqv")) |
9 | 949 { |
950 ViewWindow *vw; | |
951 CollectionData *cd; | |
952 CollectInfo *info; | |
953 | |
138 | 954 cd = collection_new(fd->path); |
358 | 955 if (collection_load(cd, fd->path, COLLECTION_LOAD_NONE)) |
9 | 956 { |
957 info = collection_get_first(cd); | |
958 } | |
959 else | |
960 { | |
961 collection_unref(cd); | |
962 cd = NULL; | |
963 info = NULL; | |
964 } | |
965 vw = real_view_window_new(NULL, NULL, cd, info); | |
966 if (vw && cd) | |
967 { | |
968 g_signal_connect(G_OBJECT(vw->window), "destroy", | |
969 G_CALLBACK(view_window_collection_unref_cb), cd); | |
970 } | |
971 } | |
138 | 972 else if (isdir(fd->path)) |
9 | 973 { |
974 GList *list = NULL; | |
1 | 975 |
138 | 976 if (filelist_read(fd->path, &list, NULL)) |
9 | 977 { |
138 | 978 list = filelist_sort_path(list); |
979 list = filelist_filter(list, FALSE); | |
9 | 980 } |
981 real_view_window_new(NULL, list, NULL, NULL); | |
138 | 982 filelist_free(list); |
9 | 983 } |
984 else | |
985 { | |
138 | 986 real_view_window_new(fd, NULL, NULL, NULL); |
9 | 987 } |
988 } | |
989 | |
990 void view_window_new_from_list(GList *list) | |
991 { | |
992 real_view_window_new(NULL, list, NULL, NULL); | |
993 } | |
994 | |
995 void view_window_new_from_collection(CollectionData *cd, CollectInfo *info) | |
996 { | |
997 real_view_window_new(NULL, NULL, cd, info); | |
998 } | |
999 | |
1000 /* | |
1001 *----------------------------------------------------------------------------- | |
1002 * public | |
1003 *----------------------------------------------------------------------------- | |
1004 */ | |
1005 | |
1006 void view_window_colors_update(void) | |
1007 { | |
1008 GList *work; | |
1 | 1009 |
9 | 1010 work = view_window_list; |
1011 while (work) | |
1012 { | |
1013 ViewWindow *vw = work->data; | |
1014 work = work->next; | |
1015 | |
339
de1c2cd06fce
Rename user_specified_window_background and window_background_color
zas_
parents:
334
diff
changeset
|
1016 image_background_set_color(vw->imd, options->image.use_custom_border_color ? &options->image.border_color : NULL); |
9 | 1017 } |
1018 } | |
1019 | |
1020 gint view_window_find_image(ImageWindow *imd, gint *index, gint *total) | |
1021 { | |
1022 GList *work; | |
1023 | |
1024 work = view_window_list; | |
1025 while (work) | |
1026 { | |
1027 ViewWindow *vw = work->data; | |
1028 work = work->next; | |
1029 | |
1030 if (vw->imd == imd || | |
1031 (vw->fs && vw->fs->imd == imd)) | |
1032 { | |
1033 if (vw->ss) | |
1034 { | |
1035 gint n; | |
118
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1036 gint t; |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1037 |
9 | 1038 n = g_list_length(vw->ss->list_done); |
118
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1039 t = n + g_list_length(vw->ss->list); |
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1040 if (n == 0) n = t; |
9 | 1041 if (index) *index = n - 1; |
118
ac0f7f942c4d
Wed Nov 29 22:53:03 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1042 if (total) *total = t; |
9 | 1043 } |
1044 else | |
1045 { | |
1046 if (index) *index = g_list_position(vw->list, vw->list_pointer); | |
1047 if (total) *total = g_list_length(vw->list); | |
1048 } | |
1049 return TRUE; | |
1050 } | |
1051 } | |
1052 | |
1053 return FALSE; | |
1 | 1054 } |
1055 | |
1056 /* | |
1057 *----------------------------------------------------------------------------- | |
1058 * view window menu routines and callbacks | |
1059 *----------------------------------------------------------------------------- | |
1060 */ | |
1061 | |
9 | 1062 static void view_new_window_cb(GtkWidget *widget, gpointer data) |
1 | 1063 { |
9 | 1064 ViewWindow *vw = data; |
1065 CollectionData *cd; | |
1066 CollectInfo *info; | |
1067 | |
1068 cd = image_get_collection(vw->imd, &info); | |
1069 | |
1070 if (cd && info) | |
1071 { | |
1072 view_window_new_from_collection(cd, info); | |
1073 } | |
1074 else | |
1075 { | |
138 | 1076 view_window_new(image_get_fd(vw->imd)); |
9 | 1077 } |
1 | 1078 } |
1079 | |
9 | 1080 static void view_edit_cb(GtkWidget *widget, gpointer data) |
1 | 1081 { |
9 | 1082 ViewWindow *vw; |
60
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
1083 ImageWindow *imd; |
9 | 1084 gint n; |
1085 | |
1086 vw = submenu_item_get_data(widget); | |
1087 n = GPOINTER_TO_INT(data); | |
1088 if (!vw) return; | |
1089 | |
60
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
1090 if (!editor_window_flag_set(n)) |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
1091 { |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
1092 view_fullscreen_toggle(vw, TRUE); |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
1093 } |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
1094 |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
1095 imd = view_window_active_image(vw); |
138 | 1096 start_editor_from_file(n, image_get_fd(imd)); |
1 | 1097 } |
1098 | |
9 | 1099 static void view_alter_cb(GtkWidget *widget, gpointer data) |
1100 { | |
1101 ViewWindow *vw; | |
1102 AlterType type; | |
1103 | |
1104 vw = submenu_item_get_data(widget); | |
1105 type = GPOINTER_TO_INT(data); | |
1106 | |
1107 if (!vw) return; | |
1108 image_alter(vw->imd, type); | |
1109 } | |
1110 | |
1111 static void view_info_cb(GtkWidget *widget, gpointer data) | |
3 | 1112 { |
9 | 1113 ViewWindow *vw = data; |
1114 ImageWindow *imd; | |
1115 | |
1116 imd = view_window_active_image(vw); | |
138 | 1117 info_window_new(image_get_fd(imd), NULL); |
9 | 1118 } |
1119 | |
1120 static void view_wallpaper_cb(GtkWidget *widget, gpointer data) | |
1121 { | |
1122 ViewWindow *vw = data; | |
1123 ImageWindow *imd; | |
1124 | |
1125 imd = view_window_active_image(vw); | |
1126 image_to_root_window(imd, (image_zoom_get(imd) == 0.0)); | |
3 | 1127 } |
1128 | |
1 | 1129 static void view_zoom_in_cb(GtkWidget *widget, gpointer data) |
1130 { | |
9 | 1131 ViewWindow *vw = data; |
1132 | |
1133 image_zoom_adjust(view_window_active_image(vw), get_zoom_increment()); | |
1 | 1134 } |
1135 | |
1136 static void view_zoom_out_cb(GtkWidget *widget, gpointer data) | |
1137 { | |
9 | 1138 ViewWindow *vw = data; |
1139 | |
1140 image_zoom_adjust(view_window_active_image(vw), -get_zoom_increment()); | |
1 | 1141 } |
1142 | |
1143 static void view_zoom_1_1_cb(GtkWidget *widget, gpointer data) | |
1144 { | |
9 | 1145 ViewWindow *vw = data; |
1146 | |
1147 image_zoom_set(view_window_active_image(vw), 1.0); | |
1 | 1148 } |
1149 | |
1150 static void view_zoom_fit_cb(GtkWidget *widget, gpointer data) | |
1151 { | |
9 | 1152 ViewWindow *vw = data; |
1153 | |
1154 image_zoom_set(view_window_active_image(vw), 0.0); | |
1 | 1155 } |
1156 | |
1157 static void view_copy_cb(GtkWidget *widget, gpointer data) | |
1158 { | |
9 | 1159 ViewWindow *vw = data; |
1160 ImageWindow *imd; | |
1161 | |
1162 imd = view_window_active_image(vw); | |
138 | 1163 file_util_copy(image_get_fd(imd), NULL, NULL, imd->widget); |
1 | 1164 } |
1165 | |
1166 static void view_move_cb(GtkWidget *widget, gpointer data) | |
1167 { | |
9 | 1168 ViewWindow *vw = data; |
1169 ImageWindow *imd; | |
1170 | |
1171 imd = view_window_active_image(vw); | |
138 | 1172 file_util_move(image_get_fd(imd), NULL, NULL, imd->widget); |
1 | 1173 } |
1174 | |
1175 static void view_rename_cb(GtkWidget *widget, gpointer data) | |
1176 { | |
9 | 1177 ViewWindow *vw = data; |
1178 ImageWindow *imd; | |
1179 | |
1180 imd = view_window_active_image(vw); | |
138 | 1181 file_util_rename(image_get_fd(imd), NULL, imd->widget); |
1 | 1182 } |
1183 | |
1184 static void view_delete_cb(GtkWidget *widget, gpointer data) | |
1185 { | |
9 | 1186 ViewWindow *vw = data; |
1187 ImageWindow *imd; | |
1188 | |
1189 imd = view_window_active_image(vw); | |
138 | 1190 file_util_delete(image_get_fd(imd), NULL, imd->widget); |
9 | 1191 } |
1192 | |
1193 static void view_fullscreen_cb(GtkWidget *widget, gpointer data) | |
1194 { | |
1195 ViewWindow *vw = data; | |
1196 | |
1197 view_fullscreen_toggle(vw, FALSE); | |
1198 } | |
1199 | |
1200 static void view_slideshow_start_cb(GtkWidget *widget, gpointer data) | |
1201 { | |
1202 ViewWindow *vw = data; | |
1203 | |
1204 view_slideshow_start(vw); | |
1205 } | |
1206 | |
1207 static void view_slideshow_stop_cb(GtkWidget *widget, gpointer data) | |
1208 { | |
1209 ViewWindow *vw = data; | |
1210 | |
1211 view_slideshow_stop(vw); | |
1212 } | |
1213 | |
1214 static void view_slideshow_pause_cb(GtkWidget *widget, gpointer data) | |
1215 { | |
1216 ViewWindow *vw = data; | |
1217 | |
1218 slideshow_pause_toggle(vw->ss); | |
1 | 1219 } |
1220 | |
1221 static void view_close_cb(GtkWidget *widget, gpointer data) | |
1222 { | |
9 | 1223 ViewWindow *vw = data; |
1224 | |
1225 view_window_close(vw); | |
1226 } | |
1227 | |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1228 static LayoutWindow *view_new_layout_with_path(const gchar *path) |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1229 { |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1230 LayoutWindow *nw; |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1231 |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1232 nw = layout_new(NULL, FALSE, FALSE); |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1233 layout_sort_set(nw, options->file_sort.method, options->file_sort.ascending); |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1234 layout_set_path(nw, path); |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1235 return nw; |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1236 } |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1237 |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1238 |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1239 static void view_set_layout_path_cb(GtkWidget *widget, gpointer data) |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1240 { |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1241 ViewWindow *vw = data; |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1242 LayoutWindow *lw; |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1243 const gchar *path; |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1244 ImageWindow *imd; |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1245 |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1246 imd = view_window_active_image(vw); |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1247 |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1248 if (!imd || !imd->image_fd) return; |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1249 path = imd->image_fd->path; |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1250 if (!path) return; |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1251 |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1252 lw = layout_find_by_image_fd(imd); |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1253 if (lw) |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1254 layout_set_path(lw, path); |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1255 else |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1256 view_new_layout_with_path(path); |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1257 view_window_close(vw); |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1258 } |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1259 |
9 | 1260 static GtkWidget *view_popup_menu(ViewWindow *vw) |
1261 { | |
1262 GtkWidget *menu; | |
1263 GtkWidget *item; | |
1264 | |
1265 menu = popup_menu_short_lived(); | |
1266 | |
1267 menu_item_add_stock(menu, _("Zoom _in"), GTK_STOCK_ZOOM_IN, G_CALLBACK(view_zoom_in_cb), vw); | |
1268 menu_item_add_stock(menu, _("Zoom _out"), GTK_STOCK_ZOOM_OUT, G_CALLBACK(view_zoom_out_cb), vw); | |
1269 menu_item_add_stock(menu, _("Zoom _1:1"), GTK_STOCK_ZOOM_100, G_CALLBACK(view_zoom_1_1_cb), vw); | |
1270 menu_item_add_stock(menu, _("Fit image to _window"), GTK_STOCK_ZOOM_FIT, G_CALLBACK(view_zoom_fit_cb), vw); | |
1271 menu_item_add_divider(menu); | |
1272 | |
1273 item = submenu_add_edit(menu, NULL, G_CALLBACK(view_edit_cb), vw); | |
1274 menu_item_add_divider(item); | |
1275 menu_item_add(item, _("Set as _wallpaper"), G_CALLBACK(view_wallpaper_cb), vw); | |
1276 | |
1277 submenu_add_alter(menu, G_CALLBACK(view_alter_cb), vw); | |
1278 | |
1279 menu_item_add_stock(menu, _("_Properties"), GTK_STOCK_PROPERTIES, G_CALLBACK(view_info_cb), vw); | |
1280 | |
1281 menu_item_add_stock(menu, _("View in _new window"), GTK_STOCK_NEW, G_CALLBACK(view_new_window_cb), vw); | |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
358
diff
changeset
|
1282 item = menu_item_add(menu, _("_Go to directory view"), G_CALLBACK(view_set_layout_path_cb), vw); |
9 | 1283 |
1284 menu_item_add_divider(menu); | |
1285 menu_item_add_stock(menu, _("_Copy..."), GTK_STOCK_COPY, G_CALLBACK(view_copy_cb), vw); | |
1286 menu_item_add(menu, _("_Move..."), G_CALLBACK(view_move_cb), vw); | |
1287 menu_item_add(menu, _("_Rename..."), G_CALLBACK(view_rename_cb), vw); | |
1288 menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(view_delete_cb), vw); | |
1289 | |
1290 menu_item_add_divider(menu); | |
1291 | |
1292 if (vw->ss) | |
1293 { | |
1294 menu_item_add(menu, _("_Stop slideshow"), G_CALLBACK(view_slideshow_stop_cb), vw); | |
1295 if (slideshow_paused(vw->ss)) | |
1296 { | |
1297 item = menu_item_add(menu, _("Continue slides_how"), | |
1298 G_CALLBACK(view_slideshow_pause_cb), vw); | |
1299 } | |
1300 else | |
1301 { | |
1302 item = menu_item_add(menu, _("Pause slides_how"), | |
1303 G_CALLBACK(view_slideshow_pause_cb), vw); | |
1304 } | |
1305 } | |
1306 else | |
1307 { | |
1308 item = menu_item_add(menu, _("_Start slideshow"), G_CALLBACK(view_slideshow_start_cb), vw); | |
1309 gtk_widget_set_sensitive(item, (vw->list != NULL) || view_window_contains_collection(vw)); | |
1310 item = menu_item_add(menu, _("Pause slides_how"), G_CALLBACK(view_slideshow_pause_cb), vw); | |
1311 gtk_widget_set_sensitive(item, FALSE); | |
1312 } | |
1313 | |
1314 if (vw->fs) | |
1315 { | |
1316 menu_item_add(menu, _("Exit _full screen"), G_CALLBACK(view_fullscreen_cb), vw); | |
1317 } | |
1318 else | |
1319 { | |
1320 menu_item_add(menu, _("_Full screen"), G_CALLBACK(view_fullscreen_cb), vw); | |
1321 } | |
1322 | |
1323 menu_item_add_divider(menu); | |
1324 menu_item_add_stock(menu, _("C_lose window"), GTK_STOCK_CLOSE, G_CALLBACK(view_close_cb), vw); | |
1325 | |
1326 return menu; | |
1327 } | |
1328 | |
1329 /* | |
1330 *------------------------------------------------------------------- | |
1331 * dnd confirm dir | |
1332 *------------------------------------------------------------------- | |
1333 */ | |
1334 | |
1335 typedef struct { | |
1336 ViewWindow *vw; | |
1337 GList *list; | |
1338 } CViewConfirmD; | |
1339 | |
1340 static void view_dir_list_cancel(GtkWidget *widget, gpointer data) | |
1341 { | |
1342 /* do nothing */ | |
1343 } | |
1344 | |
1345 static void view_dir_list_do(ViewWindow *vw, GList *list, gint skip, gint recurse) | |
1346 { | |
1347 GList *work; | |
1348 | |
1349 view_window_set_list(vw, NULL); | |
1350 | |
1351 work = list; | |
1352 while (work) | |
1353 { | |
138 | 1354 FileData *fd = work->data; |
9 | 1355 work = work->next; |
1356 | |
138 | 1357 if (isdir(fd->path)) |
9 | 1358 { |
1359 if (!skip) | |
1360 { | |
1361 GList *list = NULL; | |
1362 | |
1363 if (recurse) | |
1364 { | |
138 | 1365 list = filelist_recursive(fd->path); |
9 | 1366 } |
1367 else | |
138 | 1368 { /*FIXME */ |
1369 filelist_read(fd->path, &list, NULL); | |
1370 list = filelist_sort_path(list); | |
1371 list = filelist_filter(list, FALSE); | |
9 | 1372 } |
1373 if (list) vw->list = g_list_concat(vw->list, list); | |
1374 } | |
1375 } | |
1376 else | |
1377 { | |
1378 /* FIXME: no filtering here */ | |
138 | 1379 vw->list = g_list_append(vw->list, file_data_ref(fd)); |
9 | 1380 } |
1381 } | |
1382 | |
1383 if (vw->list) | |
1384 { | |
138 | 1385 FileData *fd; |
9 | 1386 |
1387 vw->list_pointer = vw->list; | |
138 | 1388 fd = vw->list->data; |
334 | 1389 image_change_fd(vw->imd, fd, image_zoom_get_default(vw->imd, options->image.zoom_mode)); |
9 | 1390 |
1391 work = vw->list->next; | |
334 | 1392 if (options->image.enable_read_ahead && work) |
9 | 1393 { |
138 | 1394 fd = work->data; |
1395 image_prebuffer_set(vw->imd, fd); | |
9 | 1396 } |
1397 } | |
1398 else | |
1399 { | |
334 | 1400 image_change_fd(vw->imd, NULL, image_zoom_get_default(vw->imd, options->image.zoom_mode)); |
9 | 1401 } |
1402 } | |
1403 | |
1404 static void view_dir_list_add(GtkWidget *widget, gpointer data) | |
1405 { | |
1406 CViewConfirmD *d = data; | |
1407 view_dir_list_do(d->vw, d->list, FALSE, FALSE); | |
1408 } | |
1409 | |
1410 static void view_dir_list_recurse(GtkWidget *widget, gpointer data) | |
1411 { | |
1412 CViewConfirmD *d = data; | |
1413 view_dir_list_do(d->vw, d->list, FALSE, TRUE); | |
1414 } | |
1415 | |
1416 static void view_dir_list_skip(GtkWidget *widget, gpointer data) | |
1417 { | |
1418 CViewConfirmD *d = data; | |
1419 view_dir_list_do(d->vw, d->list, TRUE, FALSE); | |
1420 } | |
1421 | |
1422 static void view_dir_list_destroy(GtkWidget *widget, gpointer data) | |
1423 { | |
1424 CViewConfirmD *d = data; | |
138 | 1425 filelist_free(d->list); |
9 | 1426 g_free(d); |
1427 } | |
1428 | |
1429 static GtkWidget *view_confirm_dir_list(ViewWindow *vw, GList *list) | |
1430 { | |
1431 GtkWidget *menu; | |
1432 CViewConfirmD *d; | |
1433 | |
1434 d = g_new(CViewConfirmD, 1); | |
1435 d->vw = vw; | |
1436 d->list = list; | |
1437 | |
1438 menu = popup_menu_short_lived(); | |
1439 g_signal_connect(G_OBJECT(menu), "destroy", | |
1440 G_CALLBACK(view_dir_list_destroy), d); | |
1441 | |
1442 menu_item_add_stock(menu, _("Dropped list includes folders."), GTK_STOCK_DND_MULTIPLE, NULL, NULL); | |
1443 menu_item_add_divider(menu); | |
1444 menu_item_add_stock(menu, _("_Add contents"), GTK_STOCK_OK, G_CALLBACK(view_dir_list_add), d); | |
1445 menu_item_add_stock(menu, _("Add contents _recursive"), GTK_STOCK_ADD, G_CALLBACK(view_dir_list_recurse), d); | |
1446 menu_item_add_stock(menu, _("_Skip folders"), GTK_STOCK_REMOVE, G_CALLBACK(view_dir_list_skip), d); | |
1447 menu_item_add_divider(menu); | |
1448 menu_item_add_stock(menu, _("Cancel"), GTK_STOCK_CANCEL, G_CALLBACK(view_dir_list_cancel), d); | |
1449 | |
1450 return menu; | |
1 | 1451 } |
1452 | |
9 | 1453 /* |
1454 *----------------------------------------------------------------------------- | |
1455 * image drag and drop routines | |
1456 *----------------------------------------------------------------------------- | |
1457 */ | |
1458 | |
1459 static void view_window_get_dnd_data(GtkWidget *widget, GdkDragContext *context, | |
1460 gint x, gint y, | |
1461 GtkSelectionData *selection_data, guint info, | |
1462 guint time, gpointer data) | |
1 | 1463 { |
9 | 1464 ViewWindow *vw = data; |
1465 ImageWindow *imd; | |
1466 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1467 if (gtk_drag_get_source_widget(context) == vw->imd->pr) return; |
9 | 1468 |
1469 imd = vw->imd; | |
1470 | |
1471 if (info == TARGET_URI_LIST || info == TARGET_APP_COLLECTION_MEMBER) | |
1472 { | |
1473 CollectionData *source; | |
1474 GList *list; | |
1475 GList *info_list; | |
1476 | |
1477 if (info == TARGET_URI_LIST) | |
1478 { | |
1479 GList *work; | |
1480 | |
138 | 1481 list = uri_filelist_from_text((gchar *)selection_data->data, TRUE); |
9 | 1482 |
1483 work = list; | |
1484 while (work) | |
1485 { | |
138 | 1486 FileData *fd = work->data; |
1487 if (isdir(fd->path)) | |
9 | 1488 { |
1489 GtkWidget *menu; | |
1490 menu = view_confirm_dir_list(vw, list); | |
1491 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, time); | |
1492 return; | |
1493 } | |
1494 work = work->next; | |
1495 } | |
1496 | |
138 | 1497 list = filelist_filter(list, FALSE); |
9 | 1498 |
1499 source = NULL; | |
1500 info_list = NULL; | |
1501 } | |
1502 else | |
1503 { | |
1504 source = collection_from_dnd_data((gchar *)selection_data->data, &list, &info_list); | |
1505 } | |
1506 | |
1507 if (list) | |
1508 { | |
138 | 1509 FileData *fd; |
9 | 1510 |
138 | 1511 fd = list->data; |
1512 if (isfile(fd->path)) | |
9 | 1513 { |
1514 view_slideshow_stop(vw); | |
1515 view_window_set_list(vw, NULL); | |
1 | 1516 |
9 | 1517 if (source && info_list) |
1518 { | |
334 | 1519 image_change_from_collection(imd, source, info_list->data, image_zoom_get_default(imd, options->image.zoom_mode)); |
9 | 1520 } |
1521 else | |
1522 { | |
1523 if (list->next) | |
1524 { | |
1525 vw->list = list; | |
1526 list = NULL; | |
1527 | |
1528 vw->list_pointer = vw->list; | |
1529 } | |
334 | 1530 image_change_fd(imd, fd, image_zoom_get_default(imd, options->image.zoom_mode)); |
9 | 1531 } |
1532 } | |
1533 } | |
138 | 1534 filelist_free(list); |
9 | 1535 g_list_free(info_list); |
1536 } | |
1537 } | |
1538 | |
1539 static void view_window_set_dnd_data(GtkWidget *widget, GdkDragContext *context, | |
1540 GtkSelectionData *selection_data, guint info, | |
1541 guint time, gpointer data) | |
1542 { | |
1543 ViewWindow *vw = data; | |
138 | 1544 FileData *fd; |
9 | 1545 |
138 | 1546 fd = image_get_fd(vw->imd); |
1 | 1547 |
138 | 1548 if (fd) |
9 | 1549 { |
1550 gchar *text = NULL; | |
1551 gint len; | |
1552 gint plain_text; | |
1553 GList *list; | |
1 | 1554 |
9 | 1555 switch (info) |
1556 { | |
1557 case TARGET_URI_LIST: | |
1558 plain_text = FALSE; | |
1559 break; | |
1560 case TARGET_TEXT_PLAIN: | |
1561 default: | |
1562 plain_text = TRUE; | |
1563 break; | |
1564 } | |
138 | 1565 list = g_list_append(NULL, fd); |
1566 text = uri_text_from_filelist(list, &len, plain_text); | |
9 | 1567 g_list_free(list); |
1568 if (text) | |
1569 { | |
1570 gtk_selection_data_set (selection_data, selection_data->target, | |
64
04ff0df3ad2f
Mon Aug 15 17:13:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
60
diff
changeset
|
1571 8, (guchar *)text, len); |
9 | 1572 g_free(text); |
1573 } | |
1574 } | |
1575 else | |
1576 { | |
1577 gtk_selection_data_set (selection_data, selection_data->target, | |
1578 8, NULL, 0); | |
1579 } | |
1 | 1580 } |
1581 | |
9 | 1582 static void view_window_dnd_init(ViewWindow *vw) |
1583 { | |
1584 ImageWindow *imd; | |
1 | 1585 |
9 | 1586 imd = vw->imd; |
1587 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1588 gtk_drag_source_set(imd->pr, GDK_BUTTON2_MASK, |
9 | 1589 dnd_file_drag_types, dnd_file_drag_types_count, |
1590 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1591 g_signal_connect(G_OBJECT(imd->pr), "drag_data_get", |
9 | 1592 G_CALLBACK(view_window_set_dnd_data), vw); |
1593 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1594 gtk_drag_dest_set(imd->pr, |
9 | 1595 GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, |
1596 dnd_file_drop_types, dnd_file_drop_types_count, | |
1597 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1598 g_signal_connect(G_OBJECT(imd->pr), "drag_data_received", |
9 | 1599 G_CALLBACK(view_window_get_dnd_data), vw); |
1600 } | |
1601 | |
1602 /* | |
1603 *----------------------------------------------------------------------------- | |
1604 * maintenance (for rename, move, remove) | |
1605 *----------------------------------------------------------------------------- | |
1606 */ | |
1607 | |
138 | 1608 static void view_real_removed(ViewWindow *vw, FileData *fd, GList *ignore_list) |
9 | 1609 { |
1610 ImageWindow *imd; | |
138 | 1611 FileData *image_fd; |
9 | 1612 |
1613 imd = view_window_active_image(vw); | |
138 | 1614 image_fd = image_get_fd(imd); |
9 | 1615 |
138 | 1616 if (image_fd && image_fd == fd) |
9 | 1617 { |
1618 if (vw->list) | |
1619 { | |
1620 view_list_step(vw, TRUE); | |
138 | 1621 if (image_get_fd(imd) == image_fd) |
9 | 1622 { |
1623 view_list_step(vw, FALSE); | |
1624 } | |
1625 } | |
1626 else if (view_window_contains_collection(vw)) | |
1627 { | |
1628 view_collection_step(vw, TRUE); | |
138 | 1629 if (image_get_fd(imd) == image_fd) |
9 | 1630 { |
1631 view_collection_step(vw, FALSE); | |
1632 } | |
1633 } | |
138 | 1634 if (image_get_fd(imd) == image_fd) |
9 | 1635 { |
334 | 1636 image_change_fd(imd, NULL, image_zoom_get_default(imd, options->image.zoom_mode)); |
9 | 1637 } |
1638 } | |
1639 | |
1640 if (vw->list) | |
1641 { | |
1642 GList *work; | |
1643 GList *old; | |
1644 | |
1645 old = vw->list_pointer; | |
1646 | |
1647 work = vw->list; | |
1648 while (work) | |
1649 { | |
138 | 1650 FileData *chk_fd; |
9 | 1651 GList *chk_link; |
1652 | |
138 | 1653 chk_fd = work->data; |
9 | 1654 chk_link = work; |
1655 work = work->next; | |
1656 | |
138 | 1657 if (chk_fd == fd) |
9 | 1658 { |
1659 if (vw->list_pointer == chk_link) | |
1660 { | |
1661 vw->list_pointer = (chk_link->next) ? chk_link->next : chk_link->prev; | |
1662 } | |
138 | 1663 vw->list = g_list_remove(vw->list, chk_fd); |
1664 file_data_unref(chk_fd); | |
9 | 1665 } |
1666 } | |
1667 | |
1668 /* handles stepping correctly when same image is in the list more than once */ | |
1669 if (old && old != vw->list_pointer) | |
1670 { | |
138 | 1671 FileData *fd; |
9 | 1672 |
1673 if (vw->list_pointer) | |
1674 { | |
138 | 1675 fd = vw->list_pointer->data; |
9 | 1676 } |
1677 else | |
1678 { | |
138 | 1679 fd = NULL; |
9 | 1680 } |
1681 | |
334 | 1682 image_change_fd(imd, fd, image_zoom_get_default(imd, options->image.zoom_mode)); |
9 | 1683 } |
1684 } | |
1685 | |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
94
diff
changeset
|
1686 image_osd_update(imd); |
9 | 1687 } |
1688 | |
138 | 1689 static void view_real_moved(ViewWindow *vw, FileData *fd) |
9 | 1690 { |
138 | 1691 /* |
9 | 1692 ImageWindow *imd; |
1693 const gchar *image_path; | |
1694 | |
1695 imd = view_window_active_image(vw); | |
138 | 1696 */ |
1697 /* | |
9 | 1698 image_path = image_get_path(imd); |
1699 | |
138 | 1700 if (image_path && strcmp(image_path, fd->change->source) == 0) |
9 | 1701 { |
138 | 1702 image_set_fd(imd, dest); |
9 | 1703 } |
138 | 1704 */ |
1705 /* | |
9 | 1706 if (vw->list) |
1707 { | |
1708 GList *work; | |
1709 work = vw->list; | |
1710 while (work) | |
1711 { | |
1712 gchar *chk_path; | |
1713 | |
1714 chk_path = work->data; | |
1715 | |
1716 if (strcmp(chk_path, source) == 0) | |
1717 { | |
1718 work->data = g_strdup(dest); | |
1719 g_free(chk_path); | |
1720 } | |
1721 | |
1722 work = work->next; | |
1723 } | |
1724 } | |
138 | 1725 */ |
9 | 1726 } |
1727 | |
138 | 1728 void view_window_maint_removed(FileData *fd, GList *ignore_list) |
9 | 1729 { |
1730 GList *work = view_window_list; | |
1731 while (work) | |
1732 { | |
1733 ViewWindow *vw = work->data; | |
1734 work = work->next; | |
1735 | |
138 | 1736 view_real_removed(vw, fd, ignore_list); |
9 | 1737 } |
1738 } | |
1739 | |
138 | 1740 void view_window_maint_moved(FileData *fd) |
9 | 1741 { |
1742 GList *work = view_window_list; | |
1743 while (work) | |
1744 { | |
1745 ViewWindow *vw = work->data; | |
1746 work = work->next; | |
1747 | |
138 | 1748 view_real_moved(vw, fd); |
9 | 1749 } |
1750 } | |
1751 |