Mercurial > geeqie.yaz
annotate src/layout_image.c @ 1678:c029adbabb70
do not try to reload deleted image
deleted image is replaced by the next one from the list, keep
the old image displayed until the new one is set
author | nadvornik |
---|---|
date | Fri, 24 Jul 2009 12:56:54 +0000 |
parents | 717374fb1bbd |
children | 5276dabe836f |
rev | line source |
---|---|
9 | 1 /* |
196 | 2 * Geeqie |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
3 * (C) 2006 John Ellis |
1284 | 4 * Copyright (C) 2008 - 2009 The Geeqie Team |
9 | 5 * |
6 * Author: John Ellis | |
7 * | |
8 * This software is released under the GNU General Public License (GNU GPL). | |
9 * Please read the included file COPYING for more information. | |
10 * This software comes with no warranty of any kind, use at your own risk! | |
11 */ | |
12 | |
281 | 13 #include "main.h" |
9 | 14 #include "layout_image.h" |
15 | |
16 #include "collect.h" | |
1431 | 17 #include "color-man.h" |
9 | 18 #include "dnd.h" |
19 #include "editors.h" | |
586 | 20 #include "filedata.h" |
9 | 21 #include "fullscreen.h" |
22 #include "image.h" | |
23 #include "image-overlay.h" | |
24 #include "img-view.h" | |
25 #include "layout.h" | |
26 #include "layout_util.h" | |
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" |
9 | 29 #include "pixbuf_util.h" |
1375
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
30 #include "pixbuf-renderer.h" |
9 | 31 #include "slideshow.h" |
32 #include "ui_fileops.h" | |
33 #include "ui_menu.h" | |
904
1698baa37871
Move uri_*() functions to separate files: uri_utils.[ch]
zas_
parents:
888
diff
changeset
|
34 #include "uri_utils.h" |
1022
9962b24b6b43
Move miscellaneous functions to their own files (new misc.[ch]).
zas_
parents:
995
diff
changeset
|
35 #include "utilops.h" |
9 | 36 |
37 #include <gdk/gdkkeysyms.h> /* for keyboard values */ | |
38 | |
39 | |
40 static GtkWidget *layout_image_pop_menu(LayoutWindow *lw); | |
41 static void layout_image_set_buttons(LayoutWindow *lw); | |
42 | |
43 /* | |
44 *---------------------------------------------------------------------------- | |
45 * full screen overlay | |
46 *---------------------------------------------------------------------------- | |
47 */ | |
48 | |
122
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
49 void layout_image_overlay_toggle(LayoutWindow *lw) |
9 | 50 { |
481
67a612985686
Merge view_overlay_toggle() and layout_image_overlay_toggle() into new image_osd_toggle().
zas_
parents:
479
diff
changeset
|
51 if (!lw) return; |
67a612985686
Merge view_overlay_toggle() and layout_image_overlay_toggle() into new image_osd_toggle().
zas_
parents:
479
diff
changeset
|
52 image_osd_toggle(lw->image); |
9 | 53 } |
54 | |
55 /* | |
56 *---------------------------------------------------------------------------- | |
57 * full screen | |
58 *---------------------------------------------------------------------------- | |
59 */ | |
160 | 60 |
9 | 61 static void layout_image_full_screen_stop_func(FullScreenData *fs, gpointer data) |
62 { | |
63 LayoutWindow *lw = data; | |
64 | |
65 /* restore image window */ | |
66 lw->image = fs->normal_imd; | |
67 | |
68 lw->full_screen = NULL; | |
69 } | |
70 | |
71 void layout_image_full_screen_start(LayoutWindow *lw) | |
72 { | |
73 if (!layout_valid(&lw)) return; | |
74 | |
75 if (lw->full_screen) return; | |
76 | |
77 lw->full_screen = fullscreen_start(lw->window, lw->image, | |
78 layout_image_full_screen_stop_func, lw); | |
79 | |
80 /* set to new image window */ | |
81 lw->image = lw->full_screen->imd; | |
82 | |
83 layout_image_set_buttons(lw); | |
84 | |
85 g_signal_connect(G_OBJECT(lw->full_screen->window), "key_press_event", | |
160 | 86 G_CALLBACK(layout_key_press_cb), lw); |
9 | 87 |
160 | 88 layout_actions_add_window(lw, lw->full_screen->window); |
9 | 89 #if 0 |
90 gtk_widget_set_sensitive(lw->window, FALSE); | |
91 if (lw->tools) gtk_widget_set_sensitive(lw->tools, FALSE); | |
92 #endif | |
93 | |
1336 | 94 image_osd_copy_status(lw->full_screen->normal_imd, lw->image); |
9 | 95 } |
96 | |
97 void layout_image_full_screen_stop(LayoutWindow *lw) | |
98 { | |
99 if (!layout_valid(&lw)) return; | |
100 if (!lw->full_screen) return; | |
101 | |
1336 | 102 image_osd_copy_status(lw->image, lw->full_screen->normal_imd); |
621 | 103 |
9 | 104 fullscreen_stop(lw->full_screen); |
105 | |
106 #if 0 | |
107 gtk_widget_set_sensitive(lw->window, TRUE); | |
108 if (lw->tools) gtk_widget_set_sensitive(lw->tools, TRUE); | |
109 #endif | |
110 } | |
111 | |
112 void layout_image_full_screen_toggle(LayoutWindow *lw) | |
113 { | |
114 if (!layout_valid(&lw)) return; | |
115 if (lw->full_screen) | |
116 { | |
117 layout_image_full_screen_stop(lw); | |
1591
3681f85cd262
forced image update to re-get cm when it backs from full screen mode.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1590
diff
changeset
|
118 if(lw->image->func_update) lw->image->func_update(lw->image, lw->image->data_update); |
9 | 119 } |
120 else | |
121 { | |
122 layout_image_full_screen_start(lw); | |
123 } | |
124 } | |
125 | |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
126 gboolean layout_image_full_screen_active(LayoutWindow *lw) |
9 | 127 { |
128 if (!layout_valid(&lw)) return FALSE; | |
129 | |
130 return (lw->full_screen != NULL); | |
131 } | |
132 | |
133 /* | |
134 *---------------------------------------------------------------------------- | |
135 * slideshow | |
136 *---------------------------------------------------------------------------- | |
137 */ | |
138 | |
139 static void layout_image_slideshow_next(LayoutWindow *lw) | |
140 { | |
141 if (lw->slideshow) slideshow_next(lw->slideshow); | |
142 } | |
143 | |
144 static void layout_image_slideshow_prev(LayoutWindow *lw) | |
145 { | |
146 if (lw->slideshow) slideshow_prev(lw->slideshow); | |
147 } | |
148 | |
149 static void layout_image_slideshow_stop_func(SlideShowData *ss, gpointer data) | |
150 { | |
151 LayoutWindow *lw = data; | |
152 | |
153 lw->slideshow = NULL; | |
154 layout_status_update_info(lw, NULL); | |
155 } | |
156 | |
157 void layout_image_slideshow_start(LayoutWindow *lw) | |
158 { | |
159 CollectionData *cd; | |
160 CollectInfo *info; | |
161 | |
162 if (!layout_valid(&lw)) return; | |
163 if (lw->slideshow) return; | |
164 | |
165 cd = image_get_collection(lw->image, &info); | |
166 | |
167 if (cd && info) | |
168 { | |
1623
66d4bd637fd7
use layout_set_fd() for changing images from a slideshow
nadvornik
parents:
1622
diff
changeset
|
169 lw->slideshow = slideshow_start_from_collection(lw, NULL, cd, |
9 | 170 layout_image_slideshow_stop_func, lw, info); |
171 } | |
172 else | |
173 { | |
1623
66d4bd637fd7
use layout_set_fd() for changing images from a slideshow
nadvornik
parents:
1622
diff
changeset
|
174 lw->slideshow = slideshow_start(lw, |
783 | 175 layout_list_get_index(lw, layout_image_get_fd(lw)), |
9 | 176 layout_image_slideshow_stop_func, lw); |
177 } | |
178 | |
179 layout_status_update_info(lw, NULL); | |
180 } | |
181 | |
182 /* note that slideshow will take ownership of the list, do not free it */ | |
183 void layout_image_slideshow_start_from_list(LayoutWindow *lw, GList *list) | |
184 { | |
185 if (!layout_valid(&lw)) return; | |
186 | |
187 if (lw->slideshow || !list) | |
188 { | |
138 | 189 filelist_free(list); |
9 | 190 return; |
191 } | |
192 | |
1623
66d4bd637fd7
use layout_set_fd() for changing images from a slideshow
nadvornik
parents:
1622
diff
changeset
|
193 lw->slideshow = slideshow_start_from_filelist(lw, NULL, list, |
9 | 194 layout_image_slideshow_stop_func, lw); |
195 | |
196 layout_status_update_info(lw, NULL); | |
197 } | |
198 | |
199 void layout_image_slideshow_stop(LayoutWindow *lw) | |
200 { | |
201 if (!layout_valid(&lw)) return; | |
202 | |
203 if (!lw->slideshow) return; | |
204 | |
205 slideshow_free(lw->slideshow); | |
206 /* the stop_func sets lw->slideshow to NULL for us */ | |
207 } | |
208 | |
209 void layout_image_slideshow_toggle(LayoutWindow *lw) | |
210 { | |
211 if (!layout_valid(&lw)) return; | |
212 | |
213 if (lw->slideshow) | |
214 { | |
215 layout_image_slideshow_stop(lw); | |
216 } | |
217 else | |
218 { | |
219 layout_image_slideshow_start(lw); | |
220 } | |
221 } | |
222 | |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
223 gboolean layout_image_slideshow_active(LayoutWindow *lw) |
9 | 224 { |
225 if (!layout_valid(&lw)) return FALSE; | |
226 | |
227 return (lw->slideshow != NULL); | |
228 } | |
229 | |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
230 gboolean layout_image_slideshow_pause_toggle(LayoutWindow *lw) |
9 | 231 { |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
232 gboolean ret; |
9 | 233 |
234 if (!layout_valid(&lw)) return FALSE; | |
235 | |
236 ret = slideshow_pause_toggle(lw->slideshow); | |
237 | |
238 layout_status_update_info(lw, NULL); | |
239 | |
240 return ret; | |
241 } | |
242 | |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
243 gboolean layout_image_slideshow_paused(LayoutWindow *lw) |
9 | 244 { |
245 if (!layout_valid(&lw)) return FALSE; | |
246 | |
247 return (slideshow_paused(lw->slideshow)); | |
248 } | |
249 | |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
250 static gboolean layout_image_slideshow_continue_check(LayoutWindow *lw) |
9 | 251 { |
252 if (!lw->slideshow) return FALSE; | |
253 | |
254 if (!slideshow_should_continue(lw->slideshow)) | |
255 { | |
256 layout_image_slideshow_stop(lw); | |
257 return FALSE; | |
258 } | |
259 | |
260 return TRUE; | |
261 } | |
262 | |
263 /* | |
264 *---------------------------------------------------------------------------- | |
265 * pop-up menus | |
266 *---------------------------------------------------------------------------- | |
267 */ | |
268 | |
269 static void li_pop_menu_zoom_in_cb(GtkWidget *widget, gpointer data) | |
270 { | |
271 LayoutWindow *lw = data; | |
272 | |
1047 | 273 layout_image_zoom_adjust(lw, get_zoom_increment(), FALSE); |
9 | 274 } |
275 | |
276 static void li_pop_menu_zoom_out_cb(GtkWidget *widget, gpointer data) | |
277 { | |
278 LayoutWindow *lw = data; | |
1047 | 279 layout_image_zoom_adjust(lw, -get_zoom_increment(), FALSE); |
9 | 280 } |
281 | |
282 static void li_pop_menu_zoom_1_1_cb(GtkWidget *widget, gpointer data) | |
283 { | |
284 LayoutWindow *lw = data; | |
285 | |
1047 | 286 layout_image_zoom_set(lw, 1.0, FALSE); |
9 | 287 } |
288 | |
289 static void li_pop_menu_zoom_fit_cb(GtkWidget *widget, gpointer data) | |
290 { | |
291 LayoutWindow *lw = data; | |
292 | |
1047 | 293 layout_image_zoom_set(lw, 0.0, FALSE); |
9 | 294 } |
295 | |
296 static void li_pop_menu_edit_cb(GtkWidget *widget, gpointer data) | |
297 { | |
298 LayoutWindow *lw; | |
1272 | 299 const gchar *key = data; |
9 | 300 |
301 lw = submenu_item_get_data(widget); | |
302 | |
1272 | 303 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
|
304 { |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
305 layout_image_full_screen_stop(lw); |
9c0c402b0ef3
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
306 } |
1272 | 307 file_util_start_editor_from_file(key, layout_image_get_fd(lw), lw->window); |
9 | 308 } |
309 | |
310 static void li_pop_menu_wallpaper_cb(GtkWidget *widget, gpointer data) | |
311 { | |
312 LayoutWindow *lw = data; | |
313 | |
314 layout_image_to_root(lw); | |
315 } | |
316 | |
317 static void li_pop_menu_alter_cb(GtkWidget *widget, gpointer data) | |
318 { | |
319 LayoutWindow *lw = data; | |
320 AlterType type; | |
321 | |
322 lw = submenu_item_get_data(widget); | |
323 type = (AlterType)GPOINTER_TO_INT(data); | |
324 | |
325 image_alter(lw->image, type); | |
326 } | |
327 | |
328 static void li_pop_menu_new_cb(GtkWidget *widget, gpointer data) | |
329 { | |
330 LayoutWindow *lw = data; | |
331 | |
138 | 332 view_window_new(layout_image_get_fd(lw)); |
9 | 333 } |
334 | |
335 static GtkWidget *li_pop_menu_click_parent(GtkWidget *widget, LayoutWindow *lw) | |
336 { | |
337 GtkWidget *menu; | |
338 GtkWidget *parent; | |
339 | |
340 menu = gtk_widget_get_toplevel(widget); | |
341 if (!menu) return NULL; | |
342 | |
343 parent = g_object_get_data(G_OBJECT(menu), "click_parent"); | |
344 | |
345 if (!parent && lw->full_screen) | |
346 { | |
347 parent = lw->full_screen->imd->widget; | |
348 } | |
349 | |
350 return parent; | |
351 } | |
352 | |
353 static void li_pop_menu_copy_cb(GtkWidget *widget, gpointer data) | |
354 { | |
355 LayoutWindow *lw = data; | |
356 | |
138 | 357 file_util_copy(layout_image_get_fd(lw), NULL, NULL, |
9 | 358 li_pop_menu_click_parent(widget, lw)); |
359 } | |
360 | |
497 | 361 static void li_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data) |
362 { | |
363 LayoutWindow *lw = data; | |
364 | |
365 file_util_copy_path_to_clipboard(layout_image_get_fd(lw)); | |
366 } | |
367 | |
9 | 368 static void li_pop_menu_move_cb(GtkWidget *widget, gpointer data) |
369 { | |
370 LayoutWindow *lw = data; | |
371 | |
138 | 372 file_util_move(layout_image_get_fd(lw), NULL, NULL, |
9 | 373 li_pop_menu_click_parent(widget, lw)); |
374 } | |
375 | |
376 static void li_pop_menu_rename_cb(GtkWidget *widget, gpointer data) | |
377 { | |
378 LayoutWindow *lw = data; | |
379 | |
138 | 380 file_util_rename(layout_image_get_fd(lw), NULL, |
9 | 381 li_pop_menu_click_parent(widget, lw)); |
382 } | |
383 | |
384 static void li_pop_menu_delete_cb(GtkWidget *widget, gpointer data) | |
385 { | |
386 LayoutWindow *lw = data; | |
387 | |
138 | 388 file_util_delete(layout_image_get_fd(lw), NULL, |
9 | 389 li_pop_menu_click_parent(widget, lw)); |
390 } | |
391 | |
392 static void li_pop_menu_slide_start_cb(GtkWidget *widget, gpointer data) | |
393 { | |
394 LayoutWindow *lw = data; | |
395 | |
396 layout_image_slideshow_start(lw); | |
397 } | |
398 | |
399 static void li_pop_menu_slide_stop_cb(GtkWidget *widget, gpointer data) | |
400 { | |
401 LayoutWindow *lw = data; | |
402 | |
403 layout_image_slideshow_stop(lw); | |
404 } | |
405 | |
406 static void li_pop_menu_slide_pause_cb(GtkWidget *widget, gpointer data) | |
407 { | |
408 LayoutWindow *lw = data; | |
409 | |
410 layout_image_slideshow_pause_toggle(lw); | |
411 } | |
412 | |
413 static void li_pop_menu_full_screen_cb(GtkWidget *widget, gpointer data) | |
414 { | |
415 LayoutWindow *lw = data; | |
416 | |
417 layout_image_full_screen_toggle(lw); | |
418 } | |
419 | |
420 static void li_pop_menu_hide_cb(GtkWidget *widget, gpointer data) | |
421 { | |
422 LayoutWindow *lw = data; | |
423 | |
424 layout_tools_hide_toggle(lw); | |
425 } | |
426 | |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
427 static void li_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:
339
diff
changeset
|
428 { |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
429 LayoutWindow *lw = data; |
783 | 430 FileData *fd; |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
431 |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
432 if (!layout_valid(&lw)) return; |
442 | 433 |
783 | 434 fd = layout_image_get_fd(lw); |
435 if (fd) layout_set_fd(lw, fd); | |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
436 } |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
437 |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
438 static gboolean li_check_if_current_path(LayoutWindow *lw, const gchar *path) |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
439 { |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
440 gchar *dirname; |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
441 gboolean ret; |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
442 |
783 | 443 if (!path || !layout_valid(&lw) || !lw->dir_fd) return FALSE; |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
444 |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
445 dirname = g_path_get_dirname(path); |
783 | 446 ret = (strcmp(lw->dir_fd->path, dirname) == 0); |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
447 g_free(dirname); |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
448 return ret; |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
449 } |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
450 |
1397
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
451 static void layout_image_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:
1383
diff
changeset
|
452 { |
1675 | 453 GList *editmenu_fd_list = data; |
1397
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
454 |
1675 | 455 filelist_free(editmenu_fd_list); |
456 } | |
1397
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
457 |
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
458 static GList *layout_image_get_fd_list(LayoutWindow *lw) |
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
459 { |
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
460 GList *list = NULL; |
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
461 FileData *fd = layout_image_get_fd(lw); |
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
462 |
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
463 if (fd) |
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
464 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:
1383
diff
changeset
|
465 |
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
466 return list; |
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
467 } |
a0bd58a6535f
In various Edit context menus, only display editors that match the file types in the selection.
zas_
parents:
1383
diff
changeset
|
468 |
9 | 469 static GtkWidget *layout_image_pop_menu(LayoutWindow *lw) |
470 { | |
471 GtkWidget *menu; | |
472 GtkWidget *item; | |
473 GtkWidget *submenu; | |
474 const gchar *path; | |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
475 gboolean fullscreen; |
1675 | 476 GList *editmenu_fd_list; |
9 | 477 |
478 path = layout_image_get_path(lw); | |
479 fullscreen = layout_image_full_screen_active(lw); | |
480 | |
481 menu = popup_menu_short_lived(); | |
482 | |
483 menu_item_add_stock(menu, _("Zoom _in"), GTK_STOCK_ZOOM_IN, G_CALLBACK(li_pop_menu_zoom_in_cb), lw); | |
484 menu_item_add_stock(menu, _("Zoom _out"), GTK_STOCK_ZOOM_OUT, G_CALLBACK(li_pop_menu_zoom_out_cb), lw); | |
485 menu_item_add_stock(menu, _("Zoom _1:1"), GTK_STOCK_ZOOM_100, G_CALLBACK(li_pop_menu_zoom_1_1_cb), lw); | |
486 menu_item_add_stock(menu, _("Fit image to _window"), GTK_STOCK_ZOOM_FIT, G_CALLBACK(li_pop_menu_zoom_fit_cb), lw); | |
487 menu_item_add_divider(menu); | |
488 | |
1675 | 489 editmenu_fd_list = layout_image_get_fd_list(lw); |
490 g_signal_connect(G_OBJECT(menu), "destroy", | |
491 G_CALLBACK(layout_image_popup_menu_destroy_cb), editmenu_fd_list); | |
492 submenu = submenu_add_edit(menu, &item, G_CALLBACK(li_pop_menu_edit_cb), lw, editmenu_fd_list); | |
9 | 493 if (!path) gtk_widget_set_sensitive(item, FALSE); |
494 menu_item_add_divider(submenu); | |
495 menu_item_add(submenu, _("Set as _wallpaper"), G_CALLBACK(li_pop_menu_wallpaper_cb), lw); | |
496 | |
497 item = submenu_add_alter(menu, G_CALLBACK(li_pop_menu_alter_cb), lw); | |
498 | |
499 item = menu_item_add_stock(menu, _("View in _new window"), GTK_STOCK_NEW, G_CALLBACK(li_pop_menu_new_cb), lw); | |
500 if (!path || fullscreen) gtk_widget_set_sensitive(item, FALSE); | |
442 | 501 |
368
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
502 item = menu_item_add(menu, _("_Go to directory view"), G_CALLBACK(li_set_layout_path_cb), lw); |
95fe470440ad
New Go to directory view feature that permits to find and display the directory
zas_
parents:
339
diff
changeset
|
503 if (!path || li_check_if_current_path(lw, path)) gtk_widget_set_sensitive(item, FALSE); |
9 | 504 |
505 menu_item_add_divider(menu); | |
506 | |
507 item = menu_item_add_stock(menu, _("_Copy..."), GTK_STOCK_COPY, G_CALLBACK(li_pop_menu_copy_cb), lw); | |
508 if (!path) gtk_widget_set_sensitive(item, FALSE); | |
509 item = menu_item_add(menu, _("_Move..."), G_CALLBACK(li_pop_menu_move_cb), lw); | |
510 if (!path) gtk_widget_set_sensitive(item, FALSE); | |
511 item = menu_item_add(menu, _("_Rename..."), G_CALLBACK(li_pop_menu_rename_cb), lw); | |
512 if (!path) gtk_widget_set_sensitive(item, FALSE); | |
513 item = menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(li_pop_menu_delete_cb), lw); | |
514 if (!path) gtk_widget_set_sensitive(item, FALSE); | |
497 | 515 |
1513 | 516 item = menu_item_add(menu, _("_Copy path"), G_CALLBACK(li_pop_menu_copy_path_cb), lw); |
517 if (!path) gtk_widget_set_sensitive(item, FALSE); | |
9 | 518 |
519 menu_item_add_divider(menu); | |
520 | |
521 if (layout_image_slideshow_active(lw)) | |
522 { | |
523 menu_item_add(menu, _("_Stop slideshow"), G_CALLBACK(li_pop_menu_slide_stop_cb), lw); | |
524 if (layout_image_slideshow_paused(lw)) | |
525 { | |
526 item = menu_item_add(menu, _("Continue slides_how"), | |
527 G_CALLBACK(li_pop_menu_slide_pause_cb), lw); | |
528 } | |
529 else | |
530 { | |
531 item = menu_item_add(menu, _("Pause slides_how"), | |
532 G_CALLBACK(li_pop_menu_slide_pause_cb), lw); | |
533 } | |
534 } | |
535 else | |
442 | 536 { |
9 | 537 menu_item_add(menu, _("_Start slideshow"), G_CALLBACK(li_pop_menu_slide_start_cb), lw); |
538 item = menu_item_add(menu, _("Pause slides_how"), G_CALLBACK(li_pop_menu_slide_pause_cb), lw); | |
539 gtk_widget_set_sensitive(item, FALSE); | |
540 } | |
541 | |
542 if (!fullscreen) | |
543 { | |
544 menu_item_add(menu, _("_Full screen"), G_CALLBACK(li_pop_menu_full_screen_cb), lw); | |
545 } | |
546 else | |
547 { | |
548 menu_item_add(menu, _("Exit _full screen"), G_CALLBACK(li_pop_menu_full_screen_cb), lw); | |
549 } | |
550 | |
551 menu_item_add_divider(menu); | |
552 | |
1309 | 553 item = menu_item_add_check(menu, _("Hide file _list"), lw->options.tools_hidden, |
9 | 554 G_CALLBACK(li_pop_menu_hide_cb), lw); |
555 if (fullscreen) gtk_widget_set_sensitive(item, FALSE); | |
556 | |
557 return menu; | |
558 } | |
559 | |
560 static void layout_image_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data) | |
561 { | |
562 LayoutWindow *lw = data; | |
563 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
564 gdk_window_get_origin(lw->image->pr->window, x, y); |
9 | 565 popup_menu_position_clamp(menu, x, y, 0); |
566 } | |
567 | |
568 void layout_image_menu_popup(LayoutWindow *lw) | |
569 { | |
570 GtkWidget *menu; | |
571 | |
572 menu = layout_image_pop_menu(lw); | |
573 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, layout_image_menu_pos_cb, lw, 0, GDK_CURRENT_TIME); | |
574 } | |
575 | |
576 /* | |
577 *---------------------------------------------------------------------------- | |
578 * dnd | |
579 *---------------------------------------------------------------------------- | |
580 */ | |
581 | |
582 static void layout_image_dnd_receive(GtkWidget *widget, GdkDragContext *context, | |
583 gint x, gint y, | |
584 GtkSelectionData *selection_data, guint info, | |
585 guint time, gpointer data) | |
586 { | |
587 LayoutWindow *lw = data; | |
127 | 588 gint i; |
442 | 589 |
590 | |
520 | 591 for (i = 0; i < MAX_SPLIT_IMAGES; i++) |
127 | 592 { |
593 if (lw->split_images[i] && lw->split_images[i]->pr == widget) | |
594 break; | |
595 } | |
596 if (i < MAX_SPLIT_IMAGES) | |
597 { | |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
497
diff
changeset
|
598 DEBUG_1("dnd image activate %d", i); |
1653 | 599 layout_image_activate(lw, i, FALSE); |
127 | 600 } |
601 | |
9 | 602 |
603 if (info == TARGET_URI_LIST || info == TARGET_APP_COLLECTION_MEMBER) | |
604 { | |
605 CollectionData *source; | |
606 GList *list; | |
607 GList *info_list; | |
608 | |
609 if (info == TARGET_URI_LIST) | |
610 { | |
138 | 611 list = uri_filelist_from_text((gchar *)selection_data->data, TRUE); |
9 | 612 source = NULL; |
613 info_list = NULL; | |
614 } | |
615 else | |
616 { | |
617 source = collection_from_dnd_data((gchar *)selection_data->data, &list, &info_list); | |
618 } | |
619 | |
620 if (list) | |
621 { | |
138 | 622 FileData *fd = list->data; |
9 | 623 |
138 | 624 if (isfile(fd->path)) |
9 | 625 { |
626 gchar *base; | |
627 gint row; | |
783 | 628 FileData *dir_fd; |
9 | 629 |
138 | 630 base = remove_level_from_path(fd->path); |
783 | 631 dir_fd = file_data_new_simple(base); |
632 if (dir_fd != lw->dir_fd) | |
9 | 633 { |
783 | 634 layout_set_fd(lw, dir_fd); |
9 | 635 } |
783 | 636 file_data_unref(dir_fd); |
9 | 637 g_free(base); |
638 | |
783 | 639 row = layout_list_get_index(lw, fd); |
9 | 640 if (source && info_list) |
641 { | |
642 layout_image_set_collection(lw, source, info_list->data); | |
643 } | |
644 else if (row == -1) | |
645 { | |
138 | 646 layout_image_set_fd(lw, fd); |
9 | 647 } |
648 else | |
649 { | |
650 layout_image_set_index(lw, row); | |
651 } | |
652 } | |
138 | 653 else if (isdir(fd->path)) |
9 | 654 { |
783 | 655 layout_set_fd(lw, fd); |
138 | 656 layout_image_set_fd(lw, NULL); |
9 | 657 } |
658 } | |
659 | |
138 | 660 filelist_free(list); |
9 | 661 g_list_free(info_list); |
662 } | |
663 } | |
664 | |
665 static void layout_image_dnd_get(GtkWidget *widget, GdkDragContext *context, | |
666 GtkSelectionData *selection_data, guint info, | |
667 guint time, gpointer data) | |
668 { | |
669 LayoutWindow *lw = data; | |
138 | 670 FileData *fd; |
127 | 671 gint i; |
442 | 672 |
673 | |
520 | 674 for (i = 0; i < MAX_SPLIT_IMAGES; i++) |
127 | 675 { |
676 if (lw->split_images[i] && lw->split_images[i]->pr == widget) | |
677 break; | |
678 } | |
679 if (i < MAX_SPLIT_IMAGES) | |
680 { | |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
497
diff
changeset
|
681 DEBUG_1("dnd get from %d", i); |
138 | 682 fd = image_get_fd(lw->split_images[i]); |
127 | 683 } |
684 else | |
138 | 685 fd = layout_image_get_fd(lw); |
9 | 686 |
138 | 687 if (fd) |
9 | 688 { |
689 gchar *text = NULL; | |
690 gint len; | |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
691 gboolean plain_text; |
9 | 692 GList *list; |
693 | |
694 switch (info) | |
695 { | |
696 case TARGET_URI_LIST: | |
697 plain_text = FALSE; | |
698 break; | |
699 case TARGET_TEXT_PLAIN: | |
700 default: | |
701 plain_text = TRUE; | |
702 break; | |
703 } | |
138 | 704 list = g_list_append(NULL, fd); |
705 text = uri_text_from_filelist(list, &len, plain_text); | |
9 | 706 g_list_free(list); |
707 if (text) | |
708 { | |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
709 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:
507
diff
changeset
|
710 8, (guchar *)text, len); |
9 | 711 g_free(text); |
712 } | |
713 } | |
714 else | |
715 { | |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
716 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:
507
diff
changeset
|
717 8, NULL, 0); |
9 | 718 } |
719 } | |
720 | |
721 static void layout_image_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data) | |
722 { | |
723 LayoutWindow *lw = data; | |
724 if (context->action == GDK_ACTION_MOVE) | |
725 { | |
783 | 726 FileData *fd; |
9 | 727 gint row; |
728 | |
783 | 729 fd = layout_image_get_fd(lw); |
730 row = layout_list_get_index(lw, fd); | |
9 | 731 if (row < 0) return; |
732 | |
783 | 733 if (!isfile(fd->path)) |
9 | 734 { |
736 | 735 if ((guint) row < layout_list_count(lw, NULL) - 1) |
9 | 736 { |
737 layout_image_next(lw); | |
738 } | |
739 else | |
740 { | |
741 layout_image_prev(lw); | |
742 } | |
743 } | |
744 layout_refresh(lw); | |
745 } | |
746 } | |
747 | |
127 | 748 static void layout_image_dnd_init(LayoutWindow *lw, gint i) |
9 | 749 { |
127 | 750 ImageWindow *imd = lw->split_images[i]; |
751 | |
752 gtk_drag_source_set(imd->pr, GDK_BUTTON2_MASK, | |
9 | 753 dnd_file_drag_types, dnd_file_drag_types_count, |
754 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); | |
127 | 755 g_signal_connect(G_OBJECT(imd->pr), "drag_data_get", |
9 | 756 G_CALLBACK(layout_image_dnd_get), lw); |
127 | 757 g_signal_connect(G_OBJECT(imd->pr), "drag_end", |
9 | 758 G_CALLBACK(layout_image_dnd_end), lw); |
759 | |
127 | 760 gtk_drag_dest_set(imd->pr, |
9 | 761 GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, |
762 dnd_file_drop_types, dnd_file_drop_types_count, | |
442 | 763 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); |
127 | 764 g_signal_connect(G_OBJECT(imd->pr), "drag_data_received", |
9 | 765 G_CALLBACK(layout_image_dnd_receive), lw); |
766 } | |
767 | |
768 | |
769 /* | |
770 *---------------------------------------------------------------------------- | |
771 * misc | |
772 *---------------------------------------------------------------------------- | |
773 */ | |
774 | |
775 void layout_image_to_root(LayoutWindow *lw) | |
776 { | |
777 image_to_root_window(lw->image, (image_zoom_get(lw->image) == 0)); | |
778 } | |
779 | |
780 /* | |
781 *---------------------------------------------------------------------------- | |
782 * manipulation + accessors | |
783 *---------------------------------------------------------------------------- | |
784 */ | |
785 | |
1047 | 786 void layout_image_scroll(LayoutWindow *lw, gint x, gint y, gboolean connect_scroll) |
9 | 787 { |
530
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
788 gdouble dx, dy; |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
789 gint width, height, i; |
9 | 790 if (!layout_valid(&lw)) return; |
791 | |
792 image_scroll(lw->image, x, y); | |
530
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
793 |
1047 | 794 if (!connect_scroll) return; |
879
0f85435ac335
Optimize a bit when connected zoom and scrolling are unset,
zas_
parents:
869
diff
changeset
|
795 |
530
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
796 image_get_image_size(lw->image, &width, &height); |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
797 dx = (gdouble) x / width; |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
798 dy = (gdouble) y / height; |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
799 |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
800 for (i = 0; i < MAX_SPLIT_IMAGES; i++) |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
801 { |
879
0f85435ac335
Optimize a bit when connected zoom and scrolling are unset,
zas_
parents:
869
diff
changeset
|
802 if (lw->split_images[i] && lw->split_images[i] != lw->image) |
530
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
803 { |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
804 gdouble sx, sy; |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
805 image_get_scroll_center(lw->split_images[i], &sx, &sy); |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
806 sx += dx; |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
807 sy += dy; |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
808 image_set_scroll_center(lw->split_images[i], sx, sy); |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
809 } |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
810 } |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
811 |
9 | 812 } |
813 | |
1047 | 814 void layout_image_zoom_adjust(LayoutWindow *lw, gdouble increment, gboolean connect_zoom) |
9 | 815 { |
130 | 816 gint i; |
9 | 817 if (!layout_valid(&lw)) return; |
818 | |
819 image_zoom_adjust(lw->image, increment); | |
130 | 820 |
1047 | 821 if (!connect_zoom) return; |
879
0f85435ac335
Optimize a bit when connected zoom and scrolling are unset,
zas_
parents:
869
diff
changeset
|
822 |
520 | 823 for (i = 0; i < MAX_SPLIT_IMAGES; i++) |
130 | 824 { |
879
0f85435ac335
Optimize a bit when connected zoom and scrolling are unset,
zas_
parents:
869
diff
changeset
|
825 if (lw->split_images[i] && lw->split_images[i] != lw->image) |
130 | 826 image_zoom_adjust(lw->split_images[i], increment); ; |
827 } | |
9 | 828 } |
829 | |
1047 | 830 void layout_image_zoom_adjust_at_point(LayoutWindow *lw, gdouble increment, gint x, gint y, gboolean connect_zoom) |
530
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
831 { |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
832 gint i; |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
833 if (!layout_valid(&lw)) return; |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
834 |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
835 image_zoom_adjust_at_point(lw->image, increment, x, y); |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
836 |
1047 | 837 if (!connect_zoom) return; |
879
0f85435ac335
Optimize a bit when connected zoom and scrolling are unset,
zas_
parents:
869
diff
changeset
|
838 |
530
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
839 for (i = 0; i < MAX_SPLIT_IMAGES; i++) |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
840 { |
879
0f85435ac335
Optimize a bit when connected zoom and scrolling are unset,
zas_
parents:
869
diff
changeset
|
841 if (lw->split_images[i] && lw->split_images[i] != lw->image) |
530
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
842 image_zoom_adjust_at_point(lw->split_images[i], increment, x, y); |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
843 } |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
844 } |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
529
diff
changeset
|
845 |
1047 | 846 void layout_image_zoom_set(LayoutWindow *lw, gdouble zoom, gboolean connect_zoom) |
9 | 847 { |
130 | 848 gint i; |
9 | 849 if (!layout_valid(&lw)) return; |
850 | |
851 image_zoom_set(lw->image, zoom); | |
130 | 852 |
1047 | 853 if (!connect_zoom) return; |
879
0f85435ac335
Optimize a bit when connected zoom and scrolling are unset,
zas_
parents:
869
diff
changeset
|
854 |
0f85435ac335
Optimize a bit when connected zoom and scrolling are unset,
zas_
parents:
869
diff
changeset
|
855 for (i = 0; i < MAX_SPLIT_IMAGES; i++) |
130 | 856 { |
879
0f85435ac335
Optimize a bit when connected zoom and scrolling are unset,
zas_
parents:
869
diff
changeset
|
857 if (lw->split_images[i] && lw->split_images[i] != lw->image) |
130 | 858 image_zoom_set(lw->split_images[i], zoom); |
859 } | |
9 | 860 } |
861 | |
1269 | 862 void layout_image_zoom_set_fill_geometry(LayoutWindow *lw, gboolean vertical, gboolean connect_zoom) |
9 | 863 { |
1047 | 864 gint i; |
9 | 865 if (!layout_valid(&lw)) return; |
866 | |
867 image_zoom_set_fill_geometry(lw->image, vertical); | |
1047 | 868 |
869 if (!connect_zoom) return; | |
870 | |
871 for (i = 0; i < MAX_SPLIT_IMAGES; i++) | |
872 { | |
873 if (lw->split_images[i] && lw->split_images[i] != lw->image) | |
874 image_zoom_set_fill_geometry(lw->split_images[i], vertical); | |
875 } | |
9 | 876 } |
877 | |
878 void layout_image_alter(LayoutWindow *lw, AlterType type) | |
879 { | |
880 if (!layout_valid(&lw)) return; | |
881 | |
882 image_alter(lw->image, type); | |
883 } | |
884 | |
885 const gchar *layout_image_get_path(LayoutWindow *lw) | |
886 { | |
887 if (!layout_valid(&lw)) return NULL; | |
888 | |
889 return image_get_path(lw->image); | |
890 } | |
891 | |
892 const gchar *layout_image_get_name(LayoutWindow *lw) | |
893 { | |
894 if (!layout_valid(&lw)) return NULL; | |
895 | |
896 return image_get_name(lw->image); | |
897 } | |
898 | |
138 | 899 FileData *layout_image_get_fd(LayoutWindow *lw) |
900 { | |
901 if (!layout_valid(&lw)) return NULL; | |
902 | |
903 return image_get_fd(lw->image); | |
904 } | |
905 | |
9 | 906 CollectionData *layout_image_get_collection(LayoutWindow *lw, CollectInfo **info) |
907 { | |
908 if (!layout_valid(&lw)) return NULL; | |
909 | |
910 return image_get_collection(lw->image, info); | |
911 } | |
912 | |
913 gint layout_image_get_index(LayoutWindow *lw) | |
914 { | |
783 | 915 return layout_list_get_index(lw, image_get_fd(lw->image)); |
9 | 916 } |
917 | |
918 /* | |
919 *---------------------------------------------------------------------------- | |
920 * image changers | |
921 *---------------------------------------------------------------------------- | |
922 */ | |
923 | |
138 | 924 void layout_image_set_fd(LayoutWindow *lw, FileData *fd) |
9 | 925 { |
926 if (!layout_valid(&lw)) return; | |
927 | |
885
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
879
diff
changeset
|
928 image_change_fd(lw->image, fd, image_zoom_get_default(lw->image)); |
9 | 929 |
138 | 930 layout_list_sync_fd(lw, fd); |
9 | 931 layout_image_slideshow_continue_check(lw); |
932 layout_bars_new_image(lw); | |
933 } | |
934 | |
138 | 935 void layout_image_set_with_ahead(LayoutWindow *lw, FileData *fd, FileData *read_ahead_fd) |
9 | 936 { |
937 if (!layout_valid(&lw)) return; | |
938 | |
144 | 939 /* |
940 This should be handled at the caller: in vflist_select_image | |
941 if (path) | |
9 | 942 { |
943 const gchar *old_path; | |
944 | |
945 old_path = layout_image_get_path(lw); | |
946 if (old_path && strcmp(path, old_path) == 0) return; | |
947 } | |
127 | 948 */ |
138 | 949 layout_image_set_fd(lw, fd); |
334 | 950 if (options->image.enable_read_ahead) image_prebuffer_set(lw->image, read_ahead_fd); |
9 | 951 } |
952 | |
953 void layout_image_set_index(LayoutWindow *lw, gint index) | |
954 { | |
138 | 955 FileData *fd; |
956 FileData *read_ahead_fd; | |
9 | 957 gint old; |
958 | |
959 if (!layout_valid(&lw)) return; | |
960 | |
783 | 961 old = layout_list_get_index(lw, layout_image_get_fd(lw)); |
138 | 962 fd = layout_list_get_fd(lw, index); |
9 | 963 |
964 if (old > index) | |
965 { | |
138 | 966 read_ahead_fd = layout_list_get_fd(lw, index - 1); |
9 | 967 } |
968 else | |
969 { | |
138 | 970 read_ahead_fd = layout_list_get_fd(lw, index + 1); |
9 | 971 } |
972 | |
995 | 973 if (layout_selection_count(lw, 0) > 1) |
220 | 974 { |
995 | 975 GList *x = layout_selection_list_by_index(lw); |
976 GList *y; | |
977 GList *last; | |
220 | 978 |
995 | 979 for (last = y = x; y; y = y->next) |
980 last = y; | |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
981 for (y = x; y && (GPOINTER_TO_INT(y->data)) != index; y = y->next) |
220 | 982 ; |
983 | |
984 if (y) | |
985 { | |
986 gint newindex; | |
987 | |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
988 if ((index > old && (index != GPOINTER_TO_INT(last->data) || old != GPOINTER_TO_INT(x->data))) |
995 | 989 || (old == GPOINTER_TO_INT(last->data) && index == GPOINTER_TO_INT(x->data))) |
442 | 990 { |
220 | 991 if (y->next) |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
992 newindex = GPOINTER_TO_INT(y->next->data); |
220 | 993 else |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
994 newindex = GPOINTER_TO_INT(x->data); |
220 | 995 } |
996 else | |
997 { | |
998 if (y->prev) | |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
999 newindex = GPOINTER_TO_INT(y->prev->data); |
220 | 1000 else |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
1001 newindex = GPOINTER_TO_INT(last->data); |
995 | 1002 } |
220 | 1003 |
1004 read_ahead_fd = layout_list_get_fd(lw, newindex); | |
1005 } | |
442 | 1006 |
220 | 1007 while (x) |
1008 x = g_list_remove(x, x->data); | |
1009 } | |
1010 | |
138 | 1011 layout_image_set_with_ahead(lw, fd, read_ahead_fd); |
9 | 1012 } |
1013 | |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
1014 static void layout_image_set_collection_real(LayoutWindow *lw, CollectionData *cd, CollectInfo *info, gboolean forward) |
9 | 1015 { |
1016 if (!layout_valid(&lw)) return; | |
1017 | |
885
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
879
diff
changeset
|
1018 image_change_from_collection(lw->image, cd, info, image_zoom_get_default(lw->image)); |
334 | 1019 if (options->image.enable_read_ahead) |
9 | 1020 { |
1021 CollectInfo *r_info; | |
1022 if (forward) | |
1023 { | |
1024 r_info = collection_next_by_info(cd, info); | |
1025 if (!r_info) r_info = collection_prev_by_info(cd, info); | |
1026 } | |
1027 else | |
1028 { | |
1029 r_info = collection_prev_by_info(cd, info); | |
1030 if (!r_info) r_info = collection_next_by_info(cd, info); | |
1031 } | |
138 | 1032 if (r_info) image_prebuffer_set(lw->image, r_info->fd); |
9 | 1033 } |
1034 | |
1035 layout_image_slideshow_continue_check(lw); | |
1036 layout_bars_new_image(lw); | |
1037 } | |
1038 | |
1039 void layout_image_set_collection(LayoutWindow *lw, CollectionData *cd, CollectInfo *info) | |
1040 { | |
1041 layout_image_set_collection_real(lw, cd, info, TRUE); | |
138 | 1042 layout_list_sync_fd(lw, layout_image_get_fd(lw)); |
9 | 1043 } |
1044 | |
1045 void layout_image_refresh(LayoutWindow *lw) | |
1046 { | |
1047 if (!layout_valid(&lw)) return; | |
1048 | |
1049 image_reload(lw->image); | |
1050 } | |
1051 | |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1052 void layout_image_color_profile_set(LayoutWindow *lw, |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1053 gint input_type, gint screen_type, |
1431 | 1054 gboolean use_image) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1055 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1056 if (!layout_valid(&lw)) return; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1057 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1058 image_color_profile_set(lw->image, input_type, screen_type, use_image); |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1059 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1060 |
1431 | 1061 gboolean layout_image_color_profile_get(LayoutWindow *lw, |
1062 gint *input_type, gint *screen_type, | |
1063 gboolean *use_image) | |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1064 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1065 if (!layout_valid(&lw)) return FALSE; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1066 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1067 return image_color_profile_get(lw->image, input_type, screen_type, use_image); |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1068 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1069 |
1431 | 1070 void layout_image_color_profile_set_use(LayoutWindow *lw, gboolean enable) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1071 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1072 if (!layout_valid(&lw)) return; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1073 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1074 image_color_profile_set_use(lw->image, enable); |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1075 |
1590
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1589
diff
changeset
|
1076 /* xxx --yaz */ |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1589
diff
changeset
|
1077 #if 0 |
1588
0434f34b1ee4
Backed out changeset 2a3efbdf73b0
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1547
diff
changeset
|
1078 if (lw->info_color) |
0434f34b1ee4
Backed out changeset 2a3efbdf73b0
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1547
diff
changeset
|
1079 { |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1080 #ifndef HAVE_LCMS |
1588
0434f34b1ee4
Backed out changeset 2a3efbdf73b0
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1547
diff
changeset
|
1081 enable = FALSE; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1082 #endif |
1588
0434f34b1ee4
Backed out changeset 2a3efbdf73b0
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1547
diff
changeset
|
1083 gtk_widget_set_sensitive(GTK_BIN(lw->info_color)->child, enable); |
0434f34b1ee4
Backed out changeset 2a3efbdf73b0
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1547
diff
changeset
|
1084 } |
1590
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1589
diff
changeset
|
1085 #endif |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1086 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1087 |
1431 | 1088 gboolean layout_image_color_profile_get_use(LayoutWindow *lw) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1089 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1090 if (!layout_valid(&lw)) return FALSE; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1091 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1092 return image_color_profile_get_use(lw->image); |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1093 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1094 |
426
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
369
diff
changeset
|
1095 gint layout_image_color_profile_get_from_image(LayoutWindow *lw) |
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
369
diff
changeset
|
1096 { |
1431 | 1097 if (!layout_valid(&lw)) return COLOR_PROFILE_NONE; |
426
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
369
diff
changeset
|
1098 |
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
369
diff
changeset
|
1099 return image_color_profile_get_from_image(lw->image); |
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
369
diff
changeset
|
1100 } |
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
369
diff
changeset
|
1101 |
1590
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1589
diff
changeset
|
1102 gboolean layout_image_color_profile_get_status(LayoutWindow *lw, gchar **image_profile, gchar **screen_profile) |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1589
diff
changeset
|
1103 { |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1589
diff
changeset
|
1104 if (!layout_valid(&lw)) return FALSE; |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1589
diff
changeset
|
1105 |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1589
diff
changeset
|
1106 return image_color_profile_get_status(lw->image, image_profile, screen_profile); |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1589
diff
changeset
|
1107 } |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1589
diff
changeset
|
1108 |
9 | 1109 /* |
1110 *---------------------------------------------------------------------------- | |
1111 * list walkers | |
1112 *---------------------------------------------------------------------------- | |
1113 */ | |
1114 | |
1115 void layout_image_next(LayoutWindow *lw) | |
1116 { | |
1117 gint current; | |
1118 CollectionData *cd; | |
1119 CollectInfo *info; | |
1120 | |
1121 if (!layout_valid(&lw)) return; | |
1122 | |
1123 if (layout_image_slideshow_active(lw)) | |
1124 { | |
1125 layout_image_slideshow_next(lw); | |
1126 return; | |
1127 } | |
1128 | |
220 | 1129 if (layout_selection_count(lw, 0) > 1) |
1130 { | |
1131 GList *x = layout_selection_list_by_index(lw); | |
783 | 1132 gint old = layout_list_get_index(lw, layout_image_get_fd(lw)); |
220 | 1133 GList *y; |
1134 | |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
1135 for (y = x; y && (GPOINTER_TO_INT(y->data)) != old; y = y->next) |
220 | 1136 ; |
1137 if (y) | |
1138 { | |
442 | 1139 if (y->next) |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
1140 layout_image_set_index(lw, GPOINTER_TO_INT(y->next->data)); |
442 | 1141 else |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
1142 layout_image_set_index(lw, GPOINTER_TO_INT(x->data)); |
220 | 1143 } |
1144 while (x) | |
1145 x = g_list_remove(x, x->data); | |
1146 if (y) /* not dereferenced */ | |
1147 return; | |
1148 } | |
1149 | |
9 | 1150 cd = image_get_collection(lw->image, &info); |
1151 | |
1152 if (cd && info) | |
1153 { | |
1154 info = collection_next_by_info(cd, info); | |
122
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1155 if (info) |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1156 { |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1157 layout_image_set_collection_real(lw, cd, info, TRUE); |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1158 } |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1159 else |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1160 { |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1161 image_osd_icon(lw->image, IMAGE_OSD_LAST, -1); |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1162 } |
9 | 1163 return; |
1164 } | |
1165 | |
1166 current = layout_image_get_index(lw); | |
1167 | |
1168 if (current >= 0) | |
1169 { | |
736 | 1170 if ((guint) current < layout_list_count(lw, NULL) - 1) |
9 | 1171 { |
1172 layout_image_set_index(lw, current + 1); | |
1173 } | |
122
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1174 else |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1175 { |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1176 image_osd_icon(lw->image, IMAGE_OSD_LAST, -1); |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1177 } |
9 | 1178 } |
1179 else | |
1180 { | |
1181 layout_image_set_index(lw, 0); | |
1182 } | |
1183 } | |
1184 | |
1185 void layout_image_prev(LayoutWindow *lw) | |
1186 { | |
1187 gint current; | |
1188 CollectionData *cd; | |
1189 CollectInfo *info; | |
1190 | |
1191 if (!layout_valid(&lw)) return; | |
1192 | |
1193 if (layout_image_slideshow_active(lw)) | |
1194 { | |
1195 layout_image_slideshow_prev(lw); | |
1196 return; | |
1197 } | |
1198 | |
220 | 1199 if (layout_selection_count(lw, 0) > 1) |
1200 { | |
1201 GList *x = layout_selection_list_by_index(lw); | |
783 | 1202 gint old = layout_list_get_index(lw, layout_image_get_fd(lw)); |
220 | 1203 GList *y; |
1204 GList *last; | |
1205 | |
1206 for (last = y = x; y; y = y->next) | |
1207 last = y; | |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
1208 for (y = x; y && (GPOINTER_TO_INT(y->data)) != old; y = y->next) |
220 | 1209 ; |
1210 if (y) | |
1211 { | |
442 | 1212 if (y->prev) |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
1213 layout_image_set_index(lw, GPOINTER_TO_INT(y->prev->data)); |
220 | 1214 else |
529
8815fea478ee
fix warning cast from pointer to integer of different size (when an integer is
bruclik
parents:
520
diff
changeset
|
1215 layout_image_set_index(lw, GPOINTER_TO_INT(last->data)); |
220 | 1216 } |
1217 while (x) | |
1218 x = g_list_remove(x, x->data); | |
1219 if (y) /* not dereferenced */ | |
1220 return; | |
1221 } | |
1222 | |
9 | 1223 cd = image_get_collection(lw->image, &info); |
1224 | |
1225 if (cd && info) | |
1226 { | |
1227 info = collection_prev_by_info(cd, info); | |
122
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1228 if (info) |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1229 { |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1230 layout_image_set_collection_real(lw, cd, info, FALSE); |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1231 } |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1232 else |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1233 { |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1234 image_osd_icon(lw->image, IMAGE_OSD_FIRST, -1); |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1235 } |
9 | 1236 return; |
1237 } | |
1238 | |
1239 current = layout_image_get_index(lw); | |
1240 | |
1241 if (current >= 0) | |
1242 { | |
1243 if (current > 0) | |
1244 { | |
1245 layout_image_set_index(lw, current - 1); | |
1246 } | |
122
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1247 else |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1248 { |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1249 image_osd_icon(lw->image, IMAGE_OSD_FIRST, -1); |
e2a8b7f2165b
Sat Dec 2 16:44:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
117
diff
changeset
|
1250 } |
9 | 1251 } |
1252 else | |
1253 { | |
1254 layout_image_set_index(lw, layout_list_count(lw, NULL) - 1); | |
1255 } | |
1256 } | |
1257 | |
1258 void layout_image_first(LayoutWindow *lw) | |
1259 { | |
1260 gint current; | |
1261 CollectionData *cd; | |
1262 CollectInfo *info; | |
1263 | |
1264 if (!layout_valid(&lw)) return; | |
1265 | |
1266 cd = image_get_collection(lw->image, &info); | |
1267 | |
1268 if (cd && info) | |
1269 { | |
1270 CollectInfo *new; | |
1271 new = collection_get_first(cd); | |
1272 if (new != info) layout_image_set_collection_real(lw, cd, new, TRUE); | |
1273 return; | |
1274 } | |
1275 | |
1276 current = layout_image_get_index(lw); | |
1277 if (current != 0 && layout_list_count(lw, NULL) > 0) | |
1278 { | |
1279 layout_image_set_index(lw, 0); | |
1280 } | |
1281 } | |
1282 | |
1283 void layout_image_last(LayoutWindow *lw) | |
1284 { | |
1285 gint current; | |
1286 gint count; | |
1287 CollectionData *cd; | |
1288 CollectInfo *info; | |
1289 | |
1290 if (!layout_valid(&lw)) return; | |
1291 | |
1292 cd = image_get_collection(lw->image, &info); | |
1293 | |
1294 if (cd && info) | |
1295 { | |
1296 CollectInfo *new; | |
1297 new = collection_get_last(cd); | |
1298 if (new != info) layout_image_set_collection_real(lw, cd, new, FALSE); | |
1299 return; | |
1300 } | |
1301 | |
1302 current = layout_image_get_index(lw); | |
1303 count = layout_list_count(lw, NULL); | |
1304 if (current != count - 1 && count > 0) | |
1305 { | |
1306 layout_image_set_index(lw, count - 1); | |
1307 } | |
1308 } | |
1309 | |
1310 /* | |
1311 *---------------------------------------------------------------------------- | |
1312 * mouse callbacks | |
1313 *---------------------------------------------------------------------------- | |
1314 */ | |
1315 | |
127 | 1316 static gint image_idx(LayoutWindow *lw, ImageWindow *imd) |
1317 { | |
1318 gint i; | |
442 | 1319 |
520 | 1320 for (i = 0; i < MAX_SPLIT_IMAGES; i++) |
127 | 1321 { |
1322 if (lw->split_images[i] == imd) | |
1323 break; | |
1324 } | |
1325 if (i < MAX_SPLIT_IMAGES) | |
1326 { | |
1327 return i; | |
1328 } | |
1329 return -1; | |
1330 } | |
1331 | |
1481 | 1332 static void layout_image_focus_in_cb(ImageWindow *imd, gpointer data) |
1333 { | |
1334 LayoutWindow *lw = data; | |
1335 | |
1336 gint i = image_idx(lw, imd); | |
1337 | |
1338 if (i != -1) | |
1339 { | |
1340 DEBUG_1("image activate focus_in %d", i); | |
1653 | 1341 layout_image_activate(lw, i, FALSE); |
1481 | 1342 } |
1343 } | |
1344 | |
127 | 1345 |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1346 static void layout_image_button_cb(ImageWindow *imd, GdkEventButton *event, gpointer data) |
9 | 1347 { |
1348 LayoutWindow *lw = data; | |
1349 GtkWidget *menu; | |
1350 | |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1351 switch (event->button) |
9 | 1352 { |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
1353 case MOUSE_BUTTON_LEFT: |
1286
eba0b4ae413b
do not switch to the next image on mouse click in split mode
nadvornik
parents:
1284
diff
changeset
|
1354 if (lw->split_mode == SPLIT_NONE) |
eba0b4ae413b
do not switch to the next image on mouse click in split mode
nadvornik
parents:
1284
diff
changeset
|
1355 layout_image_next(lw); |
9 | 1356 break; |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
1357 case MOUSE_BUTTON_MIDDLE: |
1286
eba0b4ae413b
do not switch to the next image on mouse click in split mode
nadvornik
parents:
1284
diff
changeset
|
1358 if (lw->split_mode == SPLIT_NONE) |
eba0b4ae413b
do not switch to the next image on mouse click in split mode
nadvornik
parents:
1284
diff
changeset
|
1359 layout_image_prev(lw); |
9 | 1360 break; |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
1361 case MOUSE_BUTTON_RIGHT: |
9 | 1362 menu = layout_image_pop_menu(lw); |
1363 if (imd == lw->image) | |
1364 { | |
1365 g_object_set_data(G_OBJECT(menu), "click_parent", imd->widget); | |
1366 } | |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1367 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); |
9 | 1368 break; |
1369 default: | |
1370 break; | |
1371 } | |
1372 } | |
1373 | |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1374 static void layout_image_scroll_cb(ImageWindow *imd, GdkEventScroll *event, gpointer data) |
9 | 1375 { |
1376 LayoutWindow *lw = data; | |
1377 | |
127 | 1378 gint i = image_idx(lw, imd); |
442 | 1379 |
127 | 1380 if (i != -1) |
1381 { | |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
497
diff
changeset
|
1382 DEBUG_1("image activate scroll %d", i); |
1653 | 1383 layout_image_activate(lw, i, FALSE); |
127 | 1384 } |
1385 | |
1386 | |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1387 if (event->state & GDK_CONTROL_MASK) |
9 | 1388 { |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1389 switch (event->direction) |
9 | 1390 { |
1391 case GDK_SCROLL_UP: | |
1047 | 1392 layout_image_zoom_adjust_at_point(lw, get_zoom_increment(), event->x, event->y, event->state & GDK_SHIFT_MASK); |
9 | 1393 break; |
1394 case GDK_SCROLL_DOWN: | |
1047 | 1395 layout_image_zoom_adjust_at_point(lw, -get_zoom_increment(), event->x, event->y, event->state & GDK_SHIFT_MASK); |
9 | 1396 break; |
1397 default: | |
1398 break; | |
1399 } | |
1400 } | |
1047 | 1401 else if (options->mousewheel_scrolls) |
9 | 1402 { |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1403 switch (event->direction) |
9 | 1404 { |
1405 case GDK_SCROLL_UP: | |
1406 image_scroll(imd, 0, -MOUSEWHEEL_SCROLL_SIZE); | |
1407 break; | |
1408 case GDK_SCROLL_DOWN: | |
1409 image_scroll(imd, 0, MOUSEWHEEL_SCROLL_SIZE); | |
1410 break; | |
1411 case GDK_SCROLL_LEFT: | |
1412 image_scroll(imd, -MOUSEWHEEL_SCROLL_SIZE, 0); | |
1413 break; | |
1414 case GDK_SCROLL_RIGHT: | |
1415 image_scroll(imd, MOUSEWHEEL_SCROLL_SIZE, 0); | |
1416 break; | |
1417 default: | |
1418 break; | |
1419 } | |
1420 } | |
1421 else | |
1422 { | |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1423 switch (event->direction) |
9 | 1424 { |
1425 case GDK_SCROLL_UP: | |
1426 layout_image_prev(lw); | |
1427 break; | |
1428 case GDK_SCROLL_DOWN: | |
1429 layout_image_next(lw); | |
1430 break; | |
1431 default: | |
1432 break; | |
1433 } | |
1434 } | |
1435 } | |
1436 | |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1437 static void layout_image_drag_cb(ImageWindow *imd, GdkEventButton *event, gdouble dx, gdouble dy, gpointer data) |
127 | 1438 { |
1439 gint i; | |
1440 LayoutWindow *lw = data; | |
1441 | |
1047 | 1442 if (!(event->state & GDK_SHIFT_MASK)) return; |
869
371a1c3d4504
layout_image_drag_cb(): optimize when connected scrolling is unset.
zas_
parents:
868
diff
changeset
|
1443 |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1444 for (i = 0; i < MAX_SPLIT_IMAGES; i++) |
127 | 1445 { |
869
371a1c3d4504
layout_image_drag_cb(): optimize when connected scrolling is unset.
zas_
parents:
868
diff
changeset
|
1446 if (lw->split_images[i] && lw->split_images[i] != imd) |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1447 { |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1448 gdouble sx, sy; |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1449 |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1450 if (event->state & GDK_CONTROL_MASK) |
129 | 1451 { |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1452 image_get_scroll_center(imd, &sx, &sy); |
129 | 1453 } |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1454 else |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1455 { |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1456 image_get_scroll_center(lw->split_images[i], &sx, &sy); |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1457 sx += dx; |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1458 sy += dy; |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1459 } |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1460 image_set_scroll_center(lw->split_images[i], sx, sy); |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1461 } |
127 | 1462 } |
1463 } | |
1464 | |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1465 static void layout_image_button_inactive_cb(ImageWindow *imd, GdkEventButton *event, gpointer data) |
127 | 1466 { |
1467 LayoutWindow *lw = data; | |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1468 GtkWidget *menu; |
127 | 1469 gint i = image_idx(lw, imd); |
442 | 1470 |
127 | 1471 if (i != -1) |
1472 { | |
1653 | 1473 layout_image_activate(lw, i, FALSE); |
127 | 1474 } |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1475 |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1476 switch (event->button) |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1477 { |
448
a73cc0fa14d0
Use explicit names for mouse buttons instead of numbers.
zas_
parents:
446
diff
changeset
|
1478 case MOUSE_BUTTON_RIGHT: |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1479 menu = layout_image_pop_menu(lw); |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1480 if (imd == lw->image) |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1481 { |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1482 g_object_set_data(G_OBJECT(menu), "click_parent", imd->widget); |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1483 } |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1484 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1485 break; |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1486 default: |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1487 break; |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1488 } |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1489 |
127 | 1490 } |
1491 | |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1492 static void layout_image_drag_inactive_cb(ImageWindow *imd, GdkEventButton *event, gdouble dx, gdouble dy, gpointer data) |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1493 { |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1494 LayoutWindow *lw = data; |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1495 gint i = image_idx(lw, imd); |
442 | 1496 |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1497 if (i != -1) |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1498 { |
1653 | 1499 layout_image_activate(lw, i, FALSE); |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1500 } |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1501 |
129 | 1502 /* continue as with active image */ |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
837
diff
changeset
|
1503 layout_image_drag_cb(imd, event, dx, dy, data); |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1504 } |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1505 |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1506 |
9 | 1507 static void layout_image_set_buttons(LayoutWindow *lw) |
1508 { | |
1509 image_set_button_func(lw->image, layout_image_button_cb, lw); | |
1510 image_set_scroll_func(lw->image, layout_image_scroll_cb, lw); | |
1511 } | |
1512 | |
127 | 1513 static void layout_image_set_buttons_inactive(LayoutWindow *lw, gint i) |
1514 { | |
1515 image_set_button_func(lw->split_images[i], layout_image_button_inactive_cb, lw); | |
1516 image_set_scroll_func(lw->split_images[i], layout_image_scroll_cb, lw); | |
1517 } | |
1518 | |
1377
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1519 /* Returns the length of an integer */ |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1520 static gint num_length(gint num) |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1521 { |
1433
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
1522 gint len = 0; |
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
1523 if (num < 0) num = -num; |
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
1524 while (num) |
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
1525 { |
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
1526 num /= 10; |
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
1527 len++; |
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
1528 } |
b4ad1d201279
Use gboolean where applicable, minor cleanup and indentations fixes.
zas_
parents:
1432
diff
changeset
|
1529 return len; |
1377
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1530 } |
1375
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1531 |
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1532 void layout_status_update_pixel_cb(PixbufRenderer *pr, gpointer data) |
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1533 { |
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1534 LayoutWindow *lw = data; |
1377
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1535 gint x_pixel, y_pixel; |
1375
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1536 |
1377
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1537 if (!data || !layout_valid(&lw) || !lw->image |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1538 || lw->options.info_pixel_hidden || lw->image->unknown) return; |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1539 |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1540 pixbuf_renderer_get_mouse_position(pr, &x_pixel, &y_pixel); |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1541 |
1492
c350242b1a5d
Fixed bug where pixel/color information at x=0 coordinates werent shown:
zas_
parents:
1481
diff
changeset
|
1542 if(x_pixel >= 0 && y_pixel >= 0) |
1377
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1543 { |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1544 gint r_mouse, g_mouse, b_mouse; |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1545 gint width, height; |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1546 gchar *text; |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1547 PangoAttrList *attrs; |
1375
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1548 |
1377
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1549 pixbuf_renderer_get_image_size(pr, &width, &height); |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1550 if (width < 1 || height < 1) return; |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1551 |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1552 pixbuf_renderer_get_pixel_colors(pr, x_pixel, y_pixel, |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1553 &r_mouse, &g_mouse, &b_mouse); |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1554 |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1555 attrs = pango_attr_list_new(); |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1556 pango_attr_list_insert(attrs, pango_attr_family_new("Monospace")); |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1557 |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1558 text = g_strdup_printf(_("pos(%*d,%*d) rgb(%3d,%3d,%3d)"), |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1559 num_length(width - 1), x_pixel, |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1560 num_length(height - 1), y_pixel, |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1561 r_mouse, g_mouse, b_mouse); |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1562 |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1563 gtk_label_set_text(GTK_LABEL(lw->info_pixel), text); |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1564 gtk_label_set_attributes(GTK_LABEL(lw->info_pixel), attrs); |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1565 pango_attr_list_unref(attrs); |
1375
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1566 g_free(text); |
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1567 } |
1377
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1568 else |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1569 { |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1570 gtk_label_set_text(GTK_LABEL(lw->info_pixel), ""); |
dab37628f5d8
layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
zas_
parents:
1375
diff
changeset
|
1571 } |
1375
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1572 } |
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1573 |
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1574 |
9 | 1575 /* |
1576 *---------------------------------------------------------------------------- | |
1577 * setup | |
1578 *---------------------------------------------------------------------------- | |
1579 */ | |
1580 | |
1581 static void layout_image_update_cb(ImageWindow *imd, gpointer data) | |
1582 { | |
1583 LayoutWindow *lw = data; | |
1584 layout_status_update_image(lw); | |
1585 } | |
1586 | |
127 | 1587 GtkWidget *layout_image_new(LayoutWindow *lw, gint i) |
9 | 1588 { |
837
f8c22438376c
use GtkSizeGroup to control initial size of split images
nadvornik
parents:
836
diff
changeset
|
1589 if (!lw->split_image_sizegroup) lw->split_image_sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); |
f8c22438376c
use GtkSizeGroup to control initial size of split images
nadvornik
parents:
836
diff
changeset
|
1590 |
442 | 1591 if (!lw->split_images[i]) |
9 | 1592 { |
127 | 1593 lw->split_images[i] = image_new(TRUE); |
1594 | |
1043 | 1595 #if GTK_CHECK_VERSION(2,12,0) |
1596 g_object_ref(lw->split_images[i]->widget); | |
1597 #else | |
127 | 1598 gtk_widget_ref(lw->split_images[i]->widget); |
1043 | 1599 #endif |
1375
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1600 |
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1601 g_signal_connect(G_OBJECT(lw->split_images[i]->pr), "update-pixel", |
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1602 G_CALLBACK(layout_status_update_pixel_cb), lw); |
df58e511d90e
Display pixel coordinates and rgb - patch by Ruben Stein
nadvornik
parents:
1373
diff
changeset
|
1603 |
1622
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1591
diff
changeset
|
1604 image_background_set_color_from_options(lw->split_images[i], FALSE); |
9 | 1605 |
888 | 1606 image_auto_refresh_enable(lw->split_images[i], TRUE); |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
86
diff
changeset
|
1607 |
127 | 1608 layout_image_dnd_init(lw, i); |
207 | 1609 image_color_profile_set(lw->split_images[i], |
327 | 1610 options->color_profile.input_type, |
1611 options->color_profile.screen_type, | |
1612 options->color_profile.use_image); | |
1613 image_color_profile_set_use(lw->split_images[i], options->color_profile.enabled); | |
837
f8c22438376c
use GtkSizeGroup to control initial size of split images
nadvornik
parents:
836
diff
changeset
|
1614 |
f8c22438376c
use GtkSizeGroup to control initial size of split images
nadvornik
parents:
836
diff
changeset
|
1615 gtk_size_group_add_widget(lw->split_image_sizegroup, lw->split_images[i]->widget); |
1383 | 1616 gtk_widget_set_size_request(lw->split_images[i]->widget, IMAGE_MIN_WIDTH, -1); |
1617 | |
1481 | 1618 image_set_focus_in_func(lw->split_images[i], layout_image_focus_in_cb, lw); |
1619 | |
9 | 1620 } |
1621 | |
127 | 1622 return lw->split_images[i]->widget; |
1623 } | |
1624 | |
1625 void layout_image_deactivate(LayoutWindow *lw, gint i) | |
1626 { | |
1627 if (!lw->split_images[i]) return; | |
1628 image_set_update_func(lw->split_images[i], NULL, NULL); | |
1629 layout_image_set_buttons_inactive(lw, i); | |
129 | 1630 image_set_drag_func(lw->split_images[i], layout_image_drag_inactive_cb, lw); |
127 | 1631 |
1632 image_attach_window(lw->split_images[i], NULL, NULL, NULL, FALSE); | |
1633 image_select(lw->split_images[i], FALSE); | |
1634 } | |
1635 | |
1653 | 1636 /* force should be set after change of lw->split_mode */ |
1637 void layout_image_activate(LayoutWindow *lw, gint i, gboolean force) | |
127 | 1638 { |
138 | 1639 FileData *fd; |
442 | 1640 |
127 | 1641 if (!lw->split_images[i]) return; |
1653 | 1642 if (!force && lw->active_split_image == i) return; |
127 | 1643 |
1644 /* deactivate currently active */ | |
1645 if (lw->active_split_image != i) | |
1646 layout_image_deactivate(lw, lw->active_split_image); | |
1647 | |
1648 lw->image = lw->split_images[i]; | |
1649 lw->active_split_image = i; | |
442 | 1650 |
127 | 1651 image_set_update_func(lw->image, layout_image_update_cb, lw); |
1652 layout_image_set_buttons(lw); | |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1653 image_set_drag_func(lw->image, layout_image_drag_cb, lw); |
127 | 1654 |
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
281
diff
changeset
|
1655 image_attach_window(lw->image, lw->window, NULL, GQ_APPNAME, FALSE); |
127 | 1656 |
152 | 1657 /* do not hilight selected image in SPLIT_NONE */ |
1658 /* maybe the image should be selected always and hilight should be controled by | |
1659 another image option */ | |
1660 if (lw->split_mode != SPLIT_NONE) | |
1661 image_select(lw->split_images[i], TRUE); | |
1662 else | |
1663 image_select(lw->split_images[i], FALSE); | |
127 | 1664 |
138 | 1665 fd = image_get_fd(lw->image); |
127 | 1666 |
442 | 1667 if (fd) |
127 | 1668 { |
1669 // layout_list_sync_path(lw, path); | |
783 | 1670 layout_set_fd(lw, fd); |
127 | 1671 } |
1672 } | |
1673 | |
1674 | |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1675 static void layout_image_setup_split_common(LayoutWindow *lw, gint n) |
127 | 1676 { |
1633 | 1677 gboolean frame = (n > 1) || (!lw->options.tools_float && !lw->options.tools_hidden); |
127 | 1678 gint i; |
1679 | |
1169 | 1680 for (i = 0; i < n; i++) |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1681 if (!lw->split_images[i]) |
153
0e54267762f6
fixed copying zoom an scroll values from the original image on splitting
nadvornik
parents:
152
diff
changeset
|
1682 { |
1172
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1683 FileData *img_fd = NULL; |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1684 double zoom = 0.0; |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1685 |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1686 layout_image_new(lw, i); |
1170
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1687 image_set_frame(lw->split_images[i], frame); |
1633 | 1688 image_set_selectable(lw->split_images[i], (n > 1)); |
1173
52ce0263cb7c
Use the last selected images for the splitted views. Ie. when 5 images are selected, the last one is displayed, split quad while open images 5,4,3,2. It seems better to me.
zas_
parents:
1172
diff
changeset
|
1689 |
1373 | 1690 if (lw->image) |
1691 { | |
1692 image_osd_copy_status(lw->image, lw->split_images[i]); | |
1693 } | |
1694 | |
1172
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1695 if (layout_selection_count(lw, 0) > 1) |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1696 { |
1173
52ce0263cb7c
Use the last selected images for the splitted views. Ie. when 5 images are selected, the last one is displayed, split quad while open images 5,4,3,2. It seems better to me.
zas_
parents:
1172
diff
changeset
|
1697 GList *work = g_list_last(layout_selection_list(lw)); |
1172
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1698 gint j = 0; |
1173
52ce0263cb7c
Use the last selected images for the splitted views. Ie. when 5 images are selected, the last one is displayed, split quad while open images 5,4,3,2. It seems better to me.
zas_
parents:
1172
diff
changeset
|
1699 |
52ce0263cb7c
Use the last selected images for the splitted views. Ie. when 5 images are selected, the last one is displayed, split quad while open images 5,4,3,2. It seems better to me.
zas_
parents:
1172
diff
changeset
|
1700 if (work) work = work->prev; |
1172
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1701 |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1702 while (work && j < i) |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1703 { |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1704 FileData *fd = work->data; |
1173
52ce0263cb7c
Use the last selected images for the splitted views. Ie. when 5 images are selected, the last one is displayed, split quad while open images 5,4,3,2. It seems better to me.
zas_
parents:
1172
diff
changeset
|
1705 work = work->prev; |
1172
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1706 |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1707 j++; |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1708 if (!fd || !*fd->path) continue; |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1709 img_fd = fd; |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1710 } |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1711 } |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1712 |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1713 if (!img_fd && lw->image) |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1714 { |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1715 img_fd = image_get_fd(lw->image); |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1716 zoom = image_zoom_get(lw->image); |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1717 } |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1718 |
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1719 if (img_fd) |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1720 { |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1721 gdouble sx, sy; |
1172
08ef8c605723
When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
zas_
parents:
1171
diff
changeset
|
1722 image_change_fd(lw->split_images[i], img_fd, zoom); |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1723 image_get_scroll_center(lw->image, &sx, &sy); |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1724 image_set_scroll_center(lw->split_images[i], sx, sy); |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1725 } |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1726 layout_image_deactivate(lw, i); |
153
0e54267762f6
fixed copying zoom an scroll values from the original image on splitting
nadvornik
parents:
152
diff
changeset
|
1727 } |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1728 else |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1729 { |
1170
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1730 image_set_frame(lw->split_images[i], frame); |
1633 | 1731 image_set_selectable(lw->split_images[i], (n > 1)); |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1732 } |
127 | 1733 |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1734 for (i = n; i < MAX_SPLIT_IMAGES; i++) |
127 | 1735 { |
1736 if (lw->split_images[i]) | |
1737 { | |
1043 | 1738 #if GTK_CHECK_VERSION(2,12,0) |
1739 g_object_unref(lw->split_images[i]->widget); | |
1740 #else | |
127 | 1741 gtk_widget_unref(lw->split_images[i]->widget); |
1043 | 1742 #endif |
127 | 1743 lw->split_images[i] = NULL; |
1744 } | |
1745 } | |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1746 |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1747 if (!lw->image || lw->active_split_image < 0 || lw->active_split_image >= n) |
127 | 1748 { |
1653 | 1749 layout_image_activate(lw, 0, TRUE); |
127 | 1750 } |
1273 | 1751 else |
1752 { | |
1753 /* this will draw the frame around selected image (image_select) | |
1754 on switch from single to split images */ | |
1653 | 1755 layout_image_activate(lw, lw->active_split_image, TRUE); |
1273 | 1756 } |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1757 } |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1758 |
1170
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1759 GtkWidget *layout_image_setup_split_none(LayoutWindow *lw) |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1760 { |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1761 lw->split_mode = SPLIT_NONE; |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1762 |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1763 layout_image_setup_split_common(lw, 1); |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1764 |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1765 lw->split_image_widget = lw->split_images[0]->widget; |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1766 |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1767 return lw->split_image_widget; |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1768 } |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1769 |
159f225985c5
Use common code for layout_image_setup_split_none() too.
zas_
parents:
1169
diff
changeset
|
1770 |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1771 GtkWidget *layout_image_setup_split_hv(LayoutWindow *lw, gboolean horizontal) |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1772 { |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1773 GtkWidget *paned; |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1774 |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1775 lw->split_mode = horizontal ? SPLIT_HOR : SPLIT_VERT; |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1776 |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1777 layout_image_setup_split_common(lw, 2); |
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1778 |
156
dd6dc0a55d3d
better integration of split image functions into menu
nadvornik
parents:
153
diff
changeset
|
1779 /* horizontal split means vpaned and vice versa */ |
127 | 1780 if (horizontal) |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1781 paned = gtk_vpaned_new(); |
156
dd6dc0a55d3d
better integration of split image functions into menu
nadvornik
parents:
153
diff
changeset
|
1782 else |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1783 paned = gtk_hpaned_new(); |
127 | 1784 |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1785 gtk_paned_pack1(GTK_PANED(paned), lw->split_images[0]->widget, TRUE, TRUE); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1786 gtk_paned_pack2(GTK_PANED(paned), lw->split_images[1]->widget, TRUE, TRUE); |
442 | 1787 |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1788 gtk_widget_show(lw->split_images[0]->widget); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1789 gtk_widget_show(lw->split_images[1]->widget); |
442 | 1790 |
127 | 1791 lw->split_image_widget = paned; |
442 | 1792 |
127 | 1793 return lw->split_image_widget; |
1794 | |
1795 } | |
1796 | |
1797 GtkWidget *layout_image_setup_split_quad(LayoutWindow *lw) | |
1798 { | |
1799 GtkWidget *hpaned; | |
1800 GtkWidget *vpaned1; | |
1801 GtkWidget *vpaned2; | |
1802 gint i; | |
442 | 1803 |
152 | 1804 lw->split_mode = SPLIT_QUAD; |
1805 | |
1168
0c7534002b0a
layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
zas_
parents:
1055
diff
changeset
|
1806 layout_image_setup_split_common(lw, 4); |
127 | 1807 |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1808 hpaned = gtk_hpaned_new(); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1809 vpaned1 = gtk_vpaned_new(); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1810 vpaned2 = gtk_vpaned_new(); |
127 | 1811 |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1812 gtk_paned_pack1(GTK_PANED(vpaned1), lw->split_images[0]->widget, TRUE, TRUE); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1813 gtk_paned_pack2(GTK_PANED(vpaned1), lw->split_images[2]->widget, TRUE, TRUE); |
127 | 1814 |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1815 gtk_paned_pack1(GTK_PANED(vpaned2), lw->split_images[1]->widget, TRUE, TRUE); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1816 gtk_paned_pack2(GTK_PANED(vpaned2), lw->split_images[3]->widget, TRUE, TRUE); |
127 | 1817 |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1818 gtk_paned_pack1(GTK_PANED(hpaned), vpaned1, TRUE, TRUE); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1819 gtk_paned_pack2(GTK_PANED(hpaned), vpaned2, TRUE, TRUE); |
127 | 1820 |
520 | 1821 for (i = 0; i < 4; i++) |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1822 gtk_widget_show(lw->split_images[i]->widget); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1823 |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1824 gtk_widget_show(vpaned1); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1825 gtk_widget_show(vpaned2); |
442 | 1826 |
127 | 1827 lw->split_image_widget = hpaned; |
442 | 1828 |
127 | 1829 return lw->split_image_widget; |
1830 | |
1831 } | |
1832 | |
1833 GtkWidget *layout_image_setup_split(LayoutWindow *lw, ImageSplitMode mode) | |
1834 { | |
1835 switch (mode) | |
1836 { | |
442 | 1837 case SPLIT_HOR: |
127 | 1838 return layout_image_setup_split_hv(lw, TRUE); |
1839 case SPLIT_VERT: | |
1840 return layout_image_setup_split_hv(lw, FALSE); | |
1841 case SPLIT_QUAD: | |
1842 return layout_image_setup_split_quad(lw); | |
1843 case SPLIT_NONE: | |
1844 default: | |
1845 return layout_image_setup_split_none(lw); | |
1846 } | |
1847 } | |
1848 | |
1849 | |
9 | 1850 /* |
1851 *----------------------------------------------------------------------------- | |
1852 * maintenance (for rename, move, remove) | |
1853 *----------------------------------------------------------------------------- | |
1854 */ | |
1855 | |
796 | 1856 static void layout_image_maint_renamed(LayoutWindow *lw, FileData *fd) |
9 | 1857 { |
1171 | 1858 if (fd == layout_image_get_fd(lw)) |
9 | 1859 { |
138 | 1860 image_set_fd(lw->image, fd); |
9 | 1861 } |
1862 } | |
1863 | |
796 | 1864 static void layout_image_maint_removed(LayoutWindow *lw, FileData *fd) |
9 | 1865 { |
1171 | 1866 if (fd == layout_image_get_fd(lw)) |
9 | 1867 { |
1868 CollectionData *cd; | |
1869 CollectInfo *info; | |
1870 | |
1871 cd = image_get_collection(lw->image, &info); | |
1872 if (cd && info) | |
1873 { | |
1874 CollectInfo *new; | |
1875 | |
1876 new = collection_next_by_info(cd, info); | |
1877 if (!new) new = collection_prev_by_info(cd, info); | |
1878 | |
1879 if (new) | |
1880 { | |
1881 layout_image_set_collection(lw, cd, new); | |
1882 return; | |
1883 } | |
1678 | 1884 layout_image_set_fd(lw, NULL); |
9 | 1885 } |
1678 | 1886 |
1887 /* the image will be set to the next image from the list soon, | |
1888 setting it to NULL here is not necessary*/ | |
9 | 1889 } |
1890 } | |
1891 | |
796 | 1892 |
1893 void layout_image_notify_cb(FileData *fd, NotifyType type, gpointer data) | |
9 | 1894 { |
796 | 1895 LayoutWindow *lw = data; |
1896 | |
1432 | 1897 if (!(type & NOTIFY_CHANGE) || !fd->change) return; |
1498 | 1898 |
1899 DEBUG_1("Notify layout_image: %s %04x", fd->path, type); | |
796 | 1900 |
1347
79937bc55f3a
Add missing space between switch and first parenthesis.
zas_
parents:
1336
diff
changeset
|
1901 switch (fd->change->type) |
796 | 1902 { |
1903 case FILEDATA_CHANGE_MOVE: | |
1904 case FILEDATA_CHANGE_RENAME: | |
1905 layout_image_maint_renamed(lw, fd); | |
1906 break; | |
1907 case FILEDATA_CHANGE_DELETE: | |
1908 layout_image_maint_removed(lw, fd); | |
1909 break; | |
1910 case FILEDATA_CHANGE_COPY: | |
1911 case FILEDATA_CHANGE_UNSPECIFIED: | |
1211 | 1912 case FILEDATA_CHANGE_WRITE_METADATA: |
796 | 1913 break; |
1914 } | |
1915 | |
9 | 1916 } |
1055
1646720364cf
Adding a vim modeline to all files - patch by Klaus Ethgen
nadvornik
parents:
1047
diff
changeset
|
1917 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ |