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