diff src/utilops.c @ 1623:2842a051c870

regroup sidecar files when an operation on partial group is finished
author nadvornik
date Wed, 03 Jun 2009 20:05:19 +0000
parents 9e6cdef3bc3d
children cc3ccf3c7c27
line wrap: on
line diff
--- a/src/utilops.c	Tue Jun 02 22:33:53 2009 +0000
+++ b/src/utilops.c	Wed Jun 03 20:05:19 2009 +0000
@@ -1919,24 +1919,41 @@
 	g_free(message2);
 }
 
+
+static void file_util_mark_ungrouped_files(GList *work)
+{
+	while (work)
+		{
+		FileData *fd = work->data;
+		file_data_set_regroup_when_finished(fd, TRUE);
+		work = work->next;
+		}
+}
+
 static void file_util_delete_full(FileData *source_fd, GList *source_list, GtkWidget *parent, UtilityPhase phase)
 {
 	UtilityData *ud;
 	GList *flist = filelist_copy(source_list);
+	GList *ungrouped = NULL;
 	
 	if (source_fd)
 		flist = g_list_append(flist, file_data_ref(source_fd));
 
 	if (!flist) return;
 	
-	flist = file_data_process_groups(flist);
+	flist = file_data_process_groups_in_selection(flist, &ungrouped);
 	
 	if (!file_data_sc_add_ci_delete_list(flist))
 		{
 		file_util_warn_op_in_progress(_("File deletion failed"));
+		file_data_disable_grouping_list(ungrouped, FALSE);
 		filelist_free(flist);
+		filelist_free(ungrouped);
 		return;
 		}
+	
+	file_util_mark_ungrouped_files(ungrouped);
+	filelist_free(ungrouped);
 
 	ud = file_util_data_new(UTILITY_TYPE_DELETE);
 	
@@ -2005,25 +2022,30 @@
 	file_util_dialog_run(ud);
 }
 
-
 static void file_util_move_full(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent, UtilityPhase phase)
 {
 	UtilityData *ud;
 	GList *flist = filelist_copy(source_list);
+	GList *ungrouped = NULL;
 	
 	if (source_fd)
 		flist = g_list_append(flist, file_data_ref(source_fd));
 
 	if (!flist) return;
 
-	flist = file_data_process_groups(flist);
+	flist = file_data_process_groups_in_selection(flist, &ungrouped);
 
 	if (!file_data_sc_add_ci_move_list(flist, dest_path))
 		{
 		file_util_warn_op_in_progress(_("Move failed"));
+		file_data_disable_grouping_list(ungrouped, FALSE);
 		filelist_free(flist);
+		filelist_free(ungrouped);
 		return;
 		}
+	
+	file_util_mark_ungrouped_files(ungrouped);
+	filelist_free(ungrouped);
 
 	ud = file_util_data_new(UTILITY_TYPE_MOVE);
 
@@ -2051,21 +2073,27 @@
 {
 	UtilityData *ud;
 	GList *flist = filelist_copy(source_list);
+	GList *ungrouped = NULL;
 	
 	if (source_fd)
 		flist = g_list_append(flist, file_data_ref(source_fd));
 
 	if (!flist) return;
 
-	flist = file_data_process_groups(flist);
+	flist = file_data_process_groups_in_selection(flist, &ungrouped);
 
 	if (!file_data_sc_add_ci_copy_list(flist, dest_path))
 		{
 		file_util_warn_op_in_progress(_("Copy failed"));
+		file_data_disable_grouping_list(ungrouped, FALSE);
 		filelist_free(flist);
+		filelist_free(ungrouped);
 		return;
 		}
 
+	file_util_mark_ungrouped_files(ungrouped);
+	filelist_free(ungrouped);
+
 	ud = file_util_data_new(UTILITY_TYPE_COPY);
 
 	ud->phase = phase;
@@ -2092,21 +2120,27 @@
 {
 	UtilityData *ud;
 	GList *flist = filelist_copy(source_list);
+	GList *ungrouped = NULL;
 	
 	if (source_fd)
 		flist = g_list_append(flist, file_data_ref(source_fd));
 
 	if (!flist) return;
 
-	flist = file_data_process_groups(flist);
+	flist = file_data_process_groups_in_selection(flist, &ungrouped);
 
 	if (!file_data_sc_add_ci_rename_list(flist, dest_path))
 		{
 		file_util_warn_op_in_progress(_("Rename failed"));
+		file_data_disable_grouping_list(ungrouped, FALSE);
 		filelist_free(flist);
+		filelist_free(ungrouped);
 		return;
 		}
 
+	file_util_mark_ungrouped_files(ungrouped);
+	filelist_free(ungrouped);
+
 	ud = file_util_data_new(UTILITY_TYPE_RENAME);
 
 	ud->phase = phase;
@@ -2133,6 +2167,7 @@
 {
 	UtilityData *ud;
 	GList *flist;
+	GList *ungrouped = NULL;
 	
 	if (editor_no_param(key))
 		{
@@ -2148,15 +2183,20 @@
 
 	if (!flist) return;
 
-	flist = file_data_process_groups(flist);
+	flist = file_data_process_groups_in_selection(flist, &ungrouped);
 
 	if (!file_data_sc_add_ci_unspecified_list(flist, dest_path))
 		{
 		file_util_warn_op_in_progress(_("Can't run external editor"));
+		file_data_disable_grouping_list(ungrouped, FALSE);
 		filelist_free(flist);
+		filelist_free(ungrouped);
 		return;
 		}
 
+	file_util_mark_ungrouped_files(ungrouped);
+	filelist_free(ungrouped);
+
 	if (editor_is_filter(key))
 		ud = file_util_data_new(UTILITY_TYPE_FILTER);
 	else