Mercurial > geeqie
comparison src/pan-view.c @ 138:71e1ebee420e
replaced gchar* path with FileData *fd
author | nadvornik |
---|---|
date | Tue, 11 Sep 2007 20:06:29 +0000 |
parents | 50fc73e08550 |
children | 0ca3b4c8ffae |
comparison
equal
deleted
inserted
replaced
137:be3328a58875 | 138:71e1ebee420e |
---|---|
194 thumb_loader_free(pw->tl); | 194 thumb_loader_free(pw->tl); |
195 pw->tl = NULL; | 195 pw->tl = NULL; |
196 | 196 |
197 if (pi->type == PAN_ITEM_IMAGE) | 197 if (pi->type == PAN_ITEM_IMAGE) |
198 { | 198 { |
199 pw->il = image_loader_new(pi->fd->path); | 199 pw->il = image_loader_new(pi->fd); |
200 | 200 |
201 if (pw->size != PAN_IMAGE_SIZE_100) | 201 if (pw->size != PAN_IMAGE_SIZE_100) |
202 { | 202 { |
203 image_loader_set_requested_size(pw->il, pi->width, pi->height); | 203 image_loader_set_requested_size(pw->il, pi->width, pi->height); |
204 } | 204 } |
518 *----------------------------------------------------------------------------- | 518 *----------------------------------------------------------------------------- |
519 * cache | 519 * cache |
520 *----------------------------------------------------------------------------- | 520 *----------------------------------------------------------------------------- |
521 */ | 521 */ |
522 | 522 |
523 static gint pan_cache_sort_file_cb(void *a, void *b) | |
524 { | |
525 PanCacheData *pca = a; | |
526 PanCacheData *pcb = b; | |
527 return filelist_sort_compare_filedata(pca->fd, pcb->fd); | |
528 } | |
529 GList *pan_cache_sort(GList *list, SortType method, gint ascend) | |
530 { | |
531 return filelist_sort_full(list, method, ascend, (GCompareFunc) pan_cache_sort_file_cb); | |
532 } | |
533 | |
534 | |
523 static void pan_cache_free(PanWindow *pw) | 535 static void pan_cache_free(PanWindow *pw) |
524 { | 536 { |
525 GList *work; | 537 GList *work; |
526 | 538 |
527 work = pw->cache_list; | 539 work = pw->cache_list; |
531 | 543 |
532 pc = work->data; | 544 pc = work->data; |
533 work = work->next; | 545 work = work->next; |
534 | 546 |
535 cache_sim_data_free(pc->cd); | 547 cache_sim_data_free(pc->cd); |
536 file_data_free((FileData *)pc); | 548 file_data_unref(pc->fd); |
549 g_free(pc); | |
537 } | 550 } |
538 | 551 |
539 g_list_free(pw->cache_list); | 552 g_list_free(pw->cache_list); |
540 pw->cache_list = NULL; | 553 pw->cache_list = NULL; |
541 | 554 |
610 | 623 |
611 if (!cd) cd = cache_sim_data_new(); | 624 if (!cd) cd = cache_sim_data_new(); |
612 | 625 |
613 if (!cd->dimensions) | 626 if (!cd->dimensions) |
614 { | 627 { |
615 cd->dimensions = image_load_dimensions(fd->path, &cd->width, &cd->height); | 628 cd->dimensions = image_load_dimensions(fd, &cd->width, &cd->height); |
616 if (enable_thumb_caching && | 629 if (enable_thumb_caching && |
617 cd->dimensions) | 630 cd->dimensions) |
618 { | 631 { |
619 gchar *base; | 632 gchar *base; |
620 mode_t mode = 0755; | 633 mode_t mode = 0755; |
634 | 647 |
635 pw->cache_tick = 9; | 648 pw->cache_tick = 9; |
636 } | 649 } |
637 #endif | 650 #endif |
638 pc = g_new0(PanCacheData, 1); | 651 pc = g_new0(PanCacheData, 1); |
639 memcpy(pc, fd, sizeof(FileData)); | 652 pc->fd = file_data_ref(fd); |
640 g_free(fd); | |
641 | 653 |
642 pc->cd = NULL; | 654 pc->cd = NULL; |
643 | 655 |
644 pw->cache_list = g_list_prepend(pw->cache_list, pc); | 656 pw->cache_list = g_list_prepend(pw->cache_list, pc); |
645 | 657 |
646 cache_loader_free(pw->cache_cl); | 658 cache_loader_free(pw->cache_cl); |
647 | 659 |
648 load_mask = CACHE_LOADER_NONE; | 660 load_mask = CACHE_LOADER_NONE; |
649 if (pw->size > PAN_IMAGE_SIZE_THUMB_LARGE) load_mask |= CACHE_LOADER_DIMENSIONS; | 661 if (pw->size > PAN_IMAGE_SIZE_THUMB_LARGE) load_mask |= CACHE_LOADER_DIMENSIONS; |
650 if (pw->exif_date_enable) load_mask |= CACHE_LOADER_DATE; | 662 if (pw->exif_date_enable) load_mask |= CACHE_LOADER_DATE; |
651 pw->cache_cl = cache_loader_new(((FileData *)pc)->path, load_mask, | 663 pw->cache_cl = cache_loader_new(pc->fd, load_mask, |
652 pan_cache_step_done_cb, pw); | 664 pan_cache_step_done_cb, pw); |
653 return (pw->cache_cl == NULL); | 665 return (pw->cache_cl == NULL); |
654 } | 666 } |
655 | 667 |
656 /* This sync date function is optimized for lists with a common sort */ | 668 /* This sync date function is optimized for lists with a common sort */ |
675 { | 687 { |
676 PanCacheData *pc; | 688 PanCacheData *pc; |
677 gchar *path; | 689 gchar *path; |
678 | 690 |
679 pc = needle->data; | 691 pc = needle->data; |
680 path = ((FileData *)pc)->path; | 692 if (pc->fd == fd) |
681 if (path && strcmp(path, fd->path) == 0) | |
682 { | 693 { |
683 if (pc->cd && pc->cd->have_date && pc->cd->date >= 0) | 694 if (pc->cd && pc->cd->have_date && pc->cd->date >= 0) |
684 { | 695 { |
685 fd->date = pc->cd->date; | 696 fd->date = pc->cd->date; |
686 } | 697 } |
1167 *----------------------------------------------------------------------------- | 1178 *----------------------------------------------------------------------------- |
1168 * keyboard handlers | 1179 * keyboard handlers |
1169 *----------------------------------------------------------------------------- | 1180 *----------------------------------------------------------------------------- |
1170 */ | 1181 */ |
1171 | 1182 |
1172 static const gchar *pan_menu_click_path(PanWindow *pw) | 1183 FileData *pan_menu_click_fd(PanWindow *pw) |
1173 { | 1184 { |
1174 if (pw->click_pi && pw->click_pi->fd) return pw->click_pi->fd->path; | 1185 if (pw->click_pi && pw->click_pi->fd) return pw->click_pi->fd; |
1175 return NULL; | 1186 return NULL; |
1176 } | 1187 } |
1177 | 1188 |
1178 static void pan_window_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data) | 1189 static void pan_window_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data) |
1179 { | 1190 { |
1185 | 1196 |
1186 static gint pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) | 1197 static gint pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) |
1187 { | 1198 { |
1188 PanWindow *pw = data; | 1199 PanWindow *pw = data; |
1189 PixbufRenderer *pr; | 1200 PixbufRenderer *pr; |
1190 const gchar *path; | 1201 FileData *fd; |
1191 gint stop_signal = FALSE; | 1202 gint stop_signal = FALSE; |
1192 GtkWidget *menu; | 1203 GtkWidget *menu; |
1193 gint x = 0; | 1204 gint x = 0; |
1194 gint y = 0; | 1205 gint y = 0; |
1195 gint focused; | 1206 gint focused; |
1196 gint on_entry; | 1207 gint on_entry; |
1197 | 1208 |
1198 pr = PIXBUF_RENDERER(pw->imd->pr); | 1209 pr = PIXBUF_RENDERER(pw->imd->pr); |
1199 path = pan_menu_click_path(pw); | 1210 fd = pan_menu_click_fd(pw); |
1200 | 1211 |
1201 focused = (pw->fs || GTK_WIDGET_HAS_FOCUS(GTK_WIDGET(pw->imd->widget))); | 1212 focused = (pw->fs || GTK_WIDGET_HAS_FOCUS(GTK_WIDGET(pw->imd->widget))); |
1202 on_entry = (GTK_WIDGET_HAS_FOCUS(pw->path_entry) || | 1213 on_entry = (GTK_WIDGET_HAS_FOCUS(pw->path_entry) || |
1203 GTK_WIDGET_HAS_FOCUS(pw->search_entry)); | 1214 GTK_WIDGET_HAS_FOCUS(pw->search_entry)); |
1204 | 1215 |
1286 break; | 1297 break; |
1287 case '0': | 1298 case '0': |
1288 n = 9; | 1299 n = 9; |
1289 break; | 1300 break; |
1290 case 'C': case 'c': | 1301 case 'C': case 'c': |
1291 if (path) file_util_copy(path, NULL, NULL, GTK_WIDGET(pr)); | 1302 if (fd) file_util_copy(fd, NULL, NULL, GTK_WIDGET(pr)); |
1292 break; | 1303 break; |
1293 case 'M': case 'm': | 1304 case 'M': case 'm': |
1294 if (path) file_util_move(path, NULL, NULL, GTK_WIDGET(pr)); | 1305 if (fd) file_util_move(fd, NULL, NULL, GTK_WIDGET(pr)); |
1295 break; | 1306 break; |
1296 case 'R': case 'r': | 1307 case 'R': case 'r': |
1297 if (path) file_util_rename(path, NULL, GTK_WIDGET(pr)); | 1308 if (fd) file_util_rename(fd, NULL, GTK_WIDGET(pr)); |
1298 break; | 1309 break; |
1299 case 'D': case 'd': | 1310 case 'D': case 'd': |
1300 if (path) file_util_delete(path, NULL, GTK_WIDGET(pr)); | 1311 if (fd) file_util_delete(fd, NULL, GTK_WIDGET(pr)); |
1301 break; | 1312 break; |
1302 case 'P': case 'p': | 1313 case 'P': case 'p': |
1303 if (path) info_window_new(path, NULL); | 1314 if (fd) info_window_new(fd, NULL); |
1304 break; | 1315 break; |
1305 case 'F': case 'f': | 1316 case 'F': case 'f': |
1306 pan_search_toggle_visible(pw, TRUE); | 1317 pan_search_toggle_visible(pw, TRUE); |
1307 break; | 1318 break; |
1308 case 'G': case 'g': | 1319 case 'G': case 'g': |
1314 default: | 1325 default: |
1315 stop_signal = FALSE; | 1326 stop_signal = FALSE; |
1316 break; | 1327 break; |
1317 } | 1328 } |
1318 | 1329 |
1319 if (n != -1 && path) | 1330 if (n != -1 && fd) |
1320 { | 1331 { |
1321 if (!editor_window_flag_set(n)) | 1332 if (!editor_window_flag_set(n)) |
1322 { | 1333 { |
1323 pan_fullscreen_toggle(pw, TRUE); | 1334 pan_fullscreen_toggle(pw, TRUE); |
1324 } | 1335 } |
1325 start_editor_from_file(n, path); | 1336 start_editor_from_file(n, fd); |
1326 } | 1337 } |
1327 } | 1338 } |
1328 else | 1339 else |
1329 { | 1340 { |
1330 stop_signal = TRUE; | 1341 stop_signal = TRUE; |
1421 ExifData *exif; | 1432 ExifData *exif; |
1422 GList *work; | 1433 GList *work; |
1423 gint i; | 1434 gint i; |
1424 | 1435 |
1425 if (!fd) return; | 1436 if (!fd) return; |
1426 exif = exif_read(fd->path, FALSE); | 1437 exif = exif_read(fd, FALSE); |
1427 if (!exif) return; | 1438 if (!exif) return; |
1428 | 1439 |
1429 pan_text_alignment_add(ta, NULL, NULL); | 1440 pan_text_alignment_add(ta, NULL, NULL); |
1430 | 1441 |
1431 for (i = 0; i < bar_exif_key_count; i++) | 1442 for (i = 0; i < bar_exif_key_count; i++) |
1539 pan_item_added(pw, pbox); | 1550 pan_item_added(pw, pbox); |
1540 | 1551 |
1541 if (pw->info_image_size > PAN_IMAGE_SIZE_THUMB_NONE) | 1552 if (pw->info_image_size > PAN_IMAGE_SIZE_THUMB_NONE) |
1542 { | 1553 { |
1543 gint iw, ih; | 1554 gint iw, ih; |
1544 if (image_load_dimensions(pi->fd->path, &iw, &ih)) | 1555 if (image_load_dimensions(pi->fd, &iw, &ih)) |
1545 { | 1556 { |
1546 gint scale = 25; | 1557 gint scale = 25; |
1547 | 1558 |
1548 switch (pw->info_image_size) | 1559 switch (pw->info_image_size) |
1549 { | 1560 { |
2623 | 2634 |
2624 | 2635 |
2625 static void pan_new_window_cb(GtkWidget *widget, gpointer data) | 2636 static void pan_new_window_cb(GtkWidget *widget, gpointer data) |
2626 { | 2637 { |
2627 PanWindow *pw = data; | 2638 PanWindow *pw = data; |
2628 const gchar *path; | 2639 FileData *fd; |
2629 | 2640 |
2630 path = pan_menu_click_path(pw); | 2641 fd = pan_menu_click_fd(pw); |
2631 if (path) | 2642 if (fd) |
2632 { | 2643 { |
2633 pan_fullscreen_toggle(pw, TRUE); | 2644 pan_fullscreen_toggle(pw, TRUE); |
2634 view_window_new(path); | 2645 view_window_new(fd); |
2635 } | 2646 } |
2636 } | 2647 } |
2637 | 2648 |
2638 static void pan_edit_cb(GtkWidget *widget, gpointer data) | 2649 static void pan_edit_cb(GtkWidget *widget, gpointer data) |
2639 { | 2650 { |
2640 PanWindow *pw; | 2651 PanWindow *pw; |
2641 const gchar *path; | 2652 FileData *fd; |
2642 gint n; | 2653 gint n; |
2643 | 2654 |
2644 pw = submenu_item_get_data(widget); | 2655 pw = submenu_item_get_data(widget); |
2645 n = GPOINTER_TO_INT(data); | 2656 n = GPOINTER_TO_INT(data); |
2646 if (!pw) return; | 2657 if (!pw) return; |
2647 | 2658 |
2648 path = pan_menu_click_path(pw); | 2659 fd = pan_menu_click_fd(pw); |
2649 if (path) | 2660 if (fd) |
2650 { | 2661 { |
2651 if (!editor_window_flag_set(n)) | 2662 if (!editor_window_flag_set(n)) |
2652 { | 2663 { |
2653 pan_fullscreen_toggle(pw, TRUE); | 2664 pan_fullscreen_toggle(pw, TRUE); |
2654 } | 2665 } |
2655 start_editor_from_file(n, path); | 2666 start_editor_from_file(n, fd); |
2656 } | 2667 } |
2657 } | 2668 } |
2658 | 2669 |
2659 static void pan_info_cb(GtkWidget *widget, gpointer data) | 2670 static void pan_info_cb(GtkWidget *widget, gpointer data) |
2660 { | 2671 { |
2661 PanWindow *pw = data; | 2672 PanWindow *pw = data; |
2662 const gchar *path; | 2673 FileData *fd; |
2663 | 2674 |
2664 path = pan_menu_click_path(pw); | 2675 fd = pan_menu_click_fd(pw); |
2665 if (path) info_window_new(path, NULL); | 2676 if (fd) info_window_new(fd, NULL); |
2666 } | 2677 } |
2667 | 2678 |
2668 static void pan_zoom_in_cb(GtkWidget *widget, gpointer data) | 2679 static void pan_zoom_in_cb(GtkWidget *widget, gpointer data) |
2669 { | 2680 { |
2670 PanWindow *pw = data; | 2681 PanWindow *pw = data; |
2687 } | 2698 } |
2688 | 2699 |
2689 static void pan_copy_cb(GtkWidget *widget, gpointer data) | 2700 static void pan_copy_cb(GtkWidget *widget, gpointer data) |
2690 { | 2701 { |
2691 PanWindow *pw = data; | 2702 PanWindow *pw = data; |
2692 const gchar *path; | 2703 FileData *fd; |
2693 | 2704 |
2694 path = pan_menu_click_path(pw); | 2705 fd = pan_menu_click_fd(pw); |
2695 if (path) file_util_copy(path, NULL, NULL, pw->imd->widget); | 2706 if (fd) file_util_copy(fd, NULL, NULL, pw->imd->widget); |
2696 } | 2707 } |
2697 | 2708 |
2698 static void pan_move_cb(GtkWidget *widget, gpointer data) | 2709 static void pan_move_cb(GtkWidget *widget, gpointer data) |
2699 { | 2710 { |
2700 PanWindow *pw = data; | 2711 PanWindow *pw = data; |
2701 const gchar *path; | 2712 FileData *fd; |
2702 | 2713 |
2703 path = pan_menu_click_path(pw); | 2714 fd = pan_menu_click_fd(pw); |
2704 if (path) file_util_move(path, NULL, NULL, pw->imd->widget); | 2715 if (fd) file_util_move(fd, NULL, NULL, pw->imd->widget); |
2705 } | 2716 } |
2706 | 2717 |
2707 static void pan_rename_cb(GtkWidget *widget, gpointer data) | 2718 static void pan_rename_cb(GtkWidget *widget, gpointer data) |
2708 { | 2719 { |
2709 PanWindow *pw = data; | 2720 PanWindow *pw = data; |
2710 const gchar *path; | 2721 FileData *fd; |
2711 | 2722 |
2712 path = pan_menu_click_path(pw); | 2723 fd = pan_menu_click_fd(pw); |
2713 if (path) file_util_rename(path, NULL, pw->imd->widget); | 2724 if (fd) file_util_rename(fd, NULL, pw->imd->widget); |
2714 } | 2725 } |
2715 | 2726 |
2716 static void pan_delete_cb(GtkWidget *widget, gpointer data) | 2727 static void pan_delete_cb(GtkWidget *widget, gpointer data) |
2717 { | 2728 { |
2718 PanWindow *pw = data; | 2729 PanWindow *pw = data; |
2719 const gchar *path; | 2730 FileData *fd; |
2720 | 2731 |
2721 path = pan_menu_click_path(pw); | 2732 fd = pan_menu_click_fd(pw); |
2722 if (path) file_util_delete(path, NULL, pw->imd->widget); | 2733 if (fd) file_util_delete(fd, NULL, pw->imd->widget); |
2723 } | 2734 } |
2724 | 2735 |
2725 static void pan_exif_date_toggle_cb(GtkWidget *widget, gpointer data) | 2736 static void pan_exif_date_toggle_cb(GtkWidget *widget, gpointer data) |
2726 { | 2737 { |
2727 PanWindow *pw = data; | 2738 PanWindow *pw = data; |
2872 | 2883 |
2873 if (info == TARGET_URI_LIST) | 2884 if (info == TARGET_URI_LIST) |
2874 { | 2885 { |
2875 GList *list; | 2886 GList *list; |
2876 | 2887 |
2877 list = uri_list_from_text((gchar *)selection_data->data, TRUE); | 2888 list = uri_filelist_from_text((gchar *)selection_data->data, TRUE); |
2878 if (list && isdir((gchar *)list->data)) | 2889 if (list && isdir(((FileData *)list->data)->path)) |
2879 { | 2890 { |
2880 gchar *path = list->data; | 2891 FileData *fd = list->data; |
2881 | 2892 |
2882 pan_layout_set_path(pw, path); | 2893 pan_layout_set_path(pw, fd->path); |
2883 } | 2894 } |
2884 | 2895 |
2885 path_list_free(list); | 2896 filelist_free(list); |
2886 } | 2897 } |
2887 } | 2898 } |
2888 | 2899 |
2889 static void pan_window_set_dnd_data(GtkWidget *widget, GdkDragContext *context, | 2900 static void pan_window_set_dnd_data(GtkWidget *widget, GdkDragContext *context, |
2890 GtkSelectionData *selection_data, guint info, | 2901 GtkSelectionData *selection_data, guint info, |
2891 guint time, gpointer data) | 2902 guint time, gpointer data) |
2892 { | 2903 { |
2893 PanWindow *pw = data; | 2904 PanWindow *pw = data; |
2894 const gchar *path; | 2905 FileData *fd; |
2895 | 2906 |
2896 path = pan_menu_click_path(pw); | 2907 fd = pan_menu_click_fd(pw); |
2897 if (path) | 2908 if (fd) |
2898 { | 2909 { |
2899 gchar *text = NULL; | 2910 gchar *text = NULL; |
2900 gint len; | 2911 gint len; |
2901 gint plain_text; | 2912 gint plain_text; |
2902 GList *list; | 2913 GList *list; |
2909 case TARGET_TEXT_PLAIN: | 2920 case TARGET_TEXT_PLAIN: |
2910 default: | 2921 default: |
2911 plain_text = TRUE; | 2922 plain_text = TRUE; |
2912 break; | 2923 break; |
2913 } | 2924 } |
2914 list = g_list_append(NULL, (gchar *)path); | 2925 list = g_list_append(NULL, fd); |
2915 text = uri_text_from_list(list, &len, plain_text); | 2926 text = uri_text_from_filelist(list, &len, plain_text); |
2916 g_list_free(list); | 2927 g_list_free(list); |
2917 if (text) | 2928 if (text) |
2918 { | 2929 { |
2919 gtk_selection_data_set (selection_data, selection_data->target, | 2930 gtk_selection_data_set (selection_data, selection_data->target, |
2920 8, (guchar *)text, len); | 2931 8, (guchar *)text, len); |