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