Mercurial > geeqie.yaz
comparison src/view_file_icon.c @ 574:3da75054d4e1
Drop ViewFileIcon, use ViewFile and ViewFileInfoIcon instead.
author | zas_ |
---|---|
date | Sun, 04 May 2008 18:45:06 +0000 |
parents | 2996f1bbc305 |
children | b941403a4cd9 |
comparison
equal
deleted
inserted
replaced
573:2996f1bbc305 | 574:3da75054d4e1 |
---|---|
66 SelectionType selected; | 66 SelectionType selected; |
67 gint row; | 67 gint row; |
68 FileData *fd; | 68 FileData *fd; |
69 }; | 69 }; |
70 | 70 |
71 static gint vficon_index_by_id(ViewFileIcon *vfi, IconData *in_id); | 71 static gint vficon_index_by_id(ViewFile *vf, IconData *in_id); |
72 | 72 |
73 static IconData *vficon_icon_data(ViewFileIcon *vfi, FileData *fd) | 73 static IconData *vficon_icon_data(ViewFile *vf, FileData *fd) |
74 { | 74 { |
75 IconData *id = NULL; | 75 IconData *id = NULL; |
76 GList *work; | 76 GList *work; |
77 | 77 |
78 if (!fd) return NULL; | 78 if (!fd) return NULL; |
79 work = vfi->list; | 79 work = vf->list; |
80 while (work && !id) | 80 while (work && !id) |
81 { | 81 { |
82 IconData *chk = work->data; | 82 IconData *chk = work->data; |
83 work = work->next; | 83 work = work->next; |
84 if (chk->fd == fd) id = chk; | 84 if (chk->fd == fd) id = chk; |
147 { | 147 { |
148 return filelist_insert_sort_full(list, id, method, ascend, (GCompareFunc) iconlist_sort_file_cb); | 148 return filelist_insert_sort_full(list, id, method, ascend, (GCompareFunc) iconlist_sort_file_cb); |
149 } | 149 } |
150 | 150 |
151 | 151 |
152 static void vficon_toggle_filenames(ViewFileIcon *vfi); | 152 static void vficon_toggle_filenames(ViewFile *vf); |
153 static void vficon_selection_remove(ViewFileIcon *vfi, IconData *id, SelectionType mask, GtkTreeIter *iter); | 153 static void vficon_selection_remove(ViewFile *vf, IconData *id, SelectionType mask, GtkTreeIter *iter); |
154 static void vficon_move_focus(ViewFileIcon *vfi, gint row, gint col, gint relative); | 154 static void vficon_move_focus(ViewFile *vf, gint row, gint col, gint relative); |
155 static void vficon_set_focus(ViewFileIcon *vfi, IconData *id); | 155 static void vficon_set_focus(ViewFile *vf, IconData *id); |
156 static void vficon_thumb_update(ViewFileIcon *vfi); | 156 static void vficon_thumb_update(ViewFile *vf); |
157 static void vficon_populate_at_new_size(ViewFileIcon *vfi, gint w, gint h, gint force); | 157 static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint h, gint force); |
158 | 158 |
159 | 159 |
160 /* | 160 /* |
161 *----------------------------------------------------------------------------- | 161 *----------------------------------------------------------------------------- |
162 * pop-up menu | 162 * pop-up menu |
163 *----------------------------------------------------------------------------- | 163 *----------------------------------------------------------------------------- |
164 */ | 164 */ |
165 | 165 |
166 static GList *vficon_pop_menu_file_list(ViewFileIcon *vfi) | 166 static GList *vficon_pop_menu_file_list(ViewFile *vf) |
167 { | 167 { |
168 if (!vfi->click_id) return NULL; | 168 if (!VFICON_INFO(vf, click_id)) return NULL; |
169 | 169 |
170 if (vfi->click_id->selected & SELECTION_SELECTED) | 170 if (VFICON_INFO(vf, click_id)->selected & SELECTION_SELECTED) |
171 { | 171 { |
172 return vficon_selection_get_list(vfi); | 172 return vficon_selection_get_list(vf); |
173 } | 173 } |
174 | 174 |
175 return g_list_append(NULL, file_data_ref(vfi->click_id->fd)); | 175 return g_list_append(NULL, file_data_ref(VFICON_INFO(vf, click_id)->fd)); |
176 } | 176 } |
177 | 177 |
178 static void vficon_pop_menu_edit_cb(GtkWidget *widget, gpointer data) | 178 static void vficon_pop_menu_edit_cb(GtkWidget *widget, gpointer data) |
179 { | 179 { |
180 ViewFileIcon *vfi; | 180 ViewFile *vf; |
181 gint n; | 181 gint n; |
182 GList *list; | 182 GList *list; |
183 | 183 |
184 vfi = submenu_item_get_data(widget); | 184 vf = submenu_item_get_data(widget); |
185 n = GPOINTER_TO_INT(data); | 185 n = GPOINTER_TO_INT(data); |
186 | 186 |
187 if (!vfi) return; | 187 if (!vf) return; |
188 | 188 |
189 list = vficon_pop_menu_file_list(vfi); | 189 list = vficon_pop_menu_file_list(vf); |
190 start_editor_from_filelist(n, list); | 190 start_editor_from_filelist(n, list); |
191 filelist_free(list); | 191 filelist_free(list); |
192 } | 192 } |
193 | 193 |
194 static void vficon_pop_menu_info_cb(GtkWidget *widget, gpointer data) | 194 static void vficon_pop_menu_info_cb(GtkWidget *widget, gpointer data) |
195 { | 195 { |
196 ViewFileIcon *vfi = data; | 196 ViewFile *vf = data; |
197 | 197 |
198 info_window_new(NULL, vficon_pop_menu_file_list(vfi), NULL); | 198 info_window_new(NULL, vficon_pop_menu_file_list(vf), NULL); |
199 } | 199 } |
200 | 200 |
201 static void vficon_pop_menu_view_cb(GtkWidget *widget, gpointer data) | 201 static void vficon_pop_menu_view_cb(GtkWidget *widget, gpointer data) |
202 { | 202 { |
203 ViewFileIcon *vfi = data; | 203 ViewFile *vf = data; |
204 | 204 |
205 if (!vfi->click_id) return; | 205 if (!VFICON_INFO(vf, click_id)) return; |
206 | 206 |
207 if (vfi->click_id->selected & SELECTION_SELECTED) | 207 if (VFICON_INFO(vf, click_id)->selected & SELECTION_SELECTED) |
208 { | 208 { |
209 GList *list; | 209 GList *list; |
210 | 210 |
211 list = vficon_selection_get_list(vfi); | 211 list = vficon_selection_get_list(vf); |
212 view_window_new_from_list(list); | 212 view_window_new_from_list(list); |
213 filelist_free(list); | 213 filelist_free(list); |
214 } | 214 } |
215 else | 215 else |
216 { | 216 { |
217 view_window_new(vfi->click_id->fd); | 217 view_window_new(VFICON_INFO(vf, click_id)->fd); |
218 } | 218 } |
219 } | 219 } |
220 | 220 |
221 static void vficon_pop_menu_copy_cb(GtkWidget *widget, gpointer data) | 221 static void vficon_pop_menu_copy_cb(GtkWidget *widget, gpointer data) |
222 { | 222 { |
223 ViewFileIcon *vfi = data; | 223 ViewFile *vf = data; |
224 | 224 |
225 file_util_copy(NULL, vficon_pop_menu_file_list(vfi), NULL, vfi->listview); | 225 file_util_copy(NULL, vficon_pop_menu_file_list(vf), NULL, vf->listview); |
226 } | 226 } |
227 | 227 |
228 static void vficon_pop_menu_move_cb(GtkWidget *widget, gpointer data) | 228 static void vficon_pop_menu_move_cb(GtkWidget *widget, gpointer data) |
229 { | 229 { |
230 ViewFileIcon *vfi = data; | 230 ViewFile *vf = data; |
231 | 231 |
232 file_util_move(NULL, vficon_pop_menu_file_list(vfi), NULL, vfi->listview); | 232 file_util_move(NULL, vficon_pop_menu_file_list(vf), NULL, vf->listview); |
233 } | 233 } |
234 | 234 |
235 static void vficon_pop_menu_rename_cb(GtkWidget *widget, gpointer data) | 235 static void vficon_pop_menu_rename_cb(GtkWidget *widget, gpointer data) |
236 { | 236 { |
237 ViewFileIcon *vfi = data; | 237 ViewFile *vf = data; |
238 | 238 |
239 file_util_rename(NULL, vficon_pop_menu_file_list(vfi), vfi->listview); | 239 file_util_rename(NULL, vficon_pop_menu_file_list(vf), vf->listview); |
240 } | 240 } |
241 | 241 |
242 static void vficon_pop_menu_delete_cb(GtkWidget *widget, gpointer data) | 242 static void vficon_pop_menu_delete_cb(GtkWidget *widget, gpointer data) |
243 { | 243 { |
244 ViewFileIcon *vfi = data; | 244 ViewFile *vf = data; |
245 | 245 |
246 file_util_delete(NULL, vficon_pop_menu_file_list(vfi), vfi->listview); | 246 file_util_delete(NULL, vficon_pop_menu_file_list(vf), vf->listview); |
247 } | 247 } |
248 | 248 |
249 static void vficon_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data) | 249 static void vficon_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data) |
250 { | 250 { |
251 ViewFileIcon *vfi = data; | 251 ViewFile *vf = data; |
252 | 252 |
253 file_util_copy_path_list_to_clipboard(vficon_pop_menu_file_list(vfi)); | 253 file_util_copy_path_list_to_clipboard(vficon_pop_menu_file_list(vf)); |
254 } | 254 } |
255 | 255 |
256 static void vficon_pop_menu_sort_cb(GtkWidget *widget, gpointer data) | 256 static void vficon_pop_menu_sort_cb(GtkWidget *widget, gpointer data) |
257 { | 257 { |
258 ViewFileIcon *vfi; | 258 ViewFile *vf; |
259 SortType type; | 259 SortType type; |
260 | 260 |
261 if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return; | 261 if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return; |
262 | 262 |
263 vfi = submenu_item_get_data(widget); | 263 vf = submenu_item_get_data(widget); |
264 if (!vfi) return; | 264 if (!vf) return; |
265 | 265 |
266 type = (SortType)GPOINTER_TO_INT(data); | 266 type = (SortType)GPOINTER_TO_INT(data); |
267 | 267 |
268 if (vfi->layout) | 268 if (vf->layout) |
269 { | 269 { |
270 layout_sort_set(vfi->layout, type, vfi->sort_ascend); | 270 layout_sort_set(vf->layout, type, vf->sort_ascend); |
271 } | 271 } |
272 else | 272 else |
273 { | 273 { |
274 vficon_sort_set(vfi, type, vfi->sort_ascend); | 274 vficon_sort_set(vf, type, vf->sort_ascend); |
275 } | 275 } |
276 } | 276 } |
277 | 277 |
278 static void vficon_pop_menu_sort_ascend_cb(GtkWidget *widget, gpointer data) | 278 static void vficon_pop_menu_sort_ascend_cb(GtkWidget *widget, gpointer data) |
279 { | 279 { |
280 ViewFileIcon *vfi = data; | 280 ViewFile *vf = data; |
281 | 281 |
282 if (vfi->layout) | 282 if (vf->layout) |
283 { | 283 { |
284 layout_sort_set(vfi->layout, vfi->sort_method, !vfi->sort_ascend); | 284 layout_sort_set(vf->layout, vf->sort_method, !vf->sort_ascend); |
285 } | 285 } |
286 else | 286 else |
287 { | 287 { |
288 vficon_sort_set(vfi, vfi->sort_method, !vfi->sort_ascend); | 288 vficon_sort_set(vf, vf->sort_method, !vf->sort_ascend); |
289 } | 289 } |
290 } | 290 } |
291 | 291 |
292 static void vficon_pop_menu_list_cb(GtkWidget *widget, gpointer data) | 292 static void vficon_pop_menu_list_cb(GtkWidget *widget, gpointer data) |
293 { | 293 { |
294 ViewFileIcon *vfi = data; | 294 ViewFile *vf = data; |
295 | 295 |
296 if (vfi->layout) layout_views_set(vfi->layout, vfi->layout->dir_view_type, FALSE); | 296 if (vf->layout) layout_views_set(vf->layout, vf->layout->dir_view_type, FALSE); |
297 } | 297 } |
298 | 298 |
299 static void vficon_pop_menu_show_names_cb(GtkWidget *widget, gpointer data) | 299 static void vficon_pop_menu_show_names_cb(GtkWidget *widget, gpointer data) |
300 { | 300 { |
301 ViewFileIcon *vfi = data; | 301 ViewFile *vf = data; |
302 | 302 |
303 vficon_toggle_filenames(vfi); | 303 vficon_toggle_filenames(vf); |
304 } | 304 } |
305 | 305 |
306 static void vficon_pop_menu_refresh_cb(GtkWidget *widget, gpointer data) | 306 static void vficon_pop_menu_refresh_cb(GtkWidget *widget, gpointer data) |
307 { | 307 { |
308 ViewFileIcon *vfi = data; | 308 ViewFile *vf = data; |
309 | 309 |
310 vficon_refresh(vfi); | 310 vficon_refresh(vf); |
311 } | 311 } |
312 | 312 |
313 static void vficon_popup_destroy_cb(GtkWidget *widget, gpointer data) | 313 static void vficon_popup_destroy_cb(GtkWidget *widget, gpointer data) |
314 { | 314 { |
315 ViewFileIcon *vfi = data; | 315 ViewFile *vf = data; |
316 vficon_selection_remove(vfi, vfi->click_id, SELECTION_PRELIGHT, NULL); | 316 vficon_selection_remove(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, NULL); |
317 vfi->click_id = NULL; | 317 VFICON_INFO(vf, click_id) = NULL; |
318 vfi->popup = NULL; | 318 vf->popup = NULL; |
319 } | 319 } |
320 | 320 |
321 static GtkWidget *vficon_pop_menu(ViewFileIcon *vfi, gint active) | 321 static GtkWidget *vficon_pop_menu(ViewFile *vf, gint active) |
322 { | 322 { |
323 GtkWidget *menu; | 323 GtkWidget *menu; |
324 GtkWidget *item; | 324 GtkWidget *item; |
325 GtkWidget *submenu; | 325 GtkWidget *submenu; |
326 | 326 |
327 menu = popup_menu_short_lived(); | 327 menu = popup_menu_short_lived(); |
328 | 328 |
329 g_signal_connect(G_OBJECT(menu), "destroy", | 329 g_signal_connect(G_OBJECT(menu), "destroy", |
330 G_CALLBACK(vficon_popup_destroy_cb), vfi); | 330 G_CALLBACK(vficon_popup_destroy_cb), vf); |
331 | 331 |
332 submenu_add_edit(menu, &item, G_CALLBACK(vficon_pop_menu_edit_cb), vfi); | 332 submenu_add_edit(menu, &item, G_CALLBACK(vficon_pop_menu_edit_cb), vf); |
333 gtk_widget_set_sensitive(item, active); | 333 gtk_widget_set_sensitive(item, active); |
334 | 334 |
335 menu_item_add_stock_sensitive(menu, _("_Properties"), GTK_STOCK_PROPERTIES, active, | 335 menu_item_add_stock_sensitive(menu, _("_Properties"), GTK_STOCK_PROPERTIES, active, |
336 G_CALLBACK(vficon_pop_menu_info_cb), vfi); | 336 G_CALLBACK(vficon_pop_menu_info_cb), vf); |
337 | 337 |
338 menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, active, | 338 menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, active, |
339 G_CALLBACK(vficon_pop_menu_view_cb), vfi); | 339 G_CALLBACK(vficon_pop_menu_view_cb), vf); |
340 menu_item_add_divider(menu); | 340 menu_item_add_divider(menu); |
341 | 341 |
342 menu_item_add_stock_sensitive(menu, _("_Copy..."), GTK_STOCK_COPY, active, | 342 menu_item_add_stock_sensitive(menu, _("_Copy..."), GTK_STOCK_COPY, active, |
343 G_CALLBACK(vficon_pop_menu_copy_cb), vfi); | 343 G_CALLBACK(vficon_pop_menu_copy_cb), vf); |
344 menu_item_add_sensitive(menu, _("_Move..."), active, | 344 menu_item_add_sensitive(menu, _("_Move..."), active, |
345 G_CALLBACK(vficon_pop_menu_move_cb), vfi); | 345 G_CALLBACK(vficon_pop_menu_move_cb), vf); |
346 menu_item_add_sensitive(menu, _("_Rename..."), active, | 346 menu_item_add_sensitive(menu, _("_Rename..."), active, |
347 G_CALLBACK(vficon_pop_menu_rename_cb), vfi); | 347 G_CALLBACK(vficon_pop_menu_rename_cb), vf); |
348 menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active, | 348 menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active, |
349 G_CALLBACK(vficon_pop_menu_delete_cb), vfi); | 349 G_CALLBACK(vficon_pop_menu_delete_cb), vf); |
350 if (options->show_copy_path) | 350 if (options->show_copy_path) |
351 menu_item_add_sensitive(menu, _("_Copy path"), active, | 351 menu_item_add_sensitive(menu, _("_Copy path"), active, |
352 G_CALLBACK(vficon_pop_menu_copy_path_cb), vfi); | 352 G_CALLBACK(vficon_pop_menu_copy_path_cb), vf); |
353 menu_item_add_divider(menu); | 353 menu_item_add_divider(menu); |
354 | 354 |
355 submenu = submenu_add_sort(NULL, G_CALLBACK(vficon_pop_menu_sort_cb), vfi, | 355 submenu = submenu_add_sort(NULL, G_CALLBACK(vficon_pop_menu_sort_cb), vf, |
356 FALSE, FALSE, TRUE, vfi->sort_method); | 356 FALSE, FALSE, TRUE, vf->sort_method); |
357 menu_item_add_divider(submenu); | 357 menu_item_add_divider(submenu); |
358 menu_item_add_check(submenu, _("Ascending"), vfi->sort_ascend, | 358 menu_item_add_check(submenu, _("Ascending"), vf->sort_ascend, |
359 G_CALLBACK(vficon_pop_menu_sort_ascend_cb), vfi); | 359 G_CALLBACK(vficon_pop_menu_sort_ascend_cb), vf); |
360 | 360 |
361 item = menu_item_add(menu, _("_Sort"), NULL, NULL); | 361 item = menu_item_add(menu, _("_Sort"), NULL, NULL); |
362 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); | 362 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); |
363 | 363 |
364 menu_item_add_check(menu, _("View as _icons"), TRUE, | 364 menu_item_add_check(menu, _("View as _icons"), TRUE, |
365 G_CALLBACK(vficon_pop_menu_list_cb), vfi); | 365 G_CALLBACK(vficon_pop_menu_list_cb), vf); |
366 menu_item_add_check(menu, _("Show filename _text"), vfi->show_text, | 366 menu_item_add_check(menu, _("Show filename _text"), VFICON_INFO(vf, show_text), |
367 G_CALLBACK(vficon_pop_menu_show_names_cb), vfi); | 367 G_CALLBACK(vficon_pop_menu_show_names_cb), vf); |
368 menu_item_add_stock(menu, _("Re_fresh"), GTK_STOCK_REFRESH, G_CALLBACK(vficon_pop_menu_refresh_cb), vfi); | 368 menu_item_add_stock(menu, _("Re_fresh"), GTK_STOCK_REFRESH, G_CALLBACK(vficon_pop_menu_refresh_cb), vf); |
369 | 369 |
370 return menu; | 370 return menu; |
371 } | 371 } |
372 | 372 |
373 /* | 373 /* |
374 *------------------------------------------------------------------- | 374 *------------------------------------------------------------------- |
375 * signals | 375 * signals |
376 *------------------------------------------------------------------- | 376 *------------------------------------------------------------------- |
377 */ | 377 */ |
378 | 378 |
379 static void vficon_send_update(ViewFileIcon *vfi) | 379 static void vficon_send_update(ViewFile *vf) |
380 { | 380 { |
381 if (vfi->func_status) vfi->func_status(vfi, vfi->data_status); | 381 if (vf->func_status) vf->func_status(vf, vf->data_status); |
382 } | 382 } |
383 | 383 |
384 static void vficon_send_layout_select(ViewFileIcon *vfi, IconData *id) | 384 static void vficon_send_layout_select(ViewFile *vf, IconData *id) |
385 { | 385 { |
386 FileData *read_ahead_fd = NULL; | 386 FileData *read_ahead_fd = NULL; |
387 FileData *sel_fd; | 387 FileData *sel_fd; |
388 FileData *cur_fd; | 388 FileData *cur_fd; |
389 | 389 |
390 if (!vfi->layout || !id || !id->fd) return; | 390 if (!vf->layout || !id || !id->fd) return; |
391 | 391 |
392 sel_fd = id->fd; | 392 sel_fd = id->fd; |
393 | 393 |
394 cur_fd = layout_image_get_fd(vfi->layout); | 394 cur_fd = layout_image_get_fd(vf->layout); |
395 if (sel_fd == cur_fd) return; /* no change */ | 395 if (sel_fd == cur_fd) return; /* no change */ |
396 | 396 |
397 if (options->image.enable_read_ahead) | 397 if (options->image.enable_read_ahead) |
398 { | 398 { |
399 gint row; | 399 gint row; |
400 | 400 |
401 row = g_list_index(vfi->list, id); | 401 row = g_list_index(vf->list, id); |
402 if (row > vficon_index_by_fd(vfi, cur_fd) && | 402 if (row > vficon_index_by_fd(vf, cur_fd) && |
403 row + 1 < vficon_count(vfi, NULL)) | 403 row + 1 < vficon_count(vf, NULL)) |
404 { | 404 { |
405 read_ahead_fd = vficon_index_get_data(vfi, row + 1); | 405 read_ahead_fd = vficon_index_get_data(vf, row + 1); |
406 } | 406 } |
407 else if (row > 0) | 407 else if (row > 0) |
408 { | 408 { |
409 read_ahead_fd = vficon_index_get_data(vfi, row - 1); | 409 read_ahead_fd = vficon_index_get_data(vf, row - 1); |
410 } | 410 } |
411 } | 411 } |
412 | 412 |
413 layout_image_set_with_ahead(vfi->layout, sel_fd, read_ahead_fd); | 413 layout_image_set_with_ahead(vf->layout, sel_fd, read_ahead_fd); |
414 } | 414 } |
415 | 415 |
416 static void vficon_toggle_filenames(ViewFileIcon *vfi) | 416 static void vficon_toggle_filenames(ViewFile *vf) |
417 { | 417 { |
418 vfi->show_text = !vfi->show_text; | 418 VFICON_INFO(vf, show_text) = !VFICON_INFO(vf, show_text); |
419 options->show_icon_names = vfi->show_text; | 419 options->show_icon_names = VFICON_INFO(vf, show_text); |
420 | 420 |
421 vficon_populate_at_new_size(vfi, vfi->listview->allocation.width, vfi->listview->allocation.height, TRUE); | 421 vficon_populate_at_new_size(vf, vf->listview->allocation.width, vf->listview->allocation.height, TRUE); |
422 } | 422 } |
423 | 423 |
424 static gint vficon_get_icon_width(ViewFileIcon *vfi) | 424 static gint vficon_get_icon_width(ViewFile *vf) |
425 { | 425 { |
426 gint width; | 426 gint width; |
427 | 427 |
428 if (!vfi->show_text) return options->thumbnails.max_width; | 428 if (!VFICON_INFO(vf, show_text)) return options->thumbnails.max_width; |
429 | 429 |
430 width = options->thumbnails.max_width + options->thumbnails.max_width / 2; | 430 width = options->thumbnails.max_width + options->thumbnails.max_width / 2; |
431 if (width < THUMB_MIN_ICON_WIDTH) width = THUMB_MIN_ICON_WIDTH; | 431 if (width < THUMB_MIN_ICON_WIDTH) width = THUMB_MIN_ICON_WIDTH; |
432 if (width > THUMB_MAX_ICON_WIDTH) width = options->thumbnails.max_width; | 432 if (width > THUMB_MAX_ICON_WIDTH) width = options->thumbnails.max_width; |
433 | 433 |
438 *------------------------------------------------------------------- | 438 *------------------------------------------------------------------- |
439 * misc utils | 439 * misc utils |
440 *------------------------------------------------------------------- | 440 *------------------------------------------------------------------- |
441 */ | 441 */ |
442 | 442 |
443 static gint vficon_find_position(ViewFileIcon *vfi, IconData *id, gint *row, gint *col) | 443 static gint vficon_find_position(ViewFile *vf, IconData *id, gint *row, gint *col) |
444 { | 444 { |
445 gint n; | 445 gint n; |
446 | 446 |
447 n = g_list_index(vfi->list, id); | 447 n = g_list_index(vf->list, id); |
448 | 448 |
449 if (n < 0) return FALSE; | 449 if (n < 0) return FALSE; |
450 | 450 |
451 *row = n / vfi->columns; | 451 *row = n / VFICON_INFO(vf, columns); |
452 *col = n - (*row * vfi->columns); | 452 *col = n - (*row * VFICON_INFO(vf, columns)); |
453 | 453 |
454 return TRUE; | 454 return TRUE; |
455 } | 455 } |
456 | 456 |
457 static gint vficon_find_iter(ViewFileIcon *vfi, IconData *id, GtkTreeIter *iter, gint *column) | 457 static gint vficon_find_iter(ViewFile *vf, IconData *id, GtkTreeIter *iter, gint *column) |
458 { | 458 { |
459 GtkTreeModel *store; | 459 GtkTreeModel *store; |
460 gint row, col; | 460 gint row, col; |
461 | 461 |
462 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 462 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
463 if (!vficon_find_position(vfi, id, &row, &col)) return FALSE; | 463 if (!vficon_find_position(vf, id, &row, &col)) return FALSE; |
464 if (!gtk_tree_model_iter_nth_child(store, iter, NULL, row)) return FALSE; | 464 if (!gtk_tree_model_iter_nth_child(store, iter, NULL, row)) return FALSE; |
465 if (column) *column = col; | 465 if (column) *column = col; |
466 | 466 |
467 return TRUE; | 467 return TRUE; |
468 } | 468 } |
469 | 469 |
470 static IconData *vficon_find_data(ViewFileIcon *vfi, gint row, gint col, GtkTreeIter *iter) | 470 static IconData *vficon_find_data(ViewFile *vf, gint row, gint col, GtkTreeIter *iter) |
471 { | 471 { |
472 GtkTreeModel *store; | 472 GtkTreeModel *store; |
473 GtkTreeIter p; | 473 GtkTreeIter p; |
474 | 474 |
475 if (row < 0 || col < 0) return NULL; | 475 if (row < 0 || col < 0) return NULL; |
476 | 476 |
477 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 477 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
478 if (gtk_tree_model_iter_nth_child(store, &p, NULL, row)) | 478 if (gtk_tree_model_iter_nth_child(store, &p, NULL, row)) |
479 { | 479 { |
480 GList *list; | 480 GList *list; |
481 | 481 |
482 gtk_tree_model_get(store, &p, FILE_COLUMN_POINTER, &list, -1); | 482 gtk_tree_model_get(store, &p, FILE_COLUMN_POINTER, &list, -1); |
488 } | 488 } |
489 | 489 |
490 return NULL; | 490 return NULL; |
491 } | 491 } |
492 | 492 |
493 static IconData *vficon_find_data_by_coord(ViewFileIcon *vfi, gint x, gint y, GtkTreeIter *iter) | 493 static IconData *vficon_find_data_by_coord(ViewFile *vf, gint x, gint y, GtkTreeIter *iter) |
494 { | 494 { |
495 GtkTreePath *tpath; | 495 GtkTreePath *tpath; |
496 GtkTreeViewColumn *column; | 496 GtkTreeViewColumn *column; |
497 | 497 |
498 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vfi->listview), x, y, | 498 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), x, y, |
499 &tpath, &column, NULL, NULL)) | 499 &tpath, &column, NULL, NULL)) |
500 { | 500 { |
501 GtkTreeModel *store; | 501 GtkTreeModel *store; |
502 GtkTreeIter row; | 502 GtkTreeIter row; |
503 GList *list; | 503 GList *list; |
504 gint n; | 504 gint n; |
505 | 505 |
506 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 506 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
507 gtk_tree_model_get_iter(store, &row, tpath); | 507 gtk_tree_model_get_iter(store, &row, tpath); |
508 gtk_tree_path_free(tpath); | 508 gtk_tree_path_free(tpath); |
509 | 509 |
510 gtk_tree_model_get(store, &row, FILE_COLUMN_POINTER, &list, -1); | 510 gtk_tree_model_get(store, &row, FILE_COLUMN_POINTER, &list, -1); |
511 | 511 |
524 *------------------------------------------------------------------- | 524 *------------------------------------------------------------------- |
525 * tooltip type window | 525 * tooltip type window |
526 *------------------------------------------------------------------- | 526 *------------------------------------------------------------------- |
527 */ | 527 */ |
528 | 528 |
529 static void tip_show(ViewFileIcon *vfi) | 529 static void tip_show(ViewFile *vf) |
530 { | 530 { |
531 GtkWidget *label; | 531 GtkWidget *label; |
532 gint x, y; | 532 gint x, y; |
533 | 533 |
534 if (vfi->tip_window) return; | 534 if (VFICON_INFO(vf, tip_window)) return; |
535 | 535 |
536 gdk_window_get_pointer(gtk_tree_view_get_bin_window(GTK_TREE_VIEW(vfi->listview)), &x, &y, NULL); | 536 gdk_window_get_pointer(gtk_tree_view_get_bin_window(GTK_TREE_VIEW(vf->listview)), &x, &y, NULL); |
537 | 537 |
538 vfi->tip_id = vficon_find_data_by_coord(vfi, x, y, NULL); | 538 VFICON_INFO(vf, tip_id) = vficon_find_data_by_coord(vf, x, y, NULL); |
539 if (!vfi->tip_id) return; | 539 if (!VFICON_INFO(vf, tip_id)) return; |
540 | 540 |
541 vfi->tip_window = gtk_window_new(GTK_WINDOW_POPUP); | 541 VFICON_INFO(vf, tip_window) = gtk_window_new(GTK_WINDOW_POPUP); |
542 gtk_window_set_resizable(GTK_WINDOW(vfi->tip_window), FALSE); | 542 gtk_window_set_resizable(GTK_WINDOW(VFICON_INFO(vf, tip_window)), FALSE); |
543 gtk_container_set_border_width(GTK_CONTAINER(vfi->tip_window), 2); | 543 gtk_container_set_border_width(GTK_CONTAINER(VFICON_INFO(vf, tip_window)), 2); |
544 | 544 |
545 label = gtk_label_new(vfi->tip_id->fd->name); | 545 label = gtk_label_new(VFICON_INFO(vf, tip_id)->fd->name); |
546 | 546 |
547 g_object_set_data(G_OBJECT(vfi->tip_window), "tip_label", label); | 547 g_object_set_data(G_OBJECT(VFICON_INFO(vf, tip_window)), "tip_label", label); |
548 gtk_container_add(GTK_CONTAINER(vfi->tip_window), label); | 548 gtk_container_add(GTK_CONTAINER(VFICON_INFO(vf, tip_window)), label); |
549 gtk_widget_show(label); | 549 gtk_widget_show(label); |
550 | 550 |
551 gdk_window_get_pointer(NULL, &x, &y, NULL); | 551 gdk_window_get_pointer(NULL, &x, &y, NULL); |
552 | 552 |
553 if (!GTK_WIDGET_REALIZED(vfi->tip_window)) gtk_widget_realize(vfi->tip_window); | 553 if (!GTK_WIDGET_REALIZED(VFICON_INFO(vf, tip_window))) gtk_widget_realize(VFICON_INFO(vf, tip_window)); |
554 gtk_window_move(GTK_WINDOW(vfi->tip_window), x + 16, y + 16); | 554 gtk_window_move(GTK_WINDOW(VFICON_INFO(vf, tip_window)), x + 16, y + 16); |
555 gtk_widget_show(vfi->tip_window); | 555 gtk_widget_show(VFICON_INFO(vf, tip_window)); |
556 } | 556 } |
557 | 557 |
558 static void tip_hide(ViewFileIcon *vfi) | 558 static void tip_hide(ViewFile *vf) |
559 { | 559 { |
560 if (vfi->tip_window) gtk_widget_destroy(vfi->tip_window); | 560 if (VFICON_INFO(vf, tip_window)) gtk_widget_destroy(VFICON_INFO(vf, tip_window)); |
561 vfi->tip_window = NULL; | 561 VFICON_INFO(vf, tip_window) = NULL; |
562 } | 562 } |
563 | 563 |
564 static gint tip_schedule_cb(gpointer data) | 564 static gint tip_schedule_cb(gpointer data) |
565 { | 565 { |
566 ViewFileIcon *vfi = data; | 566 ViewFile *vf = data; |
567 GtkWidget *window; | 567 GtkWidget *window; |
568 | 568 |
569 if (vfi->tip_delay_id == -1) return FALSE; | 569 if (VFICON_INFO(vf, tip_delay_id) == -1) return FALSE; |
570 | 570 |
571 window = gtk_widget_get_toplevel(vfi->listview); | 571 window = gtk_widget_get_toplevel(vf->listview); |
572 | 572 |
573 if (GTK_WIDGET_SENSITIVE(window) && | 573 if (GTK_WIDGET_SENSITIVE(window) && |
574 GTK_WINDOW(window)->has_focus) | 574 GTK_WINDOW(window)->has_focus) |
575 { | 575 { |
576 tip_show(vfi); | 576 tip_show(vf); |
577 } | 577 } |
578 | 578 |
579 vfi->tip_delay_id = -1; | 579 VFICON_INFO(vf, tip_delay_id) = -1; |
580 return FALSE; | 580 return FALSE; |
581 } | 581 } |
582 | 582 |
583 static void tip_schedule(ViewFileIcon *vfi) | 583 static void tip_schedule(ViewFile *vf) |
584 { | 584 { |
585 tip_hide(vfi); | 585 tip_hide(vf); |
586 | 586 |
587 if (vfi->tip_delay_id != -1) | 587 if (VFICON_INFO(vf, tip_delay_id) != -1) |
588 { | 588 { |
589 g_source_remove(vfi->tip_delay_id); | 589 g_source_remove(VFICON_INFO(vf, tip_delay_id)); |
590 vfi->tip_delay_id = -1; | 590 VFICON_INFO(vf, tip_delay_id) = -1; |
591 } | 591 } |
592 | 592 |
593 if (!vfi->show_text) | 593 if (!VFICON_INFO(vf, show_text)) |
594 { | 594 { |
595 vfi->tip_delay_id = g_timeout_add(VFICON_TIP_DELAY, tip_schedule_cb, vfi); | 595 VFICON_INFO(vf, tip_delay_id) = g_timeout_add(VFICON_TIP_DELAY, tip_schedule_cb, vf); |
596 } | 596 } |
597 } | 597 } |
598 | 598 |
599 static void tip_unschedule(ViewFileIcon *vfi) | 599 static void tip_unschedule(ViewFile *vf) |
600 { | 600 { |
601 tip_hide(vfi); | 601 tip_hide(vf); |
602 | 602 |
603 if (vfi->tip_delay_id != -1) g_source_remove(vfi->tip_delay_id); | 603 if (VFICON_INFO(vf, tip_delay_id) != -1) g_source_remove(VFICON_INFO(vf, tip_delay_id)); |
604 vfi->tip_delay_id = -1; | 604 VFICON_INFO(vf, tip_delay_id) = -1; |
605 } | 605 } |
606 | 606 |
607 static void tip_update(ViewFileIcon *vfi, IconData *id) | 607 static void tip_update(ViewFile *vf, IconData *id) |
608 { | 608 { |
609 if (vfi->tip_window) | 609 if (VFICON_INFO(vf, tip_window)) |
610 { | 610 { |
611 gint x, y; | 611 gint x, y; |
612 | 612 |
613 gdk_window_get_pointer(NULL, &x, &y, NULL); | 613 gdk_window_get_pointer(NULL, &x, &y, NULL); |
614 gtk_window_move(GTK_WINDOW(vfi->tip_window), x + 16, y + 16); | 614 gtk_window_move(GTK_WINDOW(VFICON_INFO(vf, tip_window)), x + 16, y + 16); |
615 | 615 |
616 if (id != vfi->tip_id) | 616 if (id != VFICON_INFO(vf, tip_id)) |
617 { | 617 { |
618 GtkWidget *label; | 618 GtkWidget *label; |
619 | 619 |
620 vfi->tip_id = id; | 620 VFICON_INFO(vf, tip_id) = id; |
621 | 621 |
622 if (!vfi->tip_id) | 622 if (!VFICON_INFO(vf, tip_id)) |
623 { | 623 { |
624 tip_hide(vfi); | 624 tip_hide(vf); |
625 tip_schedule(vfi); | 625 tip_schedule(vf); |
626 return; | 626 return; |
627 } | 627 } |
628 | 628 |
629 label = g_object_get_data(G_OBJECT(vfi->tip_window), "tip_label"); | 629 label = g_object_get_data(G_OBJECT(VFICON_INFO(vf, tip_window)), "tip_label"); |
630 gtk_label_set_text(GTK_LABEL(label), vfi->tip_id->fd->name); | 630 gtk_label_set_text(GTK_LABEL(label), VFICON_INFO(vf, tip_id)->fd->name); |
631 } | 631 } |
632 } | 632 } |
633 else | 633 else |
634 { | 634 { |
635 tip_schedule(vfi); | 635 tip_schedule(vf); |
636 } | 636 } |
637 } | 637 } |
638 | 638 |
639 /* | 639 /* |
640 *------------------------------------------------------------------- | 640 *------------------------------------------------------------------- |
644 | 644 |
645 static void vficon_dnd_get(GtkWidget *widget, GdkDragContext *context, | 645 static void vficon_dnd_get(GtkWidget *widget, GdkDragContext *context, |
646 GtkSelectionData *selection_data, guint info, | 646 GtkSelectionData *selection_data, guint info, |
647 guint time, gpointer data) | 647 guint time, gpointer data) |
648 { | 648 { |
649 ViewFileIcon *vfi = data; | 649 ViewFile *vf = data; |
650 GList *list = NULL; | 650 GList *list = NULL; |
651 gchar *uri_text = NULL; | 651 gchar *uri_text = NULL; |
652 gint total; | 652 gint total; |
653 | 653 |
654 if (!vfi->click_id) return; | 654 if (!VFICON_INFO(vf, click_id)) return; |
655 | 655 |
656 if (vfi->click_id->selected & SELECTION_SELECTED) | 656 if (VFICON_INFO(vf, click_id)->selected & SELECTION_SELECTED) |
657 { | 657 { |
658 list = vficon_selection_get_list(vfi); | 658 list = vficon_selection_get_list(vf); |
659 } | 659 } |
660 else | 660 else |
661 { | 661 { |
662 list = g_list_append(NULL, file_data_ref(vfi->click_id->fd)); | 662 list = g_list_append(NULL, file_data_ref(VFICON_INFO(vf, click_id)->fd)); |
663 } | 663 } |
664 | 664 |
665 if (!list) return; | 665 if (!list) return; |
666 uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN)); | 666 uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN)); |
667 filelist_free(list); | 667 filelist_free(list); |
673 g_free(uri_text); | 673 g_free(uri_text); |
674 } | 674 } |
675 | 675 |
676 static void vficon_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data) | 676 static void vficon_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data) |
677 { | 677 { |
678 ViewFileIcon *vfi = data; | 678 ViewFile *vf = data; |
679 | 679 |
680 tip_unschedule(vfi); | 680 tip_unschedule(vf); |
681 | 681 |
682 if (vfi->click_id && vfi->click_id->fd->pixbuf) | 682 if (VFICON_INFO(vf, click_id) && VFICON_INFO(vf, click_id)->fd->pixbuf) |
683 { | 683 { |
684 gint items; | 684 gint items; |
685 | 685 |
686 if (vfi->click_id->selected & SELECTION_SELECTED) | 686 if (VFICON_INFO(vf, click_id)->selected & SELECTION_SELECTED) |
687 items = g_list_length(vfi->selection); | 687 items = g_list_length(VFICON_INFO(vf, selection)); |
688 else | 688 else |
689 items = 1; | 689 items = 1; |
690 | 690 |
691 dnd_set_drag_icon(widget, context, vfi->click_id->fd->pixbuf, items); | 691 dnd_set_drag_icon(widget, context, VFICON_INFO(vf, click_id)->fd->pixbuf, items); |
692 } | 692 } |
693 } | 693 } |
694 | 694 |
695 static void vficon_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data) | 695 static void vficon_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data) |
696 { | 696 { |
697 ViewFileIcon *vfi = data; | 697 ViewFile *vf = data; |
698 | 698 |
699 vficon_selection_remove(vfi, vfi->click_id, SELECTION_PRELIGHT, NULL); | 699 vficon_selection_remove(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, NULL); |
700 | 700 |
701 if (context->action == GDK_ACTION_MOVE) | 701 if (context->action == GDK_ACTION_MOVE) |
702 { | 702 { |
703 vficon_refresh(vfi); | 703 vficon_refresh(vf); |
704 } | 704 } |
705 | 705 |
706 tip_unschedule(vfi); | 706 tip_unschedule(vf); |
707 } | 707 } |
708 | 708 |
709 void vficon_dnd_init(ViewFileIcon *vfi) | 709 void vficon_dnd_init(ViewFile *vf) |
710 { | 710 { |
711 gtk_drag_source_set(vfi->listview, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, | 711 gtk_drag_source_set(vf->listview, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, |
712 dnd_file_drag_types, dnd_file_drag_types_count, | 712 dnd_file_drag_types, dnd_file_drag_types_count, |
713 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); | 713 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); |
714 g_signal_connect(G_OBJECT(vfi->listview), "drag_data_get", | 714 g_signal_connect(G_OBJECT(vf->listview), "drag_data_get", |
715 G_CALLBACK(vficon_dnd_get), vfi); | 715 G_CALLBACK(vficon_dnd_get), vf); |
716 g_signal_connect(G_OBJECT(vfi->listview), "drag_begin", | 716 g_signal_connect(G_OBJECT(vf->listview), "drag_begin", |
717 G_CALLBACK(vficon_dnd_begin), vfi); | 717 G_CALLBACK(vficon_dnd_begin), vf); |
718 g_signal_connect(G_OBJECT(vfi->listview), "drag_end", | 718 g_signal_connect(G_OBJECT(vf->listview), "drag_end", |
719 G_CALLBACK(vficon_dnd_end), vfi); | 719 G_CALLBACK(vficon_dnd_end), vf); |
720 } | 720 } |
721 | 721 |
722 /* | 722 /* |
723 *------------------------------------------------------------------- | 723 *------------------------------------------------------------------- |
724 * cell updates | 724 * cell updates |
725 *------------------------------------------------------------------- | 725 *------------------------------------------------------------------- |
726 */ | 726 */ |
727 | 727 |
728 static void vficon_selection_set(ViewFileIcon *vfi, IconData *id, SelectionType value, GtkTreeIter *iter) | 728 static void vficon_selection_set(ViewFile *vf, IconData *id, SelectionType value, GtkTreeIter *iter) |
729 { | 729 { |
730 GtkTreeModel *store; | 730 GtkTreeModel *store; |
731 GList *list; | 731 GList *list; |
732 | 732 |
733 if (!id) return; | 733 if (!id) return; |
734 | 734 |
735 | 735 |
736 if (id->selected == value) return; | 736 if (id->selected == value) return; |
737 id->selected = value; | 737 id->selected = value; |
738 | 738 |
739 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 739 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
740 if (iter) | 740 if (iter) |
741 { | 741 { |
742 gtk_tree_model_get(store, iter, FILE_COLUMN_POINTER, &list, -1); | 742 gtk_tree_model_get(store, iter, FILE_COLUMN_POINTER, &list, -1); |
743 if (list) gtk_list_store_set(GTK_LIST_STORE(store), iter, FILE_COLUMN_POINTER, list, -1); | 743 if (list) gtk_list_store_set(GTK_LIST_STORE(store), iter, FILE_COLUMN_POINTER, list, -1); |
744 } | 744 } |
745 else | 745 else |
746 { | 746 { |
747 GtkTreeIter row; | 747 GtkTreeIter row; |
748 | 748 |
749 if (vficon_find_iter(vfi, id, &row, NULL)) | 749 if (vficon_find_iter(vf, id, &row, NULL)) |
750 { | 750 { |
751 gtk_tree_model_get(store, &row, FILE_COLUMN_POINTER, &list, -1); | 751 gtk_tree_model_get(store, &row, FILE_COLUMN_POINTER, &list, -1); |
752 if (list) gtk_list_store_set(GTK_LIST_STORE(store), &row, FILE_COLUMN_POINTER, list, -1); | 752 if (list) gtk_list_store_set(GTK_LIST_STORE(store), &row, FILE_COLUMN_POINTER, list, -1); |
753 } | 753 } |
754 } | 754 } |
755 } | 755 } |
756 | 756 |
757 static void vficon_selection_add(ViewFileIcon *vfi, IconData *id, SelectionType mask, GtkTreeIter *iter) | 757 static void vficon_selection_add(ViewFile *vf, IconData *id, SelectionType mask, GtkTreeIter *iter) |
758 { | 758 { |
759 if (!id) return; | 759 if (!id) return; |
760 | 760 |
761 vficon_selection_set(vfi, id, id->selected | mask, iter); | 761 vficon_selection_set(vf, id, id->selected | mask, iter); |
762 } | 762 } |
763 | 763 |
764 static void vficon_selection_remove(ViewFileIcon *vfi, IconData *id, SelectionType mask, GtkTreeIter *iter) | 764 static void vficon_selection_remove(ViewFile *vf, IconData *id, SelectionType mask, GtkTreeIter *iter) |
765 { | 765 { |
766 if (!id) return; | 766 if (!id) return; |
767 | 767 |
768 vficon_selection_set(vfi, id, id->selected & ~mask, iter); | 768 vficon_selection_set(vf, id, id->selected & ~mask, iter); |
769 } | 769 } |
770 | 770 |
771 /* | 771 /* |
772 *------------------------------------------------------------------- | 772 *------------------------------------------------------------------- |
773 * selections | 773 * selections |
774 *------------------------------------------------------------------- | 774 *------------------------------------------------------------------- |
775 */ | 775 */ |
776 | 776 |
777 static void vficon_verify_selections(ViewFileIcon *vfi) | 777 static void vficon_verify_selections(ViewFile *vf) |
778 { | 778 { |
779 GList *work; | 779 GList *work; |
780 | 780 |
781 work = vfi->selection; | 781 work = VFICON_INFO(vf, selection); |
782 while (work) | 782 while (work) |
783 { | 783 { |
784 IconData *id = work->data; | 784 IconData *id = work->data; |
785 work = work->next; | 785 work = work->next; |
786 if (vficon_index_by_id(vfi, id) < 0) | 786 if (vficon_index_by_id(vf, id) < 0) |
787 { | 787 { |
788 vfi->selection = g_list_remove(vfi->selection, id); | 788 VFICON_INFO(vf, selection) = g_list_remove(VFICON_INFO(vf, selection), id); |
789 } | 789 } |
790 } | 790 } |
791 } | 791 } |
792 | 792 |
793 void vficon_select_all(ViewFileIcon *vfi) | 793 void vficon_select_all(ViewFile *vf) |
794 { | 794 { |
795 GList *work; | 795 GList *work; |
796 | 796 |
797 g_list_free(vfi->selection); | 797 g_list_free(VFICON_INFO(vf, selection)); |
798 vfi->selection = NULL; | 798 VFICON_INFO(vf, selection) = NULL; |
799 | 799 |
800 work = vfi->list; | 800 work = vf->list; |
801 while (work) | 801 while (work) |
802 { | 802 { |
803 IconData *id = work->data; | 803 IconData *id = work->data; |
804 vfi->selection = g_list_append(vfi->selection, id); | 804 VFICON_INFO(vf, selection) = g_list_append(VFICON_INFO(vf, selection), id); |
805 vficon_selection_add(vfi, work->data, SELECTION_SELECTED, NULL); | 805 vficon_selection_add(vf, work->data, SELECTION_SELECTED, NULL); |
806 work = work->next; | 806 work = work->next; |
807 } | 807 } |
808 | 808 |
809 vficon_send_update(vfi); | 809 vficon_send_update(vf); |
810 } | 810 } |
811 | 811 |
812 void vficon_select_none(ViewFileIcon *vfi) | 812 void vficon_select_none(ViewFile *vf) |
813 { | 813 { |
814 GList *work; | 814 GList *work; |
815 | 815 |
816 work = vfi->selection; | 816 work = VFICON_INFO(vf, selection); |
817 while (work) | 817 while (work) |
818 { | 818 { |
819 vficon_selection_remove(vfi, work->data, SELECTION_SELECTED, NULL); | 819 vficon_selection_remove(vf, work->data, SELECTION_SELECTED, NULL); |
820 work = work->next; | 820 work = work->next; |
821 } | 821 } |
822 | 822 |
823 g_list_free(vfi->selection); | 823 g_list_free(VFICON_INFO(vf, selection)); |
824 vfi->selection = NULL; | 824 VFICON_INFO(vf, selection) = NULL; |
825 | 825 |
826 vficon_send_update(vfi); | 826 vficon_send_update(vf); |
827 } | 827 } |
828 | 828 |
829 static void vficon_select(ViewFileIcon *vfi, IconData *id) | 829 static void vficon_select(ViewFile *vf, IconData *id) |
830 { | 830 { |
831 vfi->prev_selection = id; | 831 VFICON_INFO(vf, prev_selection) = id; |
832 | 832 |
833 if (!id || id->selected & SELECTION_SELECTED) return; | 833 if (!id || id->selected & SELECTION_SELECTED) return; |
834 | 834 |
835 vfi->selection = g_list_append(vfi->selection, id); | 835 VFICON_INFO(vf, selection) = g_list_append(VFICON_INFO(vf, selection), id); |
836 vficon_selection_add(vfi, id, SELECTION_SELECTED, NULL); | 836 vficon_selection_add(vf, id, SELECTION_SELECTED, NULL); |
837 | 837 |
838 vficon_send_update(vfi); | 838 vficon_send_update(vf); |
839 } | 839 } |
840 | 840 |
841 static void vficon_unselect(ViewFileIcon *vfi, IconData *id) | 841 static void vficon_unselect(ViewFile *vf, IconData *id) |
842 { | 842 { |
843 vfi->prev_selection = id; | 843 VFICON_INFO(vf, prev_selection) = id; |
844 | 844 |
845 if (!id || !(id->selected & SELECTION_SELECTED) ) return; | 845 if (!id || !(id->selected & SELECTION_SELECTED) ) return; |
846 | 846 |
847 vfi->selection = g_list_remove(vfi->selection, id); | 847 VFICON_INFO(vf, selection) = g_list_remove(VFICON_INFO(vf, selection), id); |
848 vficon_selection_remove(vfi, id, SELECTION_SELECTED, NULL); | 848 vficon_selection_remove(vf, id, SELECTION_SELECTED, NULL); |
849 | 849 |
850 vficon_send_update(vfi); | 850 vficon_send_update(vf); |
851 } | 851 } |
852 | 852 |
853 static void vficon_select_util(ViewFileIcon *vfi, IconData *id, gint select) | 853 static void vficon_select_util(ViewFile *vf, IconData *id, gint select) |
854 { | 854 { |
855 if (select) | 855 if (select) |
856 { | 856 { |
857 vficon_select(vfi, id); | 857 vficon_select(vf, id); |
858 } | 858 } |
859 else | 859 else |
860 { | 860 { |
861 vficon_unselect(vfi, id); | 861 vficon_unselect(vf, id); |
862 } | 862 } |
863 } | 863 } |
864 | 864 |
865 static void vficon_select_region_util(ViewFileIcon *vfi, IconData *start, IconData *end, gint select) | 865 static void vficon_select_region_util(ViewFile *vf, IconData *start, IconData *end, gint select) |
866 { | 866 { |
867 gint row1, col1; | 867 gint row1, col1; |
868 gint row2, col2; | 868 gint row2, col2; |
869 gint t; | 869 gint t; |
870 gint i, j; | 870 gint i, j; |
871 | 871 |
872 if (!vficon_find_position(vfi, start, &row1, &col1) || | 872 if (!vficon_find_position(vf, start, &row1, &col1) || |
873 !vficon_find_position(vfi, end, &row2, &col2) ) return; | 873 !vficon_find_position(vf, end, &row2, &col2) ) return; |
874 | 874 |
875 vfi->prev_selection = end; | 875 VFICON_INFO(vf, prev_selection) = end; |
876 | 876 |
877 if (!options->collections.rectangular_selection) | 877 if (!options->collections.rectangular_selection) |
878 { | 878 { |
879 GList *work; | 879 GList *work; |
880 IconData *id; | 880 IconData *id; |
881 | 881 |
882 if (g_list_index(vfi->list, start) > g_list_index(vfi->list, end)) | 882 if (g_list_index(vf->list, start) > g_list_index(vf->list, end)) |
883 { | 883 { |
884 id = start; | 884 id = start; |
885 start = end; | 885 start = end; |
886 end = id; | 886 end = id; |
887 } | 887 } |
888 | 888 |
889 work = g_list_find(vfi->list, start); | 889 work = g_list_find(vf->list, start); |
890 while (work) | 890 while (work) |
891 { | 891 { |
892 id = work->data; | 892 id = work->data; |
893 vficon_select_util(vfi, id, select); | 893 vficon_select_util(vf, id, select); |
894 | 894 |
895 if (work->data != end) | 895 if (work->data != end) |
896 work = work->next; | 896 work = work->next; |
897 else | 897 else |
898 work = NULL; | 898 work = NULL; |
917 | 917 |
918 for (i = row1; i <= row2; i++) | 918 for (i = row1; i <= row2; i++) |
919 { | 919 { |
920 for (j = col1; j <= col2; j++) | 920 for (j = col1; j <= col2; j++) |
921 { | 921 { |
922 IconData *id = vficon_find_data(vfi, i, j, NULL); | 922 IconData *id = vficon_find_data(vf, i, j, NULL); |
923 if (id) vficon_select_util(vfi, id, select); | 923 if (id) vficon_select_util(vf, id, select); |
924 } | 924 } |
925 } | 925 } |
926 } | 926 } |
927 | 927 |
928 gint vficon_index_is_selected(ViewFileIcon *vfi, gint row) | 928 gint vficon_index_is_selected(ViewFile *vf, gint row) |
929 { | 929 { |
930 IconData *id = g_list_nth_data(vfi->list, row); | 930 IconData *id = g_list_nth_data(vf->list, row); |
931 | 931 |
932 if (!id) return FALSE; | 932 if (!id) return FALSE; |
933 | 933 |
934 return (id->selected & SELECTION_SELECTED); | 934 return (id->selected & SELECTION_SELECTED); |
935 } | 935 } |
936 | 936 |
937 gint vficon_selection_count(ViewFileIcon *vfi, gint64 *bytes) | 937 gint vficon_selection_count(ViewFile *vf, gint64 *bytes) |
938 { | 938 { |
939 if (bytes) | 939 if (bytes) |
940 { | 940 { |
941 gint64 b = 0; | 941 gint64 b = 0; |
942 GList *work; | 942 GList *work; |
943 | 943 |
944 work = vfi->selection; | 944 work = VFICON_INFO(vf, selection); |
945 while (work) | 945 while (work) |
946 { | 946 { |
947 IconData *id = work->data; | 947 IconData *id = work->data; |
948 FileData *fd = id->fd; | 948 FileData *fd = id->fd; |
949 g_assert(fd->magick == 0x12345678); | 949 g_assert(fd->magick == 0x12345678); |
953 } | 953 } |
954 | 954 |
955 *bytes = b; | 955 *bytes = b; |
956 } | 956 } |
957 | 957 |
958 return g_list_length(vfi->selection); | 958 return g_list_length(VFICON_INFO(vf, selection)); |
959 } | 959 } |
960 | 960 |
961 GList *vficon_selection_get_list(ViewFileIcon *vfi) | 961 GList *vficon_selection_get_list(ViewFile *vf) |
962 { | 962 { |
963 GList *list = NULL; | 963 GList *list = NULL; |
964 GList *work; | 964 GList *work; |
965 | 965 |
966 work = vfi->selection; | 966 work = VFICON_INFO(vf, selection); |
967 while (work) | 967 while (work) |
968 { | 968 { |
969 IconData *id = work->data; | 969 IconData *id = work->data; |
970 FileData *fd = id->fd; | 970 FileData *fd = id->fd; |
971 g_assert(fd->magick == 0x12345678); | 971 g_assert(fd->magick == 0x12345678); |
978 list = g_list_reverse(list); | 978 list = g_list_reverse(list); |
979 | 979 |
980 return list; | 980 return list; |
981 } | 981 } |
982 | 982 |
983 GList *vficon_selection_get_list_by_index(ViewFileIcon *vfi) | 983 GList *vficon_selection_get_list_by_index(ViewFile *vf) |
984 { | 984 { |
985 GList *list = NULL; | 985 GList *list = NULL; |
986 GList *work; | 986 GList *work; |
987 | 987 |
988 work = vfi->selection; | 988 work = VFICON_INFO(vf, selection); |
989 while (work) | 989 while (work) |
990 { | 990 { |
991 list = g_list_prepend(list, GINT_TO_POINTER(g_list_index(vfi->list, work->data))); | 991 list = g_list_prepend(list, GINT_TO_POINTER(g_list_index(vf->list, work->data))); |
992 work = work->next; | 992 work = work->next; |
993 } | 993 } |
994 | 994 |
995 return g_list_reverse(list); | 995 return g_list_reverse(list); |
996 } | 996 } |
997 | 997 |
998 static void vficon_select_by_id(ViewFileIcon *vfi, IconData *id) | 998 static void vficon_select_by_id(ViewFile *vf, IconData *id) |
999 { | 999 { |
1000 if (!id) return; | 1000 if (!id) return; |
1001 | 1001 |
1002 if (!(id->selected & SELECTION_SELECTED)) | 1002 if (!(id->selected & SELECTION_SELECTED)) |
1003 { | 1003 { |
1004 vficon_select_none(vfi); | 1004 vficon_select_none(vf); |
1005 vficon_select(vfi, id); | 1005 vficon_select(vf, id); |
1006 } | 1006 } |
1007 | 1007 |
1008 vficon_set_focus(vfi, id); | 1008 vficon_set_focus(vf, id); |
1009 } | 1009 } |
1010 | 1010 |
1011 | 1011 |
1012 void vficon_select_by_path(ViewFileIcon *vfi, const gchar *path) | 1012 void vficon_select_by_path(ViewFile *vf, const gchar *path) |
1013 { | 1013 { |
1014 IconData *id = NULL; | 1014 IconData *id = NULL; |
1015 GList *work; | 1015 GList *work; |
1016 | 1016 |
1017 if (!path) return; | 1017 if (!path) return; |
1018 | 1018 |
1019 work = vfi->list; | 1019 work = vf->list; |
1020 while (work && !id) | 1020 while (work && !id) |
1021 { | 1021 { |
1022 IconData *chk = work->data; | 1022 IconData *chk = work->data; |
1023 work = work->next; | 1023 work = work->next; |
1024 if (strcmp(chk->fd->path, path) == 0) id = chk; | 1024 if (strcmp(chk->fd->path, path) == 0) id = chk; |
1025 } | 1025 } |
1026 vficon_select_by_id(vfi, id); | 1026 vficon_select_by_id(vf, id); |
1027 } | 1027 } |
1028 | 1028 |
1029 void vficon_select_by_fd(ViewFileIcon *vfi, FileData *fd) | 1029 void vficon_select_by_fd(ViewFile *vf, FileData *fd) |
1030 { | 1030 { |
1031 IconData *id = NULL; | 1031 IconData *id = NULL; |
1032 GList *work; | 1032 GList *work; |
1033 | 1033 |
1034 if (!fd) return; | 1034 if (!fd) return; |
1035 work = vfi->list; | 1035 work = vf->list; |
1036 while (work && !id) | 1036 while (work && !id) |
1037 { | 1037 { |
1038 IconData *chk = work->data; | 1038 IconData *chk = work->data; |
1039 work = work->next; | 1039 work = work->next; |
1040 if (chk->fd == fd) id = chk; | 1040 if (chk->fd == fd) id = chk; |
1041 } | 1041 } |
1042 vficon_select_by_id(vfi, id); | 1042 vficon_select_by_id(vf, id); |
1043 } | 1043 } |
1044 | 1044 |
1045 void vficon_mark_to_selection(ViewFileIcon *vfi, gint mark, MarkToSelectionMode mode) | 1045 void vficon_mark_to_selection(ViewFile *vf, gint mark, MarkToSelectionMode mode) |
1046 { | 1046 { |
1047 GList *work; | 1047 GList *work; |
1048 | 1048 |
1049 work = vfi->list; | 1049 work = vf->list; |
1050 while (work) | 1050 while (work) |
1051 { | 1051 { |
1052 IconData *id = work->data; | 1052 IconData *id = work->data; |
1053 FileData *fd = id->fd; | 1053 FileData *fd = id->fd; |
1054 gboolean mark_val, selected; | 1054 gboolean mark_val, selected; |
1068 break; | 1068 break; |
1069 case MTS_MODE_MINUS: selected = !mark_val & selected; | 1069 case MTS_MODE_MINUS: selected = !mark_val & selected; |
1070 break; | 1070 break; |
1071 } | 1071 } |
1072 | 1072 |
1073 vficon_select_util(vfi, id, selected); | 1073 vficon_select_util(vf, id, selected); |
1074 | 1074 |
1075 work = work->next; | 1075 work = work->next; |
1076 } | 1076 } |
1077 } | 1077 } |
1078 | 1078 |
1079 void vficon_selection_to_mark(ViewFileIcon *vfi, gint mark, SelectionToMarkMode mode) | 1079 void vficon_selection_to_mark(ViewFile *vf, gint mark, SelectionToMarkMode mode) |
1080 { | 1080 { |
1081 GList *slist; | 1081 GList *slist; |
1082 GList *work; | 1082 GList *work; |
1083 | 1083 |
1084 g_assert(mark >= 0 && mark < FILEDATA_MARKS_SIZE); | 1084 g_assert(mark >= 0 && mark < FILEDATA_MARKS_SIZE); |
1085 | 1085 |
1086 slist = vficon_selection_get_list(vfi); | 1086 slist = vficon_selection_get_list(vf); |
1087 work = slist; | 1087 work = slist; |
1088 while (work) | 1088 while (work) |
1089 { | 1089 { |
1090 FileData *fd = work->data; | 1090 FileData *fd = work->data; |
1091 | 1091 |
1109 *------------------------------------------------------------------- | 1109 *------------------------------------------------------------------- |
1110 * focus | 1110 * focus |
1111 *------------------------------------------------------------------- | 1111 *------------------------------------------------------------------- |
1112 */ | 1112 */ |
1113 | 1113 |
1114 static void vficon_move_focus(ViewFileIcon *vfi, gint row, gint col, gint relative) | 1114 static void vficon_move_focus(ViewFile *vf, gint row, gint col, gint relative) |
1115 { | 1115 { |
1116 gint new_row; | 1116 gint new_row; |
1117 gint new_col; | 1117 gint new_col; |
1118 | 1118 |
1119 if (relative) | 1119 if (relative) |
1120 { | 1120 { |
1121 new_row = vfi->focus_row; | 1121 new_row = VFICON_INFO(vf, focus_row); |
1122 new_col = vfi->focus_column; | 1122 new_col = VFICON_INFO(vf, focus_column); |
1123 | 1123 |
1124 new_row += row; | 1124 new_row += row; |
1125 if (new_row < 0) new_row = 0; | 1125 if (new_row < 0) new_row = 0; |
1126 if (new_row >= vfi->rows) new_row = vfi->rows - 1; | 1126 if (new_row >= VFICON_INFO(vf, rows)) new_row = VFICON_INFO(vf, rows) - 1; |
1127 | 1127 |
1128 while (col != 0) | 1128 while (col != 0) |
1129 { | 1129 { |
1130 if (col < 0) | 1130 if (col < 0) |
1131 { | 1131 { |
1141 if (new_col < 0) | 1141 if (new_col < 0) |
1142 { | 1142 { |
1143 if (new_row > 0) | 1143 if (new_row > 0) |
1144 { | 1144 { |
1145 new_row--; | 1145 new_row--; |
1146 new_col = vfi->columns - 1; | 1146 new_col = VFICON_INFO(vf, columns) - 1; |
1147 } | 1147 } |
1148 else | 1148 else |
1149 { | 1149 { |
1150 new_col = 0; | 1150 new_col = 0; |
1151 } | 1151 } |
1152 } | 1152 } |
1153 if (new_col >= vfi->columns) | 1153 if (new_col >= VFICON_INFO(vf, columns)) |
1154 { | 1154 { |
1155 if (new_row < vfi->rows - 1) | 1155 if (new_row < VFICON_INFO(vf, rows) - 1) |
1156 { | 1156 { |
1157 new_row++; | 1157 new_row++; |
1158 new_col = 0; | 1158 new_col = 0; |
1159 } | 1159 } |
1160 else | 1160 else |
1161 { | 1161 { |
1162 new_col = vfi->columns - 1; | 1162 new_col = VFICON_INFO(vf, columns) - 1; |
1163 } | 1163 } |
1164 } | 1164 } |
1165 } | 1165 } |
1166 } | 1166 } |
1167 else | 1167 else |
1168 { | 1168 { |
1169 new_row = row; | 1169 new_row = row; |
1170 new_col = col; | 1170 new_col = col; |
1171 | 1171 |
1172 if (new_row >= vfi->rows) | 1172 if (new_row >= VFICON_INFO(vf, rows)) |
1173 { | 1173 { |
1174 if (vfi->rows > 0) | 1174 if (VFICON_INFO(vf, rows) > 0) |
1175 new_row = vfi->rows - 1; | 1175 new_row = VFICON_INFO(vf, rows) - 1; |
1176 else | 1176 else |
1177 new_row = 0; | 1177 new_row = 0; |
1178 new_col = vfi->columns - 1; | 1178 new_col = VFICON_INFO(vf, columns) - 1; |
1179 } | 1179 } |
1180 if (new_col >= vfi->columns) new_col = vfi->columns - 1; | 1180 if (new_col >= VFICON_INFO(vf, columns)) new_col = VFICON_INFO(vf, columns) - 1; |
1181 } | 1181 } |
1182 | 1182 |
1183 if (new_row == vfi->rows - 1) | 1183 if (new_row == VFICON_INFO(vf, rows) - 1) |
1184 { | 1184 { |
1185 gint l; | 1185 gint l; |
1186 | 1186 |
1187 /* if we moved beyond the last image, go to the last image */ | 1187 /* if we moved beyond the last image, go to the last image */ |
1188 | 1188 |
1189 l = g_list_length(vfi->list); | 1189 l = g_list_length(vf->list); |
1190 if (vfi->rows > 1) l -= (vfi->rows - 1) * vfi->columns; | 1190 if (VFICON_INFO(vf, rows) > 1) l -= (VFICON_INFO(vf, rows) - 1) * VFICON_INFO(vf, columns); |
1191 if (new_col >= l) new_col = l - 1; | 1191 if (new_col >= l) new_col = l - 1; |
1192 } | 1192 } |
1193 | 1193 |
1194 vficon_set_focus(vfi, vficon_find_data(vfi, new_row, new_col, NULL)); | 1194 vficon_set_focus(vf, vficon_find_data(vf, new_row, new_col, NULL)); |
1195 } | 1195 } |
1196 | 1196 |
1197 static void vficon_set_focus(ViewFileIcon *vfi, IconData *id) | 1197 static void vficon_set_focus(ViewFile *vf, IconData *id) |
1198 { | 1198 { |
1199 GtkTreeIter iter; | 1199 GtkTreeIter iter; |
1200 gint row, col; | 1200 gint row, col; |
1201 | 1201 |
1202 if (g_list_find(vfi->list, vfi->focus_id)) | 1202 if (g_list_find(vf->list, VFICON_INFO(vf, focus_id))) |
1203 { | 1203 { |
1204 if (id == vfi->focus_id) | 1204 if (id == VFICON_INFO(vf, focus_id)) |
1205 { | 1205 { |
1206 /* ensure focus row col are correct */ | 1206 /* ensure focus row col are correct */ |
1207 vficon_find_position(vfi, vfi->focus_id, &vfi->focus_row, &vfi->focus_column); | 1207 vficon_find_position(vf, VFICON_INFO(vf, focus_id), &VFICON_INFO(vf, focus_row), &VFICON_INFO(vf, focus_column)); |
1208 return; | 1208 return; |
1209 } | 1209 } |
1210 vficon_selection_remove(vfi, vfi->focus_id, SELECTION_FOCUS, NULL); | 1210 vficon_selection_remove(vf, VFICON_INFO(vf, focus_id), SELECTION_FOCUS, NULL); |
1211 } | 1211 } |
1212 | 1212 |
1213 if (!vficon_find_position(vfi, id, &row, &col)) | 1213 if (!vficon_find_position(vf, id, &row, &col)) |
1214 { | 1214 { |
1215 vfi->focus_id = NULL; | 1215 VFICON_INFO(vf, focus_id) = NULL; |
1216 vfi->focus_row = -1; | 1216 VFICON_INFO(vf, focus_row) = -1; |
1217 vfi->focus_column = -1; | 1217 VFICON_INFO(vf, focus_column) = -1; |
1218 return; | 1218 return; |
1219 } | 1219 } |
1220 | 1220 |
1221 vfi->focus_id = id; | 1221 VFICON_INFO(vf, focus_id) = id; |
1222 vfi->focus_row = row; | 1222 VFICON_INFO(vf, focus_row) = row; |
1223 vfi->focus_column = col; | 1223 VFICON_INFO(vf, focus_column) = col; |
1224 vficon_selection_add(vfi, vfi->focus_id, SELECTION_FOCUS, NULL); | 1224 vficon_selection_add(vf, VFICON_INFO(vf, focus_id), SELECTION_FOCUS, NULL); |
1225 | 1225 |
1226 if (vficon_find_iter(vfi, vfi->focus_id, &iter, NULL)) | 1226 if (vficon_find_iter(vf, VFICON_INFO(vf, focus_id), &iter, NULL)) |
1227 { | 1227 { |
1228 GtkTreePath *tpath; | 1228 GtkTreePath *tpath; |
1229 GtkTreeViewColumn *column; | 1229 GtkTreeViewColumn *column; |
1230 GtkTreeModel *store; | 1230 GtkTreeModel *store; |
1231 | 1231 |
1232 tree_view_row_make_visible(GTK_TREE_VIEW(vfi->listview), &iter, FALSE); | 1232 tree_view_row_make_visible(GTK_TREE_VIEW(vf->listview), &iter, FALSE); |
1233 | 1233 |
1234 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 1234 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
1235 tpath = gtk_tree_model_get_path(store, &iter); | 1235 tpath = gtk_tree_model_get_path(store, &iter); |
1236 /* focus is set to an extra column with 0 width to hide focus, we draw it ourself */ | 1236 /* focus is set to an extra column with 0 width to hide focus, we draw it ourself */ |
1237 column = gtk_tree_view_get_column(GTK_TREE_VIEW(vfi->listview), VFICON_MAX_COLUMNS); | 1237 column = gtk_tree_view_get_column(GTK_TREE_VIEW(vf->listview), VFICON_MAX_COLUMNS); |
1238 gtk_tree_view_set_cursor(GTK_TREE_VIEW(vfi->listview), tpath, column, FALSE); | 1238 gtk_tree_view_set_cursor(GTK_TREE_VIEW(vf->listview), tpath, column, FALSE); |
1239 gtk_tree_path_free(tpath); | 1239 gtk_tree_path_free(tpath); |
1240 } | 1240 } |
1241 } | 1241 } |
1242 | 1242 |
1243 static void vficon_update_focus(ViewFileIcon *vfi) | 1243 static void vficon_update_focus(ViewFile *vf) |
1244 { | 1244 { |
1245 gint new_row = 0; | 1245 gint new_row = 0; |
1246 gint new_col = 0; | 1246 gint new_col = 0; |
1247 | 1247 |
1248 if (vfi->focus_id && vficon_find_position(vfi, vfi->focus_id, &new_row, &new_col)) | 1248 if (VFICON_INFO(vf, focus_id) && vficon_find_position(vf, VFICON_INFO(vf, focus_id), &new_row, &new_col)) |
1249 { | 1249 { |
1250 /* first find the old focus, if it exists and is valid */ | 1250 /* first find the old focus, if it exists and is valid */ |
1251 } | 1251 } |
1252 else | 1252 else |
1253 { | 1253 { |
1254 /* (try to) stay where we were */ | 1254 /* (try to) stay where we were */ |
1255 new_row = vfi->focus_row; | 1255 new_row = VFICON_INFO(vf, focus_row); |
1256 new_col = vfi->focus_column; | 1256 new_col = VFICON_INFO(vf, focus_column); |
1257 } | 1257 } |
1258 | 1258 |
1259 vficon_move_focus(vfi, new_row, new_col, FALSE); | 1259 vficon_move_focus(vf, new_row, new_col, FALSE); |
1260 } | 1260 } |
1261 | 1261 |
1262 /* used to figure the page up/down distances */ | 1262 /* used to figure the page up/down distances */ |
1263 static gint page_height(ViewFileIcon *vfi) | 1263 static gint page_height(ViewFile *vf) |
1264 { | 1264 { |
1265 GtkAdjustment *adj; | 1265 GtkAdjustment *adj; |
1266 gint page_size; | 1266 gint page_size; |
1267 gint row_height; | 1267 gint row_height; |
1268 gint ret; | 1268 gint ret; |
1269 | 1269 |
1270 adj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(vfi->listview)); | 1270 adj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(vf->listview)); |
1271 page_size = (gint)adj->page_increment; | 1271 page_size = (gint)adj->page_increment; |
1272 | 1272 |
1273 row_height = options->thumbnails.max_height + THUMB_BORDER_PADDING * 2; | 1273 row_height = options->thumbnails.max_height + THUMB_BORDER_PADDING * 2; |
1274 if (vfi->show_text) row_height += options->thumbnails.max_height / 3; | 1274 if (VFICON_INFO(vf, show_text)) row_height += options->thumbnails.max_height / 3; |
1275 | 1275 |
1276 ret = page_size / row_height; | 1276 ret = page_size / row_height; |
1277 if (ret < 1) ret = 1; | 1277 if (ret < 1) ret = 1; |
1278 | 1278 |
1279 return ret; | 1279 return ret; |
1285 *------------------------------------------------------------------- | 1285 *------------------------------------------------------------------- |
1286 */ | 1286 */ |
1287 | 1287 |
1288 static void vfi_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data) | 1288 static void vfi_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data) |
1289 { | 1289 { |
1290 ViewFileIcon *vfi = data; | 1290 ViewFile *vf = data; |
1291 GtkTreeModel *store; | 1291 GtkTreeModel *store; |
1292 GtkTreeIter iter; | 1292 GtkTreeIter iter; |
1293 gint column; | 1293 gint column; |
1294 GtkTreePath *tpath; | 1294 GtkTreePath *tpath; |
1295 gint cw, ch; | 1295 gint cw, ch; |
1296 | 1296 |
1297 if (!vficon_find_iter(vfi, vfi->click_id, &iter, &column)) return; | 1297 if (!vficon_find_iter(vf, VFICON_INFO(vf, click_id), &iter, &column)) return; |
1298 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 1298 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
1299 tpath = gtk_tree_model_get_path(store, &iter); | 1299 tpath = gtk_tree_model_get_path(store, &iter); |
1300 tree_view_get_cell_clamped(GTK_TREE_VIEW(vfi->listview), tpath, column, FALSE, x, y, &cw, &ch); | 1300 tree_view_get_cell_clamped(GTK_TREE_VIEW(vf->listview), tpath, column, FALSE, x, y, &cw, &ch); |
1301 gtk_tree_path_free(tpath); | 1301 gtk_tree_path_free(tpath); |
1302 *y += ch; | 1302 *y += ch; |
1303 popup_menu_position_clamp(menu, x, y, 0); | 1303 popup_menu_position_clamp(menu, x, y, 0); |
1304 } | 1304 } |
1305 | 1305 |
1306 gint vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) | 1306 gint vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) |
1307 { | 1307 { |
1308 ViewFileIcon *vfi = data; | 1308 ViewFile *vf = data; |
1309 gint focus_row = 0; | 1309 gint focus_row = 0; |
1310 gint focus_col = 0; | 1310 gint focus_col = 0; |
1311 IconData *id; | 1311 IconData *id; |
1312 gint stop_signal; | 1312 gint stop_signal; |
1313 | 1313 |
1325 break; | 1325 break; |
1326 case GDK_Down: case GDK_KP_Down: | 1326 case GDK_Down: case GDK_KP_Down: |
1327 focus_row = 1; | 1327 focus_row = 1; |
1328 break; | 1328 break; |
1329 case GDK_Page_Up: case GDK_KP_Page_Up: | 1329 case GDK_Page_Up: case GDK_KP_Page_Up: |
1330 focus_row = -page_height(vfi); | 1330 focus_row = -page_height(vf); |
1331 break; | 1331 break; |
1332 case GDK_Page_Down: case GDK_KP_Page_Down: | 1332 case GDK_Page_Down: case GDK_KP_Page_Down: |
1333 focus_row = page_height(vfi); | 1333 focus_row = page_height(vf); |
1334 break; | 1334 break; |
1335 case GDK_Home: case GDK_KP_Home: | 1335 case GDK_Home: case GDK_KP_Home: |
1336 focus_row = -vfi->focus_row; | 1336 focus_row = -VFICON_INFO(vf, focus_row); |
1337 focus_col = -vfi->focus_column; | 1337 focus_col = -VFICON_INFO(vf, focus_column); |
1338 break; | 1338 break; |
1339 case GDK_End: case GDK_KP_End: | 1339 case GDK_End: case GDK_KP_End: |
1340 focus_row = vfi->rows - 1 - vfi->focus_row; | 1340 focus_row = VFICON_INFO(vf, rows) - 1 - VFICON_INFO(vf, focus_row); |
1341 focus_col = vfi->columns - 1 - vfi->focus_column; | 1341 focus_col = VFICON_INFO(vf, columns) - 1 - VFICON_INFO(vf, focus_column); |
1342 break; | 1342 break; |
1343 case GDK_space: | 1343 case GDK_space: |
1344 id = vficon_find_data(vfi, vfi->focus_row, vfi->focus_column, NULL); | 1344 id = vficon_find_data(vf, VFICON_INFO(vf, focus_row), VFICON_INFO(vf, focus_column), NULL); |
1345 if (id) | 1345 if (id) |
1346 { | 1346 { |
1347 vfi->click_id = id; | 1347 VFICON_INFO(vf, click_id) = id; |
1348 if (event->state & GDK_CONTROL_MASK) | 1348 if (event->state & GDK_CONTROL_MASK) |
1349 { | 1349 { |
1350 gint selected; | 1350 gint selected; |
1351 | 1351 |
1352 selected = id->selected & SELECTION_SELECTED; | 1352 selected = id->selected & SELECTION_SELECTED; |
1353 if (selected) | 1353 if (selected) |
1354 { | 1354 { |
1355 vficon_unselect(vfi, id); | 1355 vficon_unselect(vf, id); |
1356 } | 1356 } |
1357 else | 1357 else |
1358 { | 1358 { |
1359 vficon_select(vfi, id); | 1359 vficon_select(vf, id); |
1360 vficon_send_layout_select(vfi, id); | 1360 vficon_send_layout_select(vf, id); |
1361 } | 1361 } |
1362 } | 1362 } |
1363 else | 1363 else |
1364 { | 1364 { |
1365 vficon_select_none(vfi); | 1365 vficon_select_none(vf); |
1366 vficon_select(vfi, id); | 1366 vficon_select(vf, id); |
1367 vficon_send_layout_select(vfi, id); | 1367 vficon_send_layout_select(vf, id); |
1368 } | 1368 } |
1369 } | 1369 } |
1370 break; | 1370 break; |
1371 case GDK_Menu: | 1371 case GDK_Menu: |
1372 id = vficon_find_data(vfi, vfi->focus_row, vfi->focus_column, NULL); | 1372 id = vficon_find_data(vf, VFICON_INFO(vf, focus_row), VFICON_INFO(vf, focus_column), NULL); |
1373 vfi->click_id = id; | 1373 VFICON_INFO(vf, click_id) = id; |
1374 | 1374 |
1375 vficon_selection_add(vfi, vfi->click_id, SELECTION_PRELIGHT, NULL); | 1375 vficon_selection_add(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, NULL); |
1376 tip_unschedule(vfi); | 1376 tip_unschedule(vf); |
1377 | 1377 |
1378 vfi->popup = vficon_pop_menu(vfi, (id != NULL)); | 1378 vf->popup = vficon_pop_menu(vf, (id != NULL)); |
1379 gtk_menu_popup(GTK_MENU(vfi->popup), NULL, NULL, vfi_menu_position_cb, vfi, 0, GDK_CURRENT_TIME); | 1379 gtk_menu_popup(GTK_MENU(vf->popup), NULL, NULL, vfi_menu_position_cb, vf, 0, GDK_CURRENT_TIME); |
1380 break; | 1380 break; |
1381 default: | 1381 default: |
1382 stop_signal = FALSE; | 1382 stop_signal = FALSE; |
1383 break; | 1383 break; |
1384 } | 1384 } |
1386 if (focus_row != 0 || focus_col != 0) | 1386 if (focus_row != 0 || focus_col != 0) |
1387 { | 1387 { |
1388 IconData *new_id; | 1388 IconData *new_id; |
1389 IconData *old_id; | 1389 IconData *old_id; |
1390 | 1390 |
1391 old_id = vficon_find_data(vfi, vfi->focus_row, vfi->focus_column, NULL); | 1391 old_id = vficon_find_data(vf, VFICON_INFO(vf, focus_row), VFICON_INFO(vf, focus_column), NULL); |
1392 vficon_move_focus(vfi, focus_row, focus_col, TRUE); | 1392 vficon_move_focus(vf, focus_row, focus_col, TRUE); |
1393 new_id = vficon_find_data(vfi, vfi->focus_row, vfi->focus_column, NULL); | 1393 new_id = vficon_find_data(vf, VFICON_INFO(vf, focus_row), VFICON_INFO(vf, focus_column), NULL); |
1394 | 1394 |
1395 if (new_id != old_id) | 1395 if (new_id != old_id) |
1396 { | 1396 { |
1397 if (event->state & GDK_SHIFT_MASK) | 1397 if (event->state & GDK_SHIFT_MASK) |
1398 { | 1398 { |
1399 if (!options->collections.rectangular_selection) | 1399 if (!options->collections.rectangular_selection) |
1400 { | 1400 { |
1401 vficon_select_region_util(vfi, old_id, new_id, FALSE); | 1401 vficon_select_region_util(vf, old_id, new_id, FALSE); |
1402 } | 1402 } |
1403 else | 1403 else |
1404 { | 1404 { |
1405 vficon_select_region_util(vfi, vfi->click_id, old_id, FALSE); | 1405 vficon_select_region_util(vf, VFICON_INFO(vf, click_id), old_id, FALSE); |
1406 } | 1406 } |
1407 vficon_select_region_util(vfi, vfi->click_id, new_id, TRUE); | 1407 vficon_select_region_util(vf, VFICON_INFO(vf, click_id), new_id, TRUE); |
1408 vficon_send_layout_select(vfi, new_id); | 1408 vficon_send_layout_select(vf, new_id); |
1409 } | 1409 } |
1410 else if (event->state & GDK_CONTROL_MASK) | 1410 else if (event->state & GDK_CONTROL_MASK) |
1411 { | 1411 { |
1412 vfi->click_id = new_id; | 1412 VFICON_INFO(vf, click_id) = new_id; |
1413 } | 1413 } |
1414 else | 1414 else |
1415 { | 1415 { |
1416 vfi->click_id = new_id; | 1416 VFICON_INFO(vf, click_id) = new_id; |
1417 vficon_select_none(vfi); | 1417 vficon_select_none(vf); |
1418 vficon_select(vfi, new_id); | 1418 vficon_select(vf, new_id); |
1419 vficon_send_layout_select(vfi, new_id); | 1419 vficon_send_layout_select(vf, new_id); |
1420 } | 1420 } |
1421 } | 1421 } |
1422 } | 1422 } |
1423 | 1423 |
1424 if (stop_signal) | 1424 if (stop_signal) |
1425 { | 1425 { |
1426 #if 0 | 1426 #if 0 |
1427 g_signal_stop_emission_by_name(GTK_OBJECT(widget), "key_press_event"); | 1427 g_signal_stop_emission_by_name(GTK_OBJECT(widget), "key_press_event"); |
1428 #endif | 1428 #endif |
1429 tip_unschedule(vfi); | 1429 tip_unschedule(vf); |
1430 } | 1430 } |
1431 | 1431 |
1432 return stop_signal; | 1432 return stop_signal; |
1433 } | 1433 } |
1434 | 1434 |
1438 *------------------------------------------------------------------- | 1438 *------------------------------------------------------------------- |
1439 */ | 1439 */ |
1440 | 1440 |
1441 static gint vficon_motion_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) | 1441 static gint vficon_motion_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) |
1442 { | 1442 { |
1443 ViewFileIcon *vfi = data; | 1443 ViewFile *vf = data; |
1444 IconData *id; | 1444 IconData *id; |
1445 | 1445 |
1446 id = vficon_find_data_by_coord(vfi, (gint)bevent->x, (gint)bevent->y, NULL); | 1446 id = vficon_find_data_by_coord(vf, (gint)bevent->x, (gint)bevent->y, NULL); |
1447 tip_update(vfi, id); | 1447 tip_update(vf, id); |
1448 | 1448 |
1449 return FALSE; | 1449 return FALSE; |
1450 } | 1450 } |
1451 | 1451 |
1452 gint vficon_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) | 1452 gint vficon_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) |
1453 { | 1453 { |
1454 ViewFileIcon *vfi = data; | 1454 ViewFile *vf = data; |
1455 GtkTreeIter iter; | 1455 GtkTreeIter iter; |
1456 IconData *id; | 1456 IconData *id; |
1457 | 1457 |
1458 tip_unschedule(vfi); | 1458 tip_unschedule(vf); |
1459 | 1459 |
1460 id = vficon_find_data_by_coord(vfi, (gint)bevent->x, (gint)bevent->y, &iter); | 1460 id = vficon_find_data_by_coord(vf, (gint)bevent->x, (gint)bevent->y, &iter); |
1461 | 1461 |
1462 vfi->click_id = id; | 1462 VFICON_INFO(vf, click_id) = id; |
1463 vficon_selection_add(vfi, vfi->click_id, SELECTION_PRELIGHT, &iter); | 1463 vficon_selection_add(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, &iter); |
1464 | 1464 |
1465 switch (bevent->button) | 1465 switch (bevent->button) |
1466 { | 1466 { |
1467 case MOUSE_BUTTON_LEFT: | 1467 case MOUSE_BUTTON_LEFT: |
1468 if (!GTK_WIDGET_HAS_FOCUS(vfi->listview)) | 1468 if (!GTK_WIDGET_HAS_FOCUS(vf->listview)) |
1469 { | 1469 { |
1470 gtk_widget_grab_focus(vfi->listview); | 1470 gtk_widget_grab_focus(vf->listview); |
1471 } | 1471 } |
1472 #if 0 | 1472 #if 0 |
1473 if (bevent->type == GDK_2BUTTON_PRESS && | 1473 if (bevent->type == GDK_2BUTTON_PRESS && |
1474 vfi->layout) | 1474 vf->layout) |
1475 { | 1475 { |
1476 vficon_selection_remove(vfi, vfi->click_id, SELECTION_PRELIGHT, &iter); | 1476 vficon_selection_remove(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, &iter); |
1477 layout_image_full_screen_start(vfi->layout); | 1477 layout_image_full_screen_start(vf->layout); |
1478 } | 1478 } |
1479 #endif | 1479 #endif |
1480 break; | 1480 break; |
1481 case MOUSE_BUTTON_RIGHT: | 1481 case MOUSE_BUTTON_RIGHT: |
1482 vfi->popup = vficon_pop_menu(vfi, (id != NULL)); | 1482 vf->popup = vficon_pop_menu(vf, (id != NULL)); |
1483 gtk_menu_popup(GTK_MENU(vfi->popup), NULL, NULL, NULL, NULL, bevent->button, bevent->time); | 1483 gtk_menu_popup(GTK_MENU(vf->popup), NULL, NULL, NULL, NULL, bevent->button, bevent->time); |
1484 break; | 1484 break; |
1485 default: | 1485 default: |
1486 break; | 1486 break; |
1487 } | 1487 } |
1488 | 1488 |
1489 return TRUE; | 1489 return TRUE; |
1490 } | 1490 } |
1491 | 1491 |
1492 gint vficon_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) | 1492 gint vficon_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) |
1493 { | 1493 { |
1494 ViewFileIcon *vfi = data; | 1494 ViewFile *vf = data; |
1495 GtkTreeIter iter; | 1495 GtkTreeIter iter; |
1496 IconData *id = NULL; | 1496 IconData *id = NULL; |
1497 gint was_selected = FALSE; | 1497 gint was_selected = FALSE; |
1498 | 1498 |
1499 tip_schedule(vfi); | 1499 tip_schedule(vf); |
1500 | 1500 |
1501 if ((gint)bevent->x != 0 || (gint) bevent->y != 0) | 1501 if ((gint)bevent->x != 0 || (gint) bevent->y != 0) |
1502 { | 1502 { |
1503 id = vficon_find_data_by_coord(vfi, (gint)bevent->x, (gint)bevent->y, &iter); | 1503 id = vficon_find_data_by_coord(vf, (gint)bevent->x, (gint)bevent->y, &iter); |
1504 } | 1504 } |
1505 | 1505 |
1506 if (vfi->click_id) | 1506 if (VFICON_INFO(vf, click_id)) |
1507 { | 1507 { |
1508 vficon_selection_remove(vfi, vfi->click_id, SELECTION_PRELIGHT, NULL); | 1508 vficon_selection_remove(vf, VFICON_INFO(vf, click_id), SELECTION_PRELIGHT, NULL); |
1509 } | 1509 } |
1510 | 1510 |
1511 if (id) was_selected = (id->selected & SELECTION_SELECTED); | 1511 if (id) was_selected = (id->selected & SELECTION_SELECTED); |
1512 | 1512 |
1513 if (bevent->button == MOUSE_BUTTON_LEFT && | 1513 if (bevent->button == MOUSE_BUTTON_LEFT && |
1514 id && vfi->click_id == id) | 1514 id && VFICON_INFO(vf, click_id) == id) |
1515 { | 1515 { |
1516 vficon_set_focus(vfi, id); | 1516 vficon_set_focus(vf, id); |
1517 | 1517 |
1518 if (bevent->state & GDK_CONTROL_MASK) | 1518 if (bevent->state & GDK_CONTROL_MASK) |
1519 { | 1519 { |
1520 gint select; | 1520 gint select; |
1521 | 1521 |
1522 select = !(id->selected & SELECTION_SELECTED); | 1522 select = !(id->selected & SELECTION_SELECTED); |
1523 if ((bevent->state & GDK_SHIFT_MASK) && vfi->prev_selection) | 1523 if ((bevent->state & GDK_SHIFT_MASK) && VFICON_INFO(vf, prev_selection)) |
1524 { | 1524 { |
1525 vficon_select_region_util(vfi, vfi->prev_selection, id, select); | 1525 vficon_select_region_util(vf, VFICON_INFO(vf, prev_selection), id, select); |
1526 } | 1526 } |
1527 else | 1527 else |
1528 { | 1528 { |
1529 vficon_select_util(vfi, id, select); | 1529 vficon_select_util(vf, id, select); |
1530 } | 1530 } |
1531 } | 1531 } |
1532 else | 1532 else |
1533 { | 1533 { |
1534 vficon_select_none(vfi); | 1534 vficon_select_none(vf); |
1535 | 1535 |
1536 if ((bevent->state & GDK_SHIFT_MASK) && | 1536 if ((bevent->state & GDK_SHIFT_MASK) && |
1537 vfi->prev_selection) | 1537 VFICON_INFO(vf, prev_selection)) |
1538 { | 1538 { |
1539 vficon_select_region_util(vfi, vfi->prev_selection, id, TRUE); | 1539 vficon_select_region_util(vf, VFICON_INFO(vf, prev_selection), id, TRUE); |
1540 } | 1540 } |
1541 else | 1541 else |
1542 { | 1542 { |
1543 vficon_select_util(vfi, id, TRUE); | 1543 vficon_select_util(vf, id, TRUE); |
1544 was_selected = FALSE; | 1544 was_selected = FALSE; |
1545 } | 1545 } |
1546 } | 1546 } |
1547 } | 1547 } |
1548 else if (bevent->button == MOUSE_BUTTON_MIDDLE && | 1548 else if (bevent->button == MOUSE_BUTTON_MIDDLE && |
1549 id && vfi->click_id == id) | 1549 id && VFICON_INFO(vf, click_id) == id) |
1550 { | 1550 { |
1551 vficon_select_util(vfi, id, !(id->selected & SELECTION_SELECTED)); | 1551 vficon_select_util(vf, id, !(id->selected & SELECTION_SELECTED)); |
1552 } | 1552 } |
1553 | 1553 |
1554 if (id && !was_selected && | 1554 if (id && !was_selected && |
1555 (id->selected & SELECTION_SELECTED)) | 1555 (id->selected & SELECTION_SELECTED)) |
1556 { | 1556 { |
1557 vficon_send_layout_select(vfi, id); | 1557 vficon_send_layout_select(vf, id); |
1558 } | 1558 } |
1559 | 1559 |
1560 return TRUE; | 1560 return TRUE; |
1561 } | 1561 } |
1562 | 1562 |
1563 static gint vficon_leave_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer data) | 1563 static gint vficon_leave_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer data) |
1564 { | 1564 { |
1565 ViewFileIcon *vfi = data; | 1565 ViewFile *vf = data; |
1566 | 1566 |
1567 tip_unschedule(vfi); | 1567 tip_unschedule(vf); |
1568 return FALSE; | 1568 return FALSE; |
1569 } | 1569 } |
1570 | 1570 |
1571 /* | 1571 /* |
1572 *------------------------------------------------------------------- | 1572 *------------------------------------------------------------------- |
1582 g_list_free(list); | 1582 g_list_free(list); |
1583 | 1583 |
1584 return FALSE; | 1584 return FALSE; |
1585 } | 1585 } |
1586 | 1586 |
1587 static void vficon_clear_store(ViewFileIcon *vfi) | 1587 static void vficon_clear_store(ViewFile *vf) |
1588 { | 1588 { |
1589 GtkTreeModel *store; | 1589 GtkTreeModel *store; |
1590 | 1590 |
1591 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 1591 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
1592 gtk_tree_model_foreach(store, vficon_destroy_node_cb, NULL); | 1592 gtk_tree_model_foreach(store, vficon_destroy_node_cb, NULL); |
1593 | 1593 |
1594 gtk_list_store_clear(GTK_LIST_STORE(store)); | 1594 gtk_list_store_clear(GTK_LIST_STORE(store)); |
1595 } | 1595 } |
1596 | 1596 |
1597 static void vficon_set_thumb(ViewFileIcon *vfi, FileData *fd, GdkPixbuf *pb) | 1597 static void vficon_set_thumb(ViewFile *vf, FileData *fd, GdkPixbuf *pb) |
1598 { | 1598 { |
1599 GtkTreeModel *store; | 1599 GtkTreeModel *store; |
1600 GtkTreeIter iter; | 1600 GtkTreeIter iter; |
1601 GList *list; | 1601 GList *list; |
1602 | 1602 |
1603 if (!vficon_find_iter(vfi, vficon_icon_data(vfi, fd), &iter, NULL)) return; | 1603 if (!vficon_find_iter(vf, vficon_icon_data(vf, fd), &iter, NULL)) return; |
1604 | 1604 |
1605 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 1605 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
1606 | 1606 |
1607 if (pb) g_object_ref(pb); | 1607 if (pb) g_object_ref(pb); |
1608 if (fd->pixbuf) g_object_unref(fd->pixbuf); | 1608 if (fd->pixbuf) g_object_unref(fd->pixbuf); |
1609 fd->pixbuf = pb; | 1609 fd->pixbuf = pb; |
1610 | 1610 |
1611 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); | 1611 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); |
1612 gtk_list_store_set(GTK_LIST_STORE(store), &iter, FILE_COLUMN_POINTER, list, -1); | 1612 gtk_list_store_set(GTK_LIST_STORE(store), &iter, FILE_COLUMN_POINTER, list, -1); |
1613 } | 1613 } |
1614 | 1614 |
1615 static GList *vficon_add_row(ViewFileIcon *vfi, GtkTreeIter *iter) | 1615 static GList *vficon_add_row(ViewFile *vf, GtkTreeIter *iter) |
1616 { | 1616 { |
1617 GtkListStore *store; | 1617 GtkListStore *store; |
1618 GList *list = NULL; | 1618 GList *list = NULL; |
1619 gint i; | 1619 gint i; |
1620 | 1620 |
1621 for (i = 0; i < vfi->columns; i++) list = g_list_prepend(list, NULL); | 1621 for (i = 0; i < VFICON_INFO(vf, columns); i++) list = g_list_prepend(list, NULL); |
1622 | 1622 |
1623 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview))); | 1623 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); |
1624 gtk_list_store_append(store, iter); | 1624 gtk_list_store_append(store, iter); |
1625 gtk_list_store_set(store, iter, FILE_COLUMN_POINTER, list, -1); | 1625 gtk_list_store_set(store, iter, FILE_COLUMN_POINTER, list, -1); |
1626 | 1626 |
1627 return list; | 1627 return list; |
1628 } | 1628 } |
1629 | 1629 |
1630 static void vficon_populate(ViewFileIcon *vfi, gint resize, gint keep_position) | 1630 static void vficon_populate(ViewFile *vf, gint resize, gint keep_position) |
1631 { | 1631 { |
1632 GtkTreeModel *store; | 1632 GtkTreeModel *store; |
1633 GtkTreePath *tpath; | 1633 GtkTreePath *tpath; |
1634 gint row; | 1634 gint row; |
1635 GList *work; | 1635 GList *work; |
1636 IconData *visible_id = NULL; | 1636 IconData *visible_id = NULL; |
1637 | 1637 |
1638 vficon_verify_selections(vfi); | 1638 vficon_verify_selections(vf); |
1639 | 1639 |
1640 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 1640 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
1641 | 1641 |
1642 if (keep_position && GTK_WIDGET_REALIZED(vfi->listview) && | 1642 if (keep_position && GTK_WIDGET_REALIZED(vf->listview) && |
1643 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vfi->listview), 0, 0, &tpath, NULL, NULL, NULL)) | 1643 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL)) |
1644 { | 1644 { |
1645 GtkTreeIter iter; | 1645 GtkTreeIter iter; |
1646 GList *list; | 1646 GList *list; |
1647 | 1647 |
1648 gtk_tree_model_get_iter(store, &iter, tpath); | 1648 gtk_tree_model_get_iter(store, &iter, tpath); |
1650 | 1650 |
1651 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); | 1651 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); |
1652 if (list) visible_id = list->data; | 1652 if (list) visible_id = list->data; |
1653 } | 1653 } |
1654 | 1654 |
1655 vficon_clear_store(vfi); | 1655 vficon_clear_store(vf); |
1656 | 1656 |
1657 if (resize) | 1657 if (resize) |
1658 { | 1658 { |
1659 gint i; | 1659 gint i; |
1660 gint thumb_width; | 1660 gint thumb_width; |
1661 | 1661 |
1662 thumb_width = vficon_get_icon_width(vfi); | 1662 thumb_width = vficon_get_icon_width(vf); |
1663 | 1663 |
1664 for (i = 0; i < VFICON_MAX_COLUMNS; i++) | 1664 for (i = 0; i < VFICON_MAX_COLUMNS; i++) |
1665 { | 1665 { |
1666 GtkTreeViewColumn *column; | 1666 GtkTreeViewColumn *column; |
1667 GtkCellRenderer *cell; | 1667 GtkCellRenderer *cell; |
1668 GList *list; | 1668 GList *list; |
1669 | 1669 |
1670 column = gtk_tree_view_get_column(GTK_TREE_VIEW(vfi->listview), i); | 1670 column = gtk_tree_view_get_column(GTK_TREE_VIEW(vf->listview), i); |
1671 gtk_tree_view_column_set_visible(column, (i < vfi->columns)); | 1671 gtk_tree_view_column_set_visible(column, (i < VFICON_INFO(vf, columns))); |
1672 gtk_tree_view_column_set_fixed_width(column, thumb_width + (THUMB_BORDER_PADDING * 6)); | 1672 gtk_tree_view_column_set_fixed_width(column, thumb_width + (THUMB_BORDER_PADDING * 6)); |
1673 | 1673 |
1674 list = gtk_tree_view_column_get_cell_renderers(column); | 1674 list = gtk_tree_view_column_get_cell_renderers(column); |
1675 cell = (list) ? list->data : NULL; | 1675 cell = (list) ? list->data : NULL; |
1676 g_list_free(list); | 1676 g_list_free(list); |
1677 | 1677 |
1678 if (cell && GQV_IS_CELL_RENDERER_ICON(cell)) | 1678 if (cell && GQV_IS_CELL_RENDERER_ICON(cell)) |
1679 { | 1679 { |
1680 g_object_set(G_OBJECT(cell), "fixed_width", thumb_width, | 1680 g_object_set(G_OBJECT(cell), "fixed_width", thumb_width, |
1681 "fixed_height", options->thumbnails.max_height, | 1681 "fixed_height", options->thumbnails.max_height, |
1682 "show_text", vfi->show_text, NULL); | 1682 "show_text", VFICON_INFO(vf, show_text), NULL); |
1683 } | 1683 } |
1684 } | 1684 } |
1685 if (GTK_WIDGET_REALIZED(vfi->listview)) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(vfi->listview)); | 1685 if (GTK_WIDGET_REALIZED(vf->listview)) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(vf->listview)); |
1686 } | 1686 } |
1687 | 1687 |
1688 row = -1; | 1688 row = -1; |
1689 work = vfi->list; | 1689 work = vf->list; |
1690 while (work) | 1690 while (work) |
1691 { | 1691 { |
1692 GList *list; | 1692 GList *list; |
1693 GtkTreeIter iter; | 1693 GtkTreeIter iter; |
1694 | 1694 |
1695 row++; | 1695 row++; |
1696 | 1696 |
1697 list = vficon_add_row(vfi, &iter); | 1697 list = vficon_add_row(vf, &iter); |
1698 while (work && list) | 1698 while (work && list) |
1699 { | 1699 { |
1700 IconData *id; | 1700 IconData *id; |
1701 | 1701 |
1702 id = work->data; | 1702 id = work->data; |
1707 work = work->next; | 1707 work = work->next; |
1708 } | 1708 } |
1709 } | 1709 } |
1710 | 1710 |
1711 if (visible_id && | 1711 if (visible_id && |
1712 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vfi->listview), 0, 0, &tpath, NULL, NULL, NULL)) | 1712 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL)) |
1713 { | 1713 { |
1714 GtkTreeIter iter; | 1714 GtkTreeIter iter; |
1715 GList *list; | 1715 GList *list; |
1716 | 1716 |
1717 gtk_tree_model_get_iter(store, &iter, tpath); | 1717 gtk_tree_model_get_iter(store, &iter, tpath); |
1718 gtk_tree_path_free(tpath); | 1718 gtk_tree_path_free(tpath); |
1719 | 1719 |
1720 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); | 1720 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); |
1721 if (g_list_find(list, visible_id) == NULL && | 1721 if (g_list_find(list, visible_id) == NULL && |
1722 vficon_find_iter(vfi, visible_id, &iter, NULL)) | 1722 vficon_find_iter(vf, visible_id, &iter, NULL)) |
1723 { | 1723 { |
1724 tree_view_row_make_visible(GTK_TREE_VIEW(vfi->listview), &iter, FALSE); | 1724 tree_view_row_make_visible(GTK_TREE_VIEW(vf->listview), &iter, FALSE); |
1725 } | 1725 } |
1726 } | 1726 } |
1727 | 1727 |
1728 vfi->rows = row + 1; | 1728 VFICON_INFO(vf, rows) = row + 1; |
1729 | 1729 |
1730 vficon_send_update(vfi); | 1730 vficon_send_update(vf); |
1731 vficon_thumb_update(vfi); | 1731 vficon_thumb_update(vf); |
1732 } | 1732 } |
1733 | 1733 |
1734 static void vficon_populate_at_new_size(ViewFileIcon *vfi, gint w, gint h, gint force) | 1734 static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint h, gint force) |
1735 { | 1735 { |
1736 gint new_cols; | 1736 gint new_cols; |
1737 gint thumb_width; | 1737 gint thumb_width; |
1738 | 1738 |
1739 thumb_width = vficon_get_icon_width(vfi); | 1739 thumb_width = vficon_get_icon_width(vf); |
1740 | 1740 |
1741 new_cols = w / (thumb_width + (THUMB_BORDER_PADDING * 6)); | 1741 new_cols = w / (thumb_width + (THUMB_BORDER_PADDING * 6)); |
1742 if (new_cols < 1) new_cols = 1; | 1742 if (new_cols < 1) new_cols = 1; |
1743 | 1743 |
1744 if (!force && new_cols == vfi->columns) return; | 1744 if (!force && new_cols == VFICON_INFO(vf, columns)) return; |
1745 | 1745 |
1746 vfi->columns = new_cols; | 1746 VFICON_INFO(vf, columns) = new_cols; |
1747 | 1747 |
1748 vficon_populate(vfi, TRUE, TRUE); | 1748 vficon_populate(vf, TRUE, TRUE); |
1749 | 1749 |
1750 DEBUG_1("col tab pop cols=%d rows=%d", vfi->columns, vfi->rows); | 1750 DEBUG_1("col tab pop cols=%d rows=%d", VFICON_INFO(vf, columns), VFICON_INFO(vf, rows)); |
1751 } | 1751 } |
1752 | 1752 |
1753 static void vficon_sync(ViewFileIcon *vfi) | 1753 static void vficon_sync(ViewFile *vf) |
1754 { | 1754 { |
1755 GtkTreeModel *store; | 1755 GtkTreeModel *store; |
1756 GtkTreeIter iter; | 1756 GtkTreeIter iter; |
1757 GList *work; | 1757 GList *work; |
1758 gint r, c; | 1758 gint r, c; |
1759 | 1759 |
1760 if (vfi->rows == 0) return; | 1760 if (VFICON_INFO(vf, rows) == 0) return; |
1761 | 1761 |
1762 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 1762 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
1763 | 1763 |
1764 r = -1; | 1764 r = -1; |
1765 c = 0; | 1765 c = 0; |
1766 | 1766 |
1767 work = vfi->list; | 1767 work = vf->list; |
1768 while (work) | 1768 while (work) |
1769 { | 1769 { |
1770 GList *list; | 1770 GList *list; |
1771 r++; | 1771 r++; |
1772 c = 0; | 1772 c = 0; |
1775 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); | 1775 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); |
1776 gtk_list_store_set(GTK_LIST_STORE(store), &iter, FILE_COLUMN_POINTER, list, -1); | 1776 gtk_list_store_set(GTK_LIST_STORE(store), &iter, FILE_COLUMN_POINTER, list, -1); |
1777 } | 1777 } |
1778 else | 1778 else |
1779 { | 1779 { |
1780 list = vficon_add_row(vfi, &iter); | 1780 list = vficon_add_row(vf, &iter); |
1781 } | 1781 } |
1782 | 1782 |
1783 while (list) | 1783 while (list) |
1784 { | 1784 { |
1785 IconData *id; | 1785 IconData *id; |
1810 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); | 1810 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); |
1811 gtk_list_store_remove(GTK_LIST_STORE(store), &iter); | 1811 gtk_list_store_remove(GTK_LIST_STORE(store), &iter); |
1812 g_list_free(list); | 1812 g_list_free(list); |
1813 } | 1813 } |
1814 | 1814 |
1815 vfi->rows = r; | 1815 VFICON_INFO(vf, rows) = r; |
1816 | 1816 |
1817 vficon_update_focus(vfi); | 1817 vficon_update_focus(vf); |
1818 } | 1818 } |
1819 | 1819 |
1820 static gint vficon_sync_idle_cb(gpointer data) | 1820 static gint vficon_sync_idle_cb(gpointer data) |
1821 { | 1821 { |
1822 ViewFileIcon *vfi = data; | 1822 ViewFile *vf = data; |
1823 | 1823 |
1824 if (vfi->sync_idle_id == -1) return FALSE; | 1824 if (VFICON_INFO(vf, sync_idle_id) == -1) return FALSE; |
1825 vfi->sync_idle_id = -1; | 1825 VFICON_INFO(vf, sync_idle_id) = -1; |
1826 | 1826 |
1827 vficon_sync(vfi); | 1827 vficon_sync(vf); |
1828 return FALSE; | 1828 return FALSE; |
1829 } | 1829 } |
1830 | 1830 |
1831 static void vficon_sync_idle(ViewFileIcon *vfi) | 1831 static void vficon_sync_idle(ViewFile *vf) |
1832 { | 1832 { |
1833 if (vfi->sync_idle_id == -1) | 1833 if (VFICON_INFO(vf, sync_idle_id) == -1) |
1834 { | 1834 { |
1835 /* high priority, the view needs to be resynced before a redraw | 1835 /* high priority, the view needs to be resynced before a redraw |
1836 * may contain invalid pointers at this time | 1836 * may contain invalid pointers at this time |
1837 */ | 1837 */ |
1838 vfi->sync_idle_id = g_idle_add_full(G_PRIORITY_HIGH, vficon_sync_idle_cb, vfi, NULL); | 1838 VFICON_INFO(vf, sync_idle_id) = g_idle_add_full(G_PRIORITY_HIGH, vficon_sync_idle_cb, vf, NULL); |
1839 } | 1839 } |
1840 } | 1840 } |
1841 | 1841 |
1842 static void vficon_sized_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data) | 1842 static void vficon_sized_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data) |
1843 { | 1843 { |
1844 ViewFileIcon *vfi = data; | 1844 ViewFile *vf = data; |
1845 | 1845 |
1846 vficon_populate_at_new_size(vfi, allocation->width, allocation->height, FALSE); | 1846 vficon_populate_at_new_size(vf, allocation->width, allocation->height, FALSE); |
1847 } | 1847 } |
1848 | 1848 |
1849 /* | 1849 /* |
1850 *----------------------------------------------------------------------------- | 1850 *----------------------------------------------------------------------------- |
1851 * misc | 1851 * misc |
1852 *----------------------------------------------------------------------------- | 1852 *----------------------------------------------------------------------------- |
1853 */ | 1853 */ |
1854 | 1854 |
1855 void vficon_sort_set(ViewFileIcon *vfi, SortType type, gint ascend) | 1855 void vficon_sort_set(ViewFile *vf, SortType type, gint ascend) |
1856 { | 1856 { |
1857 if (vfi->sort_method == type && vfi->sort_ascend == ascend) return; | 1857 if (vf->sort_method == type && vf->sort_ascend == ascend) return; |
1858 | 1858 |
1859 vfi->sort_method = type; | 1859 vf->sort_method = type; |
1860 vfi->sort_ascend = ascend; | 1860 vf->sort_ascend = ascend; |
1861 | 1861 |
1862 if (!vfi->list) return; | 1862 if (!vf->list) return; |
1863 | 1863 |
1864 vfi->list = iconlist_sort(vfi->list, vfi->sort_method, vfi->sort_ascend); | 1864 vf->list = iconlist_sort(vf->list, vf->sort_method, vf->sort_ascend); |
1865 vficon_sync(vfi); | 1865 vficon_sync(vf); |
1866 } | 1866 } |
1867 | 1867 |
1868 /* | 1868 /* |
1869 *----------------------------------------------------------------------------- | 1869 *----------------------------------------------------------------------------- |
1870 * thumb updates | 1870 * thumb updates |
1871 *----------------------------------------------------------------------------- | 1871 *----------------------------------------------------------------------------- |
1872 */ | 1872 */ |
1873 | 1873 |
1874 static gint vficon_thumb_next(ViewFileIcon *vfi); | 1874 static gint vficon_thumb_next(ViewFile *vf); |
1875 | 1875 |
1876 static void vficon_thumb_status(ViewFileIcon *vfi, gdouble val, const gchar *text) | 1876 static void vficon_thumb_status(ViewFile *vf, gdouble val, const gchar *text) |
1877 { | 1877 { |
1878 if (vfi->func_thumb_status) | 1878 if (vf->func_thumb_status) |
1879 { | 1879 { |
1880 vfi->func_thumb_status(vfi, val, text, vfi->data_thumb_status); | 1880 vf->func_thumb_status(vf, val, text, vf->data_thumb_status); |
1881 } | 1881 } |
1882 } | 1882 } |
1883 | 1883 |
1884 static void vficon_thumb_cleanup(ViewFileIcon *vfi) | 1884 static void vficon_thumb_cleanup(ViewFile *vf) |
1885 { | 1885 { |
1886 vficon_thumb_status(vfi, 0.0, NULL); | 1886 vficon_thumb_status(vf, 0.0, NULL); |
1887 | 1887 |
1888 vfi->thumbs_count = 0; | 1888 vf->thumbs_count = 0; |
1889 vfi->thumbs_running = FALSE; | 1889 vf->thumbs_running = FALSE; |
1890 | 1890 |
1891 thumb_loader_free(vfi->thumbs_loader); | 1891 thumb_loader_free(vf->thumbs_loader); |
1892 vfi->thumbs_loader = NULL; | 1892 vf->thumbs_loader = NULL; |
1893 | 1893 |
1894 vfi->thumbs_filedata = NULL; | 1894 vf->thumbs_filedata = NULL; |
1895 } | 1895 } |
1896 | 1896 |
1897 static void vficon_thumb_stop(ViewFileIcon *vfi) | 1897 static void vficon_thumb_stop(ViewFile *vf) |
1898 { | 1898 { |
1899 if (vfi->thumbs_running) vficon_thumb_cleanup(vfi); | 1899 if (vf->thumbs_running) vficon_thumb_cleanup(vf); |
1900 } | 1900 } |
1901 | 1901 |
1902 static void vficon_thumb_do(ViewFileIcon *vfi, ThumbLoader *tl, FileData *fd) | 1902 static void vficon_thumb_do(ViewFile *vf, ThumbLoader *tl, FileData *fd) |
1903 { | 1903 { |
1904 GdkPixbuf *pixbuf; | 1904 GdkPixbuf *pixbuf; |
1905 | 1905 |
1906 if (!fd) return; | 1906 if (!fd) return; |
1907 | 1907 |
1908 pixbuf = thumb_loader_get_pixbuf(tl, TRUE); | 1908 pixbuf = thumb_loader_get_pixbuf(tl, TRUE); |
1909 vficon_set_thumb(vfi, fd, pixbuf); | 1909 vficon_set_thumb(vf, fd, pixbuf); |
1910 g_object_unref(pixbuf); | 1910 g_object_unref(pixbuf); |
1911 | 1911 |
1912 vficon_thumb_status(vfi, (gdouble)(vfi->thumbs_count) / g_list_length(vfi->list), _("Loading thumbs...")); | 1912 vficon_thumb_status(vf, (gdouble)(vf->thumbs_count) / g_list_length(vf->list), _("Loading thumbs...")); |
1913 } | 1913 } |
1914 | 1914 |
1915 static void vficon_thumb_error_cb(ThumbLoader *tl, gpointer data) | 1915 static void vficon_thumb_error_cb(ThumbLoader *tl, gpointer data) |
1916 { | 1916 { |
1917 ViewFileIcon *vfi = data; | 1917 ViewFile *vf = data; |
1918 | 1918 |
1919 if (vfi->thumbs_filedata && vfi->thumbs_loader == tl) | 1919 if (vf->thumbs_filedata && vf->thumbs_loader == tl) |
1920 { | 1920 { |
1921 vficon_thumb_do(vfi, tl, vfi->thumbs_filedata); | 1921 vficon_thumb_do(vf, tl, vf->thumbs_filedata); |
1922 } | 1922 } |
1923 | 1923 |
1924 while (vficon_thumb_next(vfi)); | 1924 while (vficon_thumb_next(vf)); |
1925 } | 1925 } |
1926 | 1926 |
1927 static void vficon_thumb_done_cb(ThumbLoader *tl, gpointer data) | 1927 static void vficon_thumb_done_cb(ThumbLoader *tl, gpointer data) |
1928 { | 1928 { |
1929 ViewFileIcon *vfi = data; | 1929 ViewFile *vf = data; |
1930 | 1930 |
1931 if (vfi->thumbs_filedata && vfi->thumbs_loader == tl) | 1931 if (vf->thumbs_filedata && vf->thumbs_loader == tl) |
1932 { | 1932 { |
1933 vficon_thumb_do(vfi, tl, vfi->thumbs_filedata); | 1933 vficon_thumb_do(vf, tl, vf->thumbs_filedata); |
1934 } | 1934 } |
1935 | 1935 |
1936 while (vficon_thumb_next(vfi)); | 1936 while (vficon_thumb_next(vf)); |
1937 } | 1937 } |
1938 | 1938 |
1939 static gint vficon_thumb_next(ViewFileIcon *vfi) | 1939 static gint vficon_thumb_next(ViewFile *vf) |
1940 { | 1940 { |
1941 GtkTreePath *tpath; | 1941 GtkTreePath *tpath; |
1942 FileData *fd = NULL; | 1942 FileData *fd = NULL; |
1943 | 1943 |
1944 if (!GTK_WIDGET_REALIZED(vfi->listview)) | 1944 if (!GTK_WIDGET_REALIZED(vf->listview)) |
1945 { | 1945 { |
1946 vficon_thumb_status(vfi, 0.0, NULL); | 1946 vficon_thumb_status(vf, 0.0, NULL); |
1947 return FALSE; | 1947 return FALSE; |
1948 } | 1948 } |
1949 | 1949 |
1950 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vfi->listview), 0, 0, &tpath, NULL, NULL, NULL)) | 1950 if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL)) |
1951 { | 1951 { |
1952 GtkTreeModel *store; | 1952 GtkTreeModel *store; |
1953 GtkTreeIter iter; | 1953 GtkTreeIter iter; |
1954 gint valid = TRUE; | 1954 gint valid = TRUE; |
1955 | 1955 |
1956 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 1956 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
1957 gtk_tree_model_get_iter(store, &iter, tpath); | 1957 gtk_tree_model_get_iter(store, &iter, tpath); |
1958 gtk_tree_path_free(tpath); | 1958 gtk_tree_path_free(tpath); |
1959 | 1959 |
1960 while (!fd && valid && tree_view_row_get_visibility(GTK_TREE_VIEW(vfi->listview), &iter, FALSE) == 0) | 1960 while (!fd && valid && tree_view_row_get_visibility(GTK_TREE_VIEW(vf->listview), &iter, FALSE) == 0) |
1961 { | 1961 { |
1962 GList *list; | 1962 GList *list; |
1963 | 1963 |
1964 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); | 1964 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); |
1965 | 1965 |
1976 | 1976 |
1977 /* then find first undone */ | 1977 /* then find first undone */ |
1978 | 1978 |
1979 if (!fd) | 1979 if (!fd) |
1980 { | 1980 { |
1981 GList *work = vfi->list; | 1981 GList *work = vf->list; |
1982 while (work && !fd) | 1982 while (work && !fd) |
1983 { | 1983 { |
1984 IconData *id = work->data; | 1984 IconData *id = work->data; |
1985 FileData *fd_p = id->fd; | 1985 FileData *fd_p = id->fd; |
1986 work = work->next; | 1986 work = work->next; |
1990 } | 1990 } |
1991 | 1991 |
1992 if (!fd) | 1992 if (!fd) |
1993 { | 1993 { |
1994 /* done */ | 1994 /* done */ |
1995 vficon_thumb_cleanup(vfi); | 1995 vficon_thumb_cleanup(vf); |
1996 return FALSE; | 1996 return FALSE; |
1997 } | 1997 } |
1998 | 1998 |
1999 vfi->thumbs_count++; | 1999 vf->thumbs_count++; |
2000 | 2000 |
2001 vfi->thumbs_filedata = fd; | 2001 vf->thumbs_filedata = fd; |
2002 | 2002 |
2003 thumb_loader_free(vfi->thumbs_loader); | 2003 thumb_loader_free(vf->thumbs_loader); |
2004 | 2004 |
2005 vfi->thumbs_loader = thumb_loader_new(options->thumbnails.max_width, options->thumbnails.max_height); | 2005 vf->thumbs_loader = thumb_loader_new(options->thumbnails.max_width, options->thumbnails.max_height); |
2006 thumb_loader_set_callbacks(vfi->thumbs_loader, | 2006 thumb_loader_set_callbacks(vf->thumbs_loader, |
2007 vficon_thumb_done_cb, | 2007 vficon_thumb_done_cb, |
2008 vficon_thumb_error_cb, | 2008 vficon_thumb_error_cb, |
2009 NULL, | 2009 NULL, |
2010 vfi); | 2010 vf); |
2011 | 2011 |
2012 if (!thumb_loader_start(vfi->thumbs_loader, fd->path)) | 2012 if (!thumb_loader_start(vf->thumbs_loader, fd->path)) |
2013 { | 2013 { |
2014 /* set icon to unknown, continue */ | 2014 /* set icon to unknown, continue */ |
2015 DEBUG_1("thumb loader start failed %s", vfi->thumbs_loader->path); | 2015 DEBUG_1("thumb loader start failed %s", vf->thumbs_loader->path); |
2016 vficon_thumb_do(vfi, vfi->thumbs_loader, fd); | 2016 vficon_thumb_do(vf, vf->thumbs_loader, fd); |
2017 | 2017 |
2018 return TRUE; | 2018 return TRUE; |
2019 } | 2019 } |
2020 | 2020 |
2021 return FALSE; | 2021 return FALSE; |
2022 } | 2022 } |
2023 | 2023 |
2024 static void vficon_thumb_update(ViewFileIcon *vfi) | 2024 static void vficon_thumb_update(ViewFile *vf) |
2025 { | 2025 { |
2026 vficon_thumb_stop(vfi); | 2026 vficon_thumb_stop(vf); |
2027 | 2027 |
2028 vficon_thumb_status(vfi, 0.0, _("Loading thumbs...")); | 2028 vficon_thumb_status(vf, 0.0, _("Loading thumbs...")); |
2029 vfi->thumbs_running = TRUE; | 2029 vf->thumbs_running = TRUE; |
2030 | 2030 |
2031 while (vficon_thumb_next(vfi)); | 2031 while (vficon_thumb_next(vf)); |
2032 } | 2032 } |
2033 | 2033 |
2034 /* | 2034 /* |
2035 *----------------------------------------------------------------------------- | 2035 *----------------------------------------------------------------------------- |
2036 * row stuff | 2036 * row stuff |
2037 *----------------------------------------------------------------------------- | 2037 *----------------------------------------------------------------------------- |
2038 */ | 2038 */ |
2039 | 2039 |
2040 FileData *vficon_index_get_data(ViewFileIcon *vfi, gint row) | 2040 FileData *vficon_index_get_data(ViewFile *vf, gint row) |
2041 { | 2041 { |
2042 IconData *id; | 2042 IconData *id; |
2043 | 2043 |
2044 id = g_list_nth_data(vfi->list, row); | 2044 id = g_list_nth_data(vf->list, row); |
2045 return id ? id->fd : NULL; | 2045 return id ? id->fd : NULL; |
2046 } | 2046 } |
2047 | 2047 |
2048 gchar *vficon_index_get_path(ViewFileIcon *vfi, gint row) | 2048 gchar *vficon_index_get_path(ViewFile *vf, gint row) |
2049 { | 2049 { |
2050 FileData *fd; | 2050 FileData *fd; |
2051 IconData *id; | 2051 IconData *id; |
2052 | 2052 |
2053 id = g_list_nth_data(vfi->list, row); | 2053 id = g_list_nth_data(vf->list, row); |
2054 fd = id ? id->fd : NULL; | 2054 fd = id ? id->fd : NULL; |
2055 | 2055 |
2056 return (fd ? fd->path : NULL); | 2056 return (fd ? fd->path : NULL); |
2057 } | 2057 } |
2058 | 2058 |
2059 gint vficon_index_by_path(ViewFileIcon *vfi, const gchar *path) | 2059 gint vficon_index_by_path(ViewFile *vf, const gchar *path) |
2060 { | 2060 { |
2061 gint p = 0; | 2061 gint p = 0; |
2062 GList *work; | 2062 GList *work; |
2063 | 2063 |
2064 if (!path) return -1; | 2064 if (!path) return -1; |
2065 | 2065 |
2066 work = vfi->list; | 2066 work = vf->list; |
2067 while (work) | 2067 while (work) |
2068 { | 2068 { |
2069 IconData *id = work->data; | 2069 IconData *id = work->data; |
2070 FileData *fd = id->fd; | 2070 FileData *fd = id->fd; |
2071 if (strcmp(path, fd->path) == 0) return p; | 2071 if (strcmp(path, fd->path) == 0) return p; |
2074 } | 2074 } |
2075 | 2075 |
2076 return -1; | 2076 return -1; |
2077 } | 2077 } |
2078 | 2078 |
2079 gint vficon_index_by_fd(ViewFileIcon *vfi, FileData *in_fd) | 2079 gint vficon_index_by_fd(ViewFile *vf, FileData *in_fd) |
2080 { | 2080 { |
2081 gint p = 0; | 2081 gint p = 0; |
2082 GList *work; | 2082 GList *work; |
2083 | 2083 |
2084 if (!in_fd) return -1; | 2084 if (!in_fd) return -1; |
2085 | 2085 |
2086 work = vfi->list; | 2086 work = vf->list; |
2087 while (work) | 2087 while (work) |
2088 { | 2088 { |
2089 IconData *id = work->data; | 2089 IconData *id = work->data; |
2090 FileData *fd = id->fd; | 2090 FileData *fd = id->fd; |
2091 if (fd == in_fd) return p; | 2091 if (fd == in_fd) return p; |
2094 } | 2094 } |
2095 | 2095 |
2096 return -1; | 2096 return -1; |
2097 } | 2097 } |
2098 | 2098 |
2099 static gint vficon_index_by_id(ViewFileIcon *vfi, IconData *in_id) | 2099 static gint vficon_index_by_id(ViewFile *vf, IconData *in_id) |
2100 { | 2100 { |
2101 gint p = 0; | 2101 gint p = 0; |
2102 GList *work; | 2102 GList *work; |
2103 | 2103 |
2104 if (!in_id) return -1; | 2104 if (!in_id) return -1; |
2105 | 2105 |
2106 work = vfi->list; | 2106 work = vf->list; |
2107 while (work) | 2107 while (work) |
2108 { | 2108 { |
2109 IconData *id = work->data; | 2109 IconData *id = work->data; |
2110 if (id == in_id) return p; | 2110 if (id == in_id) return p; |
2111 work = work->next; | 2111 work = work->next; |
2113 } | 2113 } |
2114 | 2114 |
2115 return -1; | 2115 return -1; |
2116 } | 2116 } |
2117 | 2117 |
2118 gint vficon_count(ViewFileIcon *vfi, gint64 *bytes) | 2118 gint vficon_count(ViewFile *vf, gint64 *bytes) |
2119 { | 2119 { |
2120 if (bytes) | 2120 if (bytes) |
2121 { | 2121 { |
2122 gint64 b = 0; | 2122 gint64 b = 0; |
2123 GList *work; | 2123 GList *work; |
2124 | 2124 |
2125 work = vfi->list; | 2125 work = vf->list; |
2126 while (work) | 2126 while (work) |
2127 { | 2127 { |
2128 | 2128 |
2129 IconData *id = work->data; | 2129 IconData *id = work->data; |
2130 FileData *fd = id->fd; | 2130 FileData *fd = id->fd; |
2133 } | 2133 } |
2134 | 2134 |
2135 *bytes = b; | 2135 *bytes = b; |
2136 } | 2136 } |
2137 | 2137 |
2138 return g_list_length(vfi->list); | 2138 return g_list_length(vf->list); |
2139 } | 2139 } |
2140 | 2140 |
2141 GList *vficon_get_list(ViewFileIcon *vfi) | 2141 GList *vficon_get_list(ViewFile *vf) |
2142 { | 2142 { |
2143 GList *list = NULL; | 2143 GList *list = NULL; |
2144 GList *work; | 2144 GList *work; |
2145 | 2145 |
2146 work = vfi->list; | 2146 work = vf->list; |
2147 while (work) | 2147 while (work) |
2148 { | 2148 { |
2149 IconData *id = work->data; | 2149 IconData *id = work->data; |
2150 FileData *fd = id->fd; | 2150 FileData *fd = id->fd; |
2151 work = work->next; | 2151 work = work->next; |
2160 *----------------------------------------------------------------------------- | 2160 *----------------------------------------------------------------------------- |
2161 * | 2161 * |
2162 *----------------------------------------------------------------------------- | 2162 *----------------------------------------------------------------------------- |
2163 */ | 2163 */ |
2164 | 2164 |
2165 static gint vficon_refresh_real(ViewFileIcon *vfi, gint keep_position) | 2165 static gint vficon_refresh_real(ViewFile *vf, gint keep_position) |
2166 { | 2166 { |
2167 gint ret = TRUE; | 2167 gint ret = TRUE; |
2168 GList *old_list; | 2168 GList *old_list; |
2169 GList *work; | 2169 GList *work; |
2170 IconData *focus_id; | 2170 IconData *focus_id; |
2171 | 2171 |
2172 focus_id = vfi->focus_id; | 2172 focus_id = VFICON_INFO(vf, focus_id); |
2173 | 2173 |
2174 old_list = vfi->list; | 2174 old_list = vf->list; |
2175 vfi->list = NULL; | 2175 vf->list = NULL; |
2176 | 2176 |
2177 if (vfi->path) | 2177 if (vf->path) |
2178 { | 2178 { |
2179 ret = iconlist_read(vfi->path, &vfi->list); | 2179 ret = iconlist_read(vf->path, &vf->list); |
2180 } | 2180 } |
2181 | 2181 |
2182 /* check for same files from old_list */ | 2182 /* check for same files from old_list */ |
2183 work = old_list; | 2183 work = old_list; |
2184 while (work) | 2184 while (work) |
2189 GList *needle; | 2189 GList *needle; |
2190 | 2190 |
2191 id = work->data; | 2191 id = work->data; |
2192 fd = id->fd; | 2192 fd = id->fd; |
2193 | 2193 |
2194 needle = vfi->list; | 2194 needle = vf->list; |
2195 while (needle) | 2195 while (needle) |
2196 { | 2196 { |
2197 IconData *idn = needle->data; | 2197 IconData *idn = needle->data; |
2198 FileData *fdn = idn->fd; | 2198 FileData *fdn = idn->fd; |
2199 if (fdn == fd) | 2199 if (fdn == fd) |
2210 } | 2210 } |
2211 | 2211 |
2212 work = work->next; | 2212 work = work->next; |
2213 } | 2213 } |
2214 | 2214 |
2215 vfi->list = iconlist_sort(vfi->list, vfi->sort_method, vfi->sort_ascend); | 2215 vf->list = iconlist_sort(vf->list, vf->sort_method, vf->sort_ascend); |
2216 | 2216 |
2217 work = old_list; | 2217 work = old_list; |
2218 while (work) | 2218 while (work) |
2219 { | 2219 { |
2220 IconData *id = work->data; | 2220 IconData *id = work->data; |
2221 work = work->next; | 2221 work = work->next; |
2222 | 2222 |
2223 if (id == vfi->prev_selection) vfi->prev_selection = NULL; | 2223 if (id == VFICON_INFO(vf, prev_selection)) VFICON_INFO(vf, prev_selection) = NULL; |
2224 if (id == vfi->click_id) vfi->click_id = NULL; | 2224 if (id == VFICON_INFO(vf, click_id)) VFICON_INFO(vf, click_id) = NULL; |
2225 } | 2225 } |
2226 | 2226 |
2227 vficon_populate(vfi, TRUE, keep_position); | 2227 vficon_populate(vf, TRUE, keep_position); |
2228 | 2228 |
2229 /* attempt to keep focus on same icon when refreshing */ | 2229 /* attempt to keep focus on same icon when refreshing */ |
2230 if (focus_id && g_list_find(vfi->list, focus_id)) | 2230 if (focus_id && g_list_find(vf->list, focus_id)) |
2231 { | 2231 { |
2232 vficon_set_focus(vfi, focus_id); | 2232 vficon_set_focus(vf, focus_id); |
2233 } | 2233 } |
2234 | 2234 |
2235 iconlist_free(old_list); | 2235 iconlist_free(old_list); |
2236 | 2236 |
2237 return ret; | 2237 return ret; |
2238 } | 2238 } |
2239 | 2239 |
2240 gint vficon_refresh(ViewFileIcon *vfi) | 2240 gint vficon_refresh(ViewFile *vf) |
2241 { | 2241 { |
2242 return vficon_refresh_real(vfi, TRUE); | 2242 return vficon_refresh_real(vf, TRUE); |
2243 } | 2243 } |
2244 | 2244 |
2245 /* | 2245 /* |
2246 *----------------------------------------------------------------------------- | 2246 *----------------------------------------------------------------------------- |
2247 * draw, etc. | 2247 * draw, etc. |
2249 */ | 2249 */ |
2250 | 2250 |
2251 typedef struct _ColumnData ColumnData; | 2251 typedef struct _ColumnData ColumnData; |
2252 struct _ColumnData | 2252 struct _ColumnData |
2253 { | 2253 { |
2254 ViewFileIcon *vfi; | 2254 ViewFile *vf; |
2255 gint number; | 2255 gint number; |
2256 }; | 2256 }; |
2257 | 2257 |
2258 static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, | 2258 static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, |
2259 GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) | 2259 GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) |
2260 { | 2260 { |
2261 ColumnData *cd = data; | 2261 ColumnData *cd = data; |
2262 ViewFileIcon *vfi; | 2262 ViewFile *vf; |
2263 GtkStyle *style; | 2263 GtkStyle *style; |
2264 GList *list; | 2264 GList *list; |
2265 GdkColor color_fg; | 2265 GdkColor color_fg; |
2266 GdkColor color_bg; | 2266 GdkColor color_bg; |
2267 IconData *id; | 2267 IconData *id; |
2268 | 2268 |
2269 vfi = cd->vfi; | 2269 vf = cd->vf; |
2270 | 2270 |
2271 gtk_tree_model_get(tree_model, iter, FILE_COLUMN_POINTER, &list, -1); | 2271 gtk_tree_model_get(tree_model, iter, FILE_COLUMN_POINTER, &list, -1); |
2272 | 2272 |
2273 id = g_list_nth_data(list, cd->number); | 2273 id = g_list_nth_data(list, cd->number); |
2274 | 2274 |
2275 if (id) g_assert(id->fd->magick == 0x12345678); | 2275 if (id) g_assert(id->fd->magick == 0x12345678); |
2276 | 2276 |
2277 style = gtk_widget_get_style(vfi->listview); | 2277 style = gtk_widget_get_style(vf->listview); |
2278 if (id && id->selected & SELECTION_SELECTED) | 2278 if (id && id->selected & SELECTION_SELECTED) |
2279 { | 2279 { |
2280 memcpy(&color_fg, &style->text[GTK_STATE_SELECTED], sizeof(color_fg)); | 2280 memcpy(&color_fg, &style->text[GTK_STATE_SELECTED], sizeof(color_fg)); |
2281 memcpy(&color_bg, &style->base[GTK_STATE_SELECTED], sizeof(color_bg)); | 2281 memcpy(&color_bg, &style->base[GTK_STATE_SELECTED], sizeof(color_bg)); |
2282 } | 2282 } |
2302 "text", id->fd->name, | 2302 "text", id->fd->name, |
2303 "cell-background-gdk", &color_bg, | 2303 "cell-background-gdk", &color_bg, |
2304 "cell-background-set", TRUE, | 2304 "cell-background-set", TRUE, |
2305 "foreground-gdk", &color_fg, | 2305 "foreground-gdk", &color_fg, |
2306 "foreground-set", TRUE, | 2306 "foreground-set", TRUE, |
2307 "has-focus", (vfi->focus_id == id), NULL); | 2307 "has-focus", (VFICON_INFO(vf, focus_id) == id), NULL); |
2308 } | 2308 } |
2309 else | 2309 else |
2310 { | 2310 { |
2311 g_object_set(cell, "pixbuf", NULL, | 2311 g_object_set(cell, "pixbuf", NULL, |
2312 "text", NULL, | 2312 "text", NULL, |
2315 "has-focus", FALSE, NULL); | 2315 "has-focus", FALSE, NULL); |
2316 } | 2316 } |
2317 } | 2317 } |
2318 } | 2318 } |
2319 | 2319 |
2320 static void vficon_append_column(ViewFileIcon *vfi, gint n) | 2320 static void vficon_append_column(ViewFile *vf, gint n) |
2321 { | 2321 { |
2322 ColumnData *cd; | 2322 ColumnData *cd; |
2323 GtkTreeViewColumn *column; | 2323 GtkTreeViewColumn *column; |
2324 GtkCellRenderer *renderer; | 2324 GtkCellRenderer *renderer; |
2325 | 2325 |
2336 "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL); | 2336 "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL); |
2337 | 2337 |
2338 g_object_set_data(G_OBJECT(column), "column_number", GINT_TO_POINTER(n)); | 2338 g_object_set_data(G_OBJECT(column), "column_number", GINT_TO_POINTER(n)); |
2339 | 2339 |
2340 cd = g_new0(ColumnData, 1); | 2340 cd = g_new0(ColumnData, 1); |
2341 cd->vfi = vfi; | 2341 cd->vf = vf; |
2342 cd->number = n; | 2342 cd->number = n; |
2343 gtk_tree_view_column_set_cell_data_func(column, renderer, vficon_cell_data_cb, cd, g_free); | 2343 gtk_tree_view_column_set_cell_data_func(column, renderer, vficon_cell_data_cb, cd, g_free); |
2344 | 2344 |
2345 gtk_tree_view_append_column(GTK_TREE_VIEW(vfi->listview), column); | 2345 gtk_tree_view_append_column(GTK_TREE_VIEW(vf->listview), column); |
2346 } | 2346 } |
2347 | 2347 |
2348 /* | 2348 /* |
2349 *----------------------------------------------------------------------------- | 2349 *----------------------------------------------------------------------------- |
2350 * base | 2350 * base |
2351 *----------------------------------------------------------------------------- | 2351 *----------------------------------------------------------------------------- |
2352 */ | 2352 */ |
2353 | 2353 |
2354 gint vficon_set_path(ViewFileIcon *vfi, const gchar *path) | 2354 gint vficon_set_path(ViewFile *vf, const gchar *path) |
2355 { | 2355 { |
2356 gint ret; | 2356 gint ret; |
2357 | 2357 |
2358 if (!path) return FALSE; | 2358 if (!path) return FALSE; |
2359 if (vfi->path && strcmp(path, vfi->path) == 0) return TRUE; | 2359 if (vf->path && strcmp(path, vf->path) == 0) return TRUE; |
2360 | 2360 |
2361 g_free(vfi->path); | 2361 g_free(vf->path); |
2362 vfi->path = g_strdup(path); | 2362 vf->path = g_strdup(path); |
2363 | 2363 |
2364 g_list_free(vfi->selection); | 2364 g_list_free(VFICON_INFO(vf, selection)); |
2365 vfi->selection = NULL; | 2365 VFICON_INFO(vf, selection) = NULL; |
2366 | 2366 |
2367 iconlist_free(vfi->list); | 2367 iconlist_free(vf->list); |
2368 vfi->list = NULL; | 2368 vf->list = NULL; |
2369 | 2369 |
2370 /* NOTE: populate will clear the store for us */ | 2370 /* NOTE: populate will clear the store for us */ |
2371 ret = vficon_refresh_real(vfi, FALSE); | 2371 ret = vficon_refresh_real(vf, FALSE); |
2372 | 2372 |
2373 vfi->focus_id = NULL; | 2373 VFICON_INFO(vf, focus_id) = NULL; |
2374 vficon_move_focus(vfi, 0, 0, FALSE); | 2374 vficon_move_focus(vf, 0, 0, FALSE); |
2375 | 2375 |
2376 return ret; | 2376 return ret; |
2377 } | 2377 } |
2378 | 2378 |
2379 void vficon_destroy_cb(GtkWidget *widget, gpointer data) | 2379 void vficon_destroy_cb(GtkWidget *widget, gpointer data) |
2380 { | 2380 { |
2381 ViewFileIcon *vfi = data; | 2381 ViewFile *vf = data; |
2382 | 2382 |
2383 if (vfi->popup) | 2383 if (VFICON_INFO(vf, sync_idle_id) != -1) g_source_remove(VFICON_INFO(vf, sync_idle_id)); |
2384 { | 2384 |
2385 g_signal_handlers_disconnect_matched(G_OBJECT(vfi->popup), G_SIGNAL_MATCH_DATA, | 2385 tip_unschedule(vf); |
2386 0, 0, 0, NULL, vfi); | 2386 |
2387 gtk_widget_destroy(vfi->popup); | 2387 vficon_thumb_cleanup(vf); |
2388 } | 2388 |
2389 | 2389 iconlist_free(vf->list); |
2390 if (vfi->sync_idle_id != -1) g_source_remove(vfi->sync_idle_id); | 2390 g_list_free(VFICON_INFO(vf, selection)); |
2391 | 2391 } |
2392 tip_unschedule(vfi); | 2392 |
2393 | 2393 ViewFile *vficon_new(ViewFile *vf, const gchar *path) |
2394 vficon_thumb_cleanup(vfi); | 2394 { |
2395 | |
2396 g_free(vfi->path); | |
2397 | |
2398 iconlist_free(vfi->list); | |
2399 g_list_free(vfi->selection); | |
2400 g_free(vfi); | |
2401 } | |
2402 | |
2403 ViewFileIcon *vficon_new(const gchar *path) | |
2404 { | |
2405 ViewFileIcon *vfi; | |
2406 GtkListStore *store; | 2395 GtkListStore *store; |
2407 GtkTreeSelection *selection; | 2396 GtkTreeSelection *selection; |
2408 gint i; | 2397 gint i; |
2409 | 2398 |
2410 vfi = g_new0(ViewFileIcon, 1); | 2399 vf->info = g_new0(ViewFileInfoIcon, 1); |
2411 | 2400 |
2412 vfi->path = NULL; | 2401 VFICON_INFO(vf, selection) = NULL; |
2413 vfi->sort_method = SORT_NAME; | 2402 VFICON_INFO(vf, prev_selection) = NULL; |
2414 vfi->sort_ascend = TRUE; | 2403 |
2415 | 2404 VFICON_INFO(vf, tip_window) = NULL; |
2416 vfi->selection = NULL; | 2405 VFICON_INFO(vf, tip_delay_id) = -1; |
2417 vfi->prev_selection = NULL; | 2406 |
2418 | 2407 VFICON_INFO(vf, focus_row) = 0; |
2419 vfi->tip_window = NULL; | 2408 VFICON_INFO(vf, focus_column) = 0; |
2420 vfi->tip_delay_id = -1; | 2409 VFICON_INFO(vf, focus_id) = NULL; |
2421 | 2410 |
2422 vfi->focus_row = 0; | 2411 VFICON_INFO(vf, show_text) = options->show_icon_names; |
2423 vfi->focus_column = 0; | 2412 |
2424 vfi->focus_id = NULL; | 2413 VFICON_INFO(vf, sync_idle_id) = -1; |
2425 | |
2426 vfi->show_text = options->show_icon_names; | |
2427 | |
2428 vfi->sync_idle_id = -1; | |
2429 | |
2430 vfi->popup = NULL; | |
2431 | |
2432 vfi->widget = gtk_scrolled_window_new(NULL, NULL); | |
2433 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(vfi->widget), GTK_SHADOW_IN); | |
2434 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(vfi->widget), | |
2435 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | |
2436 g_signal_connect(G_OBJECT(vfi->widget), "destroy", | |
2437 G_CALLBACK(vficon_destroy_cb), vfi); | |
2438 | 2414 |
2439 store = gtk_list_store_new(1, G_TYPE_POINTER); | 2415 store = gtk_list_store_new(1, G_TYPE_POINTER); |
2440 vfi->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); | 2416 vf->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); |
2441 g_object_unref(store); | 2417 g_object_unref(store); |
2442 | 2418 |
2443 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vfi->listview)); | 2419 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); |
2444 gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_NONE); | 2420 gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_NONE); |
2445 | 2421 |
2446 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(vfi->listview), FALSE); | 2422 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(vf->listview), FALSE); |
2447 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(vfi->listview), FALSE); | 2423 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(vf->listview), FALSE); |
2448 | 2424 |
2449 for (i = 0; i < VFICON_MAX_COLUMNS; i++) | 2425 for (i = 0; i < VFICON_MAX_COLUMNS; i++) |
2450 { | 2426 { |
2451 vficon_append_column(vfi, i); | 2427 vficon_append_column(vf, i); |
2452 } | 2428 } |
2453 | 2429 |
2454 /* zero width column to hide tree view focus, we draw it ourselves */ | 2430 /* zero width column to hide tree view focus, we draw it ourselves */ |
2455 vficon_append_column(vfi, i); | 2431 vficon_append_column(vf, i); |
2456 /* end column to fill white space */ | 2432 /* end column to fill white space */ |
2457 vficon_append_column(vfi, i); | 2433 vficon_append_column(vf, i); |
2458 | 2434 |
2459 g_signal_connect(G_OBJECT(vfi->listview), "size_allocate", | 2435 g_signal_connect(G_OBJECT(vf->listview), "size_allocate", |
2460 G_CALLBACK(vficon_sized_cb), vfi); | 2436 G_CALLBACK(vficon_sized_cb), vf); |
2461 g_signal_connect(G_OBJECT(vfi->listview), "key_press_event", | 2437 |
2462 G_CALLBACK(vficon_press_key_cb), vfi); | 2438 gtk_widget_set_events(vf->listview, GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK | |
2463 | |
2464 gtk_container_add(GTK_CONTAINER(vfi->widget), vfi->listview); | |
2465 gtk_widget_show(vfi->listview); | |
2466 | |
2467 vficon_dnd_init(vfi); | |
2468 | |
2469 gtk_widget_set_events(vfi->listview, GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK | | |
2470 GDK_BUTTON_PRESS_MASK | GDK_LEAVE_NOTIFY_MASK); | 2439 GDK_BUTTON_PRESS_MASK | GDK_LEAVE_NOTIFY_MASK); |
2471 g_signal_connect(G_OBJECT(vfi->listview), "button_press_event", | 2440 |
2472 G_CALLBACK(vficon_press_cb), vfi); | 2441 g_signal_connect(G_OBJECT(vf->listview),"motion_notify_event", |
2473 g_signal_connect(G_OBJECT(vfi->listview), "button_release_event", | 2442 G_CALLBACK(vficon_motion_cb), vf); |
2474 G_CALLBACK(vficon_release_cb), vfi); | 2443 g_signal_connect(G_OBJECT(vf->listview), "leave_notify_event", |
2475 g_signal_connect(G_OBJECT(vfi->listview),"motion_notify_event", | 2444 G_CALLBACK(vficon_leave_cb), vf); |
2476 G_CALLBACK(vficon_motion_cb), vfi); | 2445 |
2477 g_signal_connect(G_OBJECT(vfi->listview), "leave_notify_event", | 2446 /* force VFICON_INFO(vf, columns) to be at least 1 (sane) - this will be corrected in the size_cb */ |
2478 G_CALLBACK(vficon_leave_cb), vfi); | 2447 vficon_populate_at_new_size(vf, 1, 1, FALSE); |
2479 | 2448 |
2480 /* force vfi->columns to be at least 1 (sane) - this will be corrected in the size_cb */ | 2449 return vf; |
2481 vficon_populate_at_new_size(vfi, 1, 1, FALSE); | 2450 } |
2482 | 2451 |
2483 if (path) vficon_set_path(vfi, path); | 2452 void vficon_set_status_func(ViewFile *vf, |
2484 | 2453 void (*func)(ViewFile *vf, gpointer data), gpointer data) |
2485 return vfi; | 2454 { |
2486 } | 2455 vf->func_status = func; |
2487 | 2456 vf->data_status = data; |
2488 void vficon_set_status_func(ViewFileIcon *vfi, | 2457 } |
2489 void (*func)(ViewFileIcon *vfi, gpointer data), gpointer data) | 2458 |
2490 { | 2459 void vficon_set_thumb_status_func(ViewFile *vf, |
2491 vfi->func_status = func; | 2460 void (*func)(ViewFile *vf, gdouble val, const gchar *text, gpointer data), |
2492 vfi->data_status = data; | |
2493 } | |
2494 | |
2495 void vficon_set_thumb_status_func(ViewFileIcon *vfi, | |
2496 void (*func)(ViewFileIcon *vfi, gdouble val, const gchar *text, gpointer data), | |
2497 gpointer data) | 2461 gpointer data) |
2498 { | 2462 { |
2499 vfi->func_thumb_status = func; | 2463 vf->func_thumb_status = func; |
2500 vfi->data_thumb_status = data; | 2464 vf->data_thumb_status = data; |
2501 } | 2465 } |
2502 | 2466 |
2503 void vficon_set_layout(ViewFileIcon *vfi, LayoutWindow *layout) | 2467 void vficon_set_layout(ViewFile *vf, LayoutWindow *layout) |
2504 { | 2468 { |
2505 vfi->layout = layout; | 2469 vf->layout = layout; |
2506 } | 2470 } |
2507 | 2471 |
2508 /* | 2472 /* |
2509 *----------------------------------------------------------------------------- | 2473 *----------------------------------------------------------------------------- |
2510 * maintenance (for rename, move, remove) | 2474 * maintenance (for rename, move, remove) |
2511 *----------------------------------------------------------------------------- | 2475 *----------------------------------------------------------------------------- |
2512 */ | 2476 */ |
2513 | 2477 |
2514 static gint vficon_maint_find_closest(ViewFileIcon *vfi, gint row, gint count, GList *ignore_list) | 2478 static gint vficon_maint_find_closest(ViewFile *vf, gint row, gint count, GList *ignore_list) |
2515 { | 2479 { |
2516 GList *list = NULL; | 2480 GList *list = NULL; |
2517 GList *work; | 2481 GList *work; |
2518 gint rev = row - 1; | 2482 gint rev = row - 1; |
2519 row ++; | 2483 |
2484 row++; | |
2520 | 2485 |
2521 work = ignore_list; | 2486 work = ignore_list; |
2522 while (work) | 2487 while (work) |
2523 { | 2488 { |
2524 FileData *fd = work->data; | 2489 FileData *fd = work->data; |
2525 gint f = vficon_index_by_fd(vfi, work->data); | 2490 gint f = vficon_index_by_fd(vf, work->data); |
2526 g_assert(fd->magick == 0x12345678); | 2491 g_assert(fd->magick == 0x12345678); |
2527 if (f >= 0) list = g_list_prepend(list, GINT_TO_POINTER(f)); | 2492 if (f >= 0) list = g_list_prepend(list, GINT_TO_POINTER(f)); |
2528 work = work->next; | 2493 work = work->next; |
2529 } | 2494 } |
2530 | 2495 |
2565 { | 2530 { |
2566 return row; | 2531 return row; |
2567 } | 2532 } |
2568 } | 2533 } |
2569 | 2534 |
2570 gint vficon_maint_renamed(ViewFileIcon *vfi, FileData *fd) | 2535 gint vficon_maint_renamed(ViewFile *vf, FileData *fd) |
2571 { | 2536 { |
2572 gint ret = FALSE; | 2537 gint ret = FALSE; |
2573 gint row; | 2538 gint row; |
2574 gchar *source_base; | 2539 gchar *source_base; |
2575 gchar *dest_base; | 2540 gchar *dest_base; |
2576 IconData *id = vficon_icon_data(vfi, fd); | 2541 IconData *id = vficon_icon_data(vf, fd); |
2577 | 2542 |
2578 if (!id) return FALSE; | 2543 if (!id) return FALSE; |
2579 | 2544 |
2580 row = vficon_index_by_id(vfi, id); | 2545 row = vficon_index_by_id(vf, id); |
2581 if (row < 0) return FALSE; | 2546 if (row < 0) return FALSE; |
2582 | 2547 |
2583 source_base = remove_level_from_path(fd->change->source); | 2548 source_base = remove_level_from_path(fd->change->source); |
2584 dest_base = remove_level_from_path(fd->change->dest); | 2549 dest_base = remove_level_from_path(fd->change->dest); |
2585 | 2550 |
2586 if (strcmp(source_base, dest_base) == 0) | 2551 if (strcmp(source_base, dest_base) == 0) |
2587 { | 2552 { |
2588 vfi->list = g_list_remove(vfi->list, id); | 2553 vf->list = g_list_remove(vf->list, id); |
2589 vfi->list = iconlist_insert_sort(vfi->list, id, vfi->sort_method, vfi->sort_ascend); | 2554 vf->list = iconlist_insert_sort(vf->list, id, vf->sort_method, vf->sort_ascend); |
2590 | 2555 |
2591 vficon_sync_idle(vfi); | 2556 vficon_sync_idle(vf); |
2592 ret = TRUE; | 2557 ret = TRUE; |
2593 } | 2558 } |
2594 else | 2559 else |
2595 { | 2560 { |
2596 ret = vficon_maint_removed(vfi, fd, NULL); | 2561 ret = vficon_maint_removed(vf, fd, NULL); |
2597 } | 2562 } |
2598 | 2563 |
2599 g_free(source_base); | 2564 g_free(source_base); |
2600 g_free(dest_base); | 2565 g_free(dest_base); |
2601 | 2566 |
2602 return ret; | 2567 return ret; |
2603 } | 2568 } |
2604 | 2569 |
2605 gint vficon_maint_removed(ViewFileIcon *vfi, FileData *fd, GList *ignore_list) | 2570 gint vficon_maint_removed(ViewFile *vf, FileData *fd, GList *ignore_list) |
2606 { | 2571 { |
2607 gint row; | 2572 gint row; |
2608 gint new_row = -1; | 2573 gint new_row = -1; |
2609 GtkTreeModel *store; | 2574 GtkTreeModel *store; |
2610 GtkTreeIter iter; | 2575 GtkTreeIter iter; |
2611 IconData *id = vficon_icon_data(vfi, fd); | 2576 IconData *id = vficon_icon_data(vf, fd); |
2612 | 2577 |
2613 if (!id) return FALSE; | 2578 if (!id) return FALSE; |
2614 | 2579 |
2615 row = g_list_index(vfi->list, id); | 2580 row = g_list_index(vf->list, id); |
2616 if (row < 0) return FALSE; | 2581 if (row < 0) return FALSE; |
2617 | 2582 |
2618 if ((id->selected & SELECTION_SELECTED) && | 2583 if ((id->selected & SELECTION_SELECTED) && |
2619 layout_image_get_collection(vfi->layout, NULL) == NULL) | 2584 layout_image_get_collection(vf->layout, NULL) == NULL) |
2620 { | 2585 { |
2621 vficon_unselect(vfi, id); | 2586 vficon_unselect(vf, id); |
2622 | 2587 |
2623 if (!vfi->selection) | 2588 if (!VFICON_INFO(vf, selection)) |
2624 { | 2589 { |
2625 gint n; | 2590 gint n; |
2626 | 2591 |
2627 n = vficon_count(vfi, NULL); | 2592 n = vficon_count(vf, NULL); |
2628 if (ignore_list) | 2593 if (ignore_list) |
2629 { | 2594 { |
2630 new_row = vficon_maint_find_closest(vfi, row, n, ignore_list); | 2595 new_row = vficon_maint_find_closest(vf, row, n, ignore_list); |
2631 DEBUG_1("row = %d, closest is %d", row, new_row); | 2596 DEBUG_1("row = %d, closest is %d", row, new_row); |
2632 } | 2597 } |
2633 else | 2598 else |
2634 { | 2599 { |
2635 if (row + 1 < n) | 2600 if (row + 1 < n) |
2644 } | 2609 } |
2645 else if (ignore_list) | 2610 else if (ignore_list) |
2646 { | 2611 { |
2647 GList *work; | 2612 GList *work; |
2648 | 2613 |
2649 work = vfi->selection; | 2614 work = VFICON_INFO(vf, selection); |
2650 while (work) | 2615 while (work) |
2651 { | 2616 { |
2652 IconData *ignore_id; | 2617 IconData *ignore_id; |
2653 FileData *ignore_fd; | 2618 FileData *ignore_fd; |
2654 GList *tmp; | 2619 GList *tmp; |
2671 match = TRUE; | 2636 match = TRUE; |
2672 } | 2637 } |
2673 } | 2638 } |
2674 if (!match) | 2639 if (!match) |
2675 { | 2640 { |
2676 new_row = g_list_index(vfi->list, ignore_id); | 2641 new_row = g_list_index(vf->list, ignore_id); |
2677 work = NULL; | 2642 work = NULL; |
2678 } | 2643 } |
2679 } | 2644 } |
2680 if (new_row == -1) | 2645 if (new_row == -1) |
2681 { | 2646 { |
2682 /* selection all ignored, use closest */ | 2647 /* selection all ignored, use closest */ |
2683 new_row = vficon_maint_find_closest(vfi, row, vficon_count(vfi, NULL), ignore_list); | 2648 new_row = vficon_maint_find_closest(vf, row, vficon_count(vf, NULL), ignore_list); |
2684 } | 2649 } |
2685 } | 2650 } |
2686 else | 2651 else |
2687 { | 2652 { |
2688 new_row = g_list_index(vfi->list, vfi->selection->data); | 2653 new_row = g_list_index(vf->list, VFICON_INFO(vf, selection)->data); |
2689 } | 2654 } |
2690 if (new_row >= 0) | 2655 if (new_row >= 0) |
2691 { | 2656 { |
2692 IconData *idn = g_list_nth_data(vfi->list, new_row); | 2657 IconData *idn = g_list_nth_data(vf->list, new_row); |
2693 | 2658 |
2694 vficon_select(vfi, idn); | 2659 vficon_select(vf, idn); |
2695 vficon_send_layout_select(vfi, idn); | 2660 vficon_send_layout_select(vf, idn); |
2696 } | 2661 } |
2697 } | 2662 } |
2698 | 2663 |
2699 /* Thumb loader check */ | 2664 /* Thumb loader check */ |
2700 if (fd == vfi->thumbs_filedata) vfi->thumbs_filedata = NULL; | 2665 if (fd == vf->thumbs_filedata) vf->thumbs_filedata = NULL; |
2701 if (vfi->thumbs_count > 0) vfi->thumbs_count--; | 2666 if (vf->thumbs_count > 0) vf->thumbs_count--; |
2702 | 2667 |
2703 if (vfi->prev_selection == id) vfi->prev_selection = NULL; | 2668 if (VFICON_INFO(vf, prev_selection) == id) VFICON_INFO(vf, prev_selection) = NULL; |
2704 if (vfi->click_id == id) vfi->click_id = NULL; | 2669 if (VFICON_INFO(vf, click_id) == id) VFICON_INFO(vf, click_id) = NULL; |
2705 | 2670 |
2706 /* remove pointer to this fd from grid */ | 2671 /* remove pointer to this fd from grid */ |
2707 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vfi->listview)); | 2672 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); |
2708 if (id->row >= 0 && | 2673 if (id->row >= 0 && |
2709 gtk_tree_model_iter_nth_child(store, &iter, NULL, id->row)) | 2674 gtk_tree_model_iter_nth_child(store, &iter, NULL, id->row)) |
2710 { | 2675 { |
2711 GList *list; | 2676 GList *list; |
2712 | 2677 |
2713 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); | 2678 gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1); |
2714 list = g_list_find(list, id); | 2679 list = g_list_find(list, id); |
2715 if (list) list->data = NULL; | 2680 if (list) list->data = NULL; |
2716 } | 2681 } |
2717 | 2682 |
2718 vfi->list = g_list_remove(vfi->list, id); | 2683 vf->list = g_list_remove(vf->list, id); |
2719 file_data_unref(fd); | 2684 file_data_unref(fd); |
2720 g_free(id); | 2685 g_free(id); |
2721 | 2686 |
2722 vficon_sync_idle(vfi); | 2687 vficon_sync_idle(vf); |
2723 vficon_send_update(vfi); | 2688 vficon_send_update(vf); |
2724 | 2689 |
2725 return TRUE; | 2690 return TRUE; |
2726 } | 2691 } |
2727 | 2692 |
2728 gint vficon_maint_moved(ViewFileIcon *vfi, FileData *fd, GList *ignore_list) | 2693 gint vficon_maint_moved(ViewFile *vf, FileData *fd, GList *ignore_list) |
2729 { | 2694 { |
2730 gint ret = FALSE; | 2695 gint ret = FALSE; |
2731 gchar *buf; | 2696 gchar *buf; |
2732 | 2697 |
2733 if (!fd->change->source || !vfi->path) return FALSE; | 2698 if (!fd->change->source || !vf->path) return FALSE; |
2734 | 2699 |
2735 buf = remove_level_from_path(fd->change->source); | 2700 buf = remove_level_from_path(fd->change->source); |
2736 | 2701 |
2737 if (strcmp(buf, vfi->path) == 0) | 2702 if (strcmp(buf, vf->path) == 0) |
2738 { | 2703 { |
2739 ret = vficon_maint_removed(vfi, fd, ignore_list); | 2704 ret = vficon_maint_removed(vf, fd, ignore_list); |
2740 } | 2705 } |
2741 | 2706 |
2742 g_free(buf); | 2707 g_free(buf); |
2743 | 2708 |
2744 return ret; | 2709 return ret; |