Mercurial > geeqie
comparison src/utilops.c @ 143:0d1bf3ac6cd8
improved FileDataChangeInfo structure, check for another file operation in progress
author | nadvornik |
---|---|
date | Mon, 08 Oct 2007 19:41:49 +0000 |
parents | e57b0207e180 |
children | f6e307c7bad6 |
comparison
equal
deleted
inserted
replaced
142:b5aa95241859 | 143:0d1bf3ac6cd8 |
---|---|
775 try = FALSE; | 775 try = FALSE; |
776 } | 776 } |
777 } | 777 } |
778 if (try) | 778 if (try) |
779 { | 779 { |
780 file_data_change_info_new(fdm->source_fd->path, fdm->dest, fdm->source_fd); | |
781 if (fdm->copy) | 780 if (fdm->copy) |
782 { | 781 { |
783 if (copy_file_ext(fdm->source_fd)) | 782 if (file_data_add_change_info(fdm->source_fd, FILEDATA_CHANGE_COPY, fdm->source_fd->path, fdm->dest) && |
783 copy_file_ext(fdm->source_fd)) | |
784 { | 784 { |
785 success = TRUE; | 785 success = TRUE; |
786 } | 786 } |
787 } | 787 } |
788 else | 788 else |
789 { | 789 { |
790 if (move_file_ext(fdm->source_fd)) | 790 if (file_data_add_change_info(fdm->source_fd, FILEDATA_CHANGE_MOVE, fdm->source_fd->path, fdm->dest) && |
791 move_file_ext(fdm->source_fd)) | |
791 { | 792 { |
792 success = TRUE; | 793 success = TRUE; |
793 } | 794 } |
794 } | 795 } |
795 | 796 |
1016 return; | 1017 return; |
1017 } | 1018 } |
1018 else | 1019 else |
1019 { | 1020 { |
1020 gint success = FALSE; | 1021 gint success = FALSE; |
1021 file_data_change_info_new(fds->source_fd->path, fds->dest, fds->source_fd); | |
1022 if (fds->copy) | 1022 if (fds->copy) |
1023 { | 1023 { |
1024 if (copy_file_ext(fds->source_fd)) | 1024 if (file_data_add_change_info(fds->source_fd, FILEDATA_CHANGE_COPY, fds->source_fd->path, fds->dest) && |
1025 copy_file_ext(fds->source_fd)) | |
1025 { | 1026 { |
1026 success = TRUE; | 1027 success = TRUE; |
1027 } | 1028 } |
1028 } | 1029 } |
1029 else | 1030 else |
1030 { | 1031 { |
1031 if (move_file_ext(fds->source_fd)) | 1032 if (file_data_add_change_info(fds->source_fd, FILEDATA_CHANGE_MOVE, fds->source_fd->path, fds->dest) && |
1033 move_file_ext(fds->source_fd)) | |
1032 { | 1034 { |
1033 success = TRUE; | 1035 success = TRUE; |
1034 } | 1036 } |
1035 } | 1037 } |
1036 if (!success) | 1038 if (!success) |
1514 file_util_warning_dialog(_("Delete failed"), msg->str, GTK_STOCK_DIALOG_ERROR, NULL); | 1516 file_util_warning_dialog(_("Delete failed"), msg->str, GTK_STOCK_DIALOG_ERROR, NULL); |
1515 } | 1517 } |
1516 g_string_free(msg, TRUE); | 1518 g_string_free(msg, TRUE); |
1517 } | 1519 } |
1518 | 1520 |
1519 if (!(flags & EDITOR_ERROR_MASK)) | 1521 |
1520 { | 1522 { |
1521 /* files were successfully deleted, call the maint functions */ | |
1522 while (list) | 1523 while (list) |
1523 { | 1524 { |
1524 FileData *fd = list->data; | 1525 FileData *fd = list->data; |
1525 file_maint_removed(fd, list); | 1526 if (flags & EDITOR_ERROR_MASK) |
1527 /* an error occured -> no change -> delete change info */ | |
1528 file_data_change_info_free(NULL, fd); | |
1529 else | |
1530 /* files were successfully deleted, call the maint functions and keep the change info forever */ | |
1531 file_maint_removed(fd, list); | |
1526 list = list->next; | 1532 list = list->next; |
1527 } | 1533 } |
1528 } | 1534 } |
1529 return ret; | 1535 return ret; |
1530 } | 1536 } |
1531 | 1537 |
1532 static void file_util_delete_multiple_ok_cb(GenericDialog *gd, gpointer data) | 1538 static void file_util_delete_multiple_ok_cb(GenericDialog *gd, gpointer data) |
1533 { | 1539 { |
1534 GList *source_list = data; | 1540 GList *source_list = data; |
1541 GList *work = source_list; | |
1542 gboolean ok = TRUE; | |
1543 | |
1544 while (work) | |
1545 { | |
1546 FileData *fd = work->data; | |
1547 if (fd->change) ok = FALSE; /* another operation in progress */ | |
1548 work = work->next; | |
1549 } | |
1550 | |
1551 if (!ok) | |
1552 { | |
1553 file_util_warning_dialog(_("File deletion failed"), _("Another operation in progress.\n"), GTK_STOCK_DIALOG_ERROR, NULL); | |
1554 filelist_free(source_list); | |
1555 return; | |
1556 } | |
1557 | |
1535 | 1558 |
1536 if (editor_command[CMD_DELETE]) | 1559 if (editor_command[CMD_DELETE]) |
1537 { | 1560 { |
1538 gint flags; | 1561 gint flags; |
1562 work = source_list; | |
1563 while (work) | |
1564 { | |
1565 FileData *fd = work->data; | |
1566 file_data_add_change_info(fd, FILEDATA_CHANGE_DELETE, NULL, NULL); | |
1567 work = work->next; | |
1568 } | |
1569 | |
1539 if ((flags = start_editor_from_filelist_full(CMD_DELETE, source_list, file_util_delete_ext_cb, NULL))) | 1570 if ((flags = start_editor_from_filelist_full(CMD_DELETE, source_list, file_util_delete_ext_cb, NULL))) |
1540 { | 1571 { |
1541 gchar *text = g_strdup_printf(_("%s\nUnable to delete files by external command.\n"), editor_get_error_str(flags)); | 1572 gchar *text = g_strdup_printf(_("%s\nUnable to delete files by external command.\n"), editor_get_error_str(flags)); |
1542 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL); | 1573 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL); |
1543 g_free(text); | 1574 g_free(text); |
1544 } | 1575 } |
1576 | |
1545 filelist_free(source_list); | 1577 filelist_free(source_list); |
1546 return; | 1578 return; |
1547 } | 1579 } |
1548 | 1580 |
1549 | 1581 |
1745 | 1777 |
1746 static void file_util_delete_ok_cb(GenericDialog *gd, gpointer data) | 1778 static void file_util_delete_ok_cb(GenericDialog *gd, gpointer data) |
1747 { | 1779 { |
1748 FileData *fd = data; | 1780 FileData *fd = data; |
1749 | 1781 |
1782 if (!file_data_add_change_info(fd, FILEDATA_CHANGE_DELETE, NULL, NULL)) | |
1783 { | |
1784 file_util_warning_dialog(_("File deletion failed"), _("Another operation in progress.\n"), GTK_STOCK_DIALOG_ERROR, NULL); | |
1785 file_data_unref(fd); | |
1786 return; | |
1787 } | |
1788 | |
1789 | |
1750 if (editor_command[CMD_DELETE]) | 1790 if (editor_command[CMD_DELETE]) |
1751 { | 1791 { |
1752 gint flags; | 1792 gint flags; |
1753 if ((flags = start_editor_from_file_full(CMD_DELETE, fd, file_util_delete_ext_cb, NULL))) | 1793 if ((flags = start_editor_from_file_full(CMD_DELETE, fd, file_util_delete_ext_cb, NULL))) |
1754 { | 1794 { |
1755 gchar *text = g_strdup_printf(_("%s\nUnable to delete file by external command:\n%s"), editor_get_error_str(flags), fd->path); | 1795 gchar *text = g_strdup_printf(_("%s\nUnable to delete file by external command:\n%s"), editor_get_error_str(flags), fd->path); |
1756 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL); | 1796 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL); |
1757 g_free(text); | 1797 g_free(text); |
1798 file_data_change_info_free(NULL, fd); | |
1758 } | 1799 } |
1759 } | 1800 } |
1760 else if (!file_util_unlink(fd)) | 1801 else if (!file_util_unlink(fd)) |
1761 { | 1802 { |
1762 gchar *text = g_strdup_printf(_("Unable to delete file:\n%s"), fd->path); | 1803 gchar *text = g_strdup_printf(_("Unable to delete file:\n%s"), fd->path); |
1763 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL); | 1804 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL); |
1764 g_free(text); | 1805 g_free(text); |
1806 file_data_change_info_free(NULL, fd); | |
1765 } | 1807 } |
1766 else | 1808 else |
1767 { | 1809 { |
1768 file_maint_removed(fd, NULL); | 1810 file_maint_removed(fd, NULL); |
1769 } | 1811 } |
1966 gtk_widget_show(gd->dialog); | 2008 gtk_widget_show(gd->dialog); |
1967 return; | 2009 return; |
1968 } | 2010 } |
1969 else | 2011 else |
1970 { | 2012 { |
1971 file_data_change_info_new(fdlg->source_fd->path, fdlg->dest_path, fdlg->source_fd); | 2013 if (!file_data_add_change_info(fdlg->source_fd, FILEDATA_CHANGE_RENAME, fdlg->source_fd->path, fdlg->dest_path) || |
1972 if (!rename_file_ext(fdlg->source_fd)) | 2014 !rename_file_ext(fdlg->source_fd)) |
1973 { | 2015 { |
1974 gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\n to:\n%s"), | 2016 gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\n to:\n%s"), |
1975 fdlg->source_fd->name, | 2017 fdlg->source_fd->name, |
1976 filename_from_path(fdlg->dest_path)); | 2018 filename_from_path(fdlg->dest_path)); |
1977 file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL); | 2019 file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL); |
2186 else | 2228 else |
2187 { | 2229 { |
2188 dest = g_strdup_printf("%s/%s%0*d%s", base, front, padding, n, end); | 2230 dest = g_strdup_printf("%s/%s%0*d%s", base, front, padding, n, end); |
2189 } | 2231 } |
2190 | 2232 |
2191 file_data_change_info_new(fd->path, dest, fd); | 2233 if (!file_data_add_change_info(fd, FILEDATA_CHANGE_RENAME, fd->path, dest) || |
2192 if (!rename_file_ext(fd)) | 2234 !rename_file_ext(fd)) |
2193 { | 2235 { |
2194 success = FALSE; | 2236 success = FALSE; |
2195 } | 2237 } |
2196 | 2238 |
2197 g_free(dest); | 2239 g_free(dest); |
2688 /* | 2730 /* |
2689 GList *list = g_list_append(NULL, file_data_ref(fds->source_fd)); | 2731 GList *list = g_list_append(NULL, file_data_ref(fds->source_fd)); |
2690 file_util_do_move_list(list, FALSE, TRUE); | 2732 file_util_do_move_list(list, FALSE, TRUE); |
2691 filelist_free(list); | 2733 filelist_free(list); |
2692 */ | 2734 */ |
2693 file_data_change_info_new(fds->source_fd->path, fds->dest, fds->source_fd); | 2735 if (!file_data_add_change_info(fds->source_fd, FILEDATA_CHANGE_RENAME, fds->source_fd->path, fds->dest) || |
2694 if (!rename_file_ext(fds->source_fd)) | 2736 !rename_file_ext(fds->source_fd)) |
2695 { | 2737 { |
2696 gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\nto:\n%s"), fds->source_fd->name, filename_from_path(fds->dest)); | 2738 gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\nto:\n%s"), fds->source_fd->name, filename_from_path(fds->dest)); |
2697 file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL); | 2739 file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL); |
2698 g_free(text); | 2740 g_free(text); |
2699 } | 2741 } |
2900 file_util_warning_dialog(_("Rename failed"), text, GTK_STOCK_DIALOG_INFO,parent); | 2942 file_util_warning_dialog(_("Rename failed"), text, GTK_STOCK_DIALOG_INFO,parent); |
2901 g_free(text); | 2943 g_free(text); |
2902 | 2944 |
2903 return FALSE; | 2945 return FALSE; |
2904 } | 2946 } |
2905 file_data_change_info_new(old_fd->path, new_path, old_fd); | 2947 if (!file_data_add_change_info(old_fd, FILEDATA_CHANGE_RENAME, old_fd->path, new_path) || |
2906 if (!rename_file_ext(old_fd)) | 2948 !rename_file_ext(old_fd)) |
2907 { | 2949 { |
2908 gchar *text = g_strdup_printf(_("Failed to rename %s to %s."), old_name, new_name); | 2950 gchar *text = g_strdup_printf(_("Failed to rename %s to %s."), old_name, new_name); |
2909 file_util_warning_dialog(_("Rename failed"), text, GTK_STOCK_DIALOG_ERROR, parent); | 2951 file_util_warning_dialog(_("Rename failed"), text, GTK_STOCK_DIALOG_ERROR, parent); |
2910 g_free(text); | 2952 g_free(text); |
2911 | 2953 |