if (!fdci) return;
file_data_planned_change_remove(fd);
+
+ if (fdci->regroup_when_finished) file_data_disable_grouping(fd, FALSE);
g_free(fdci->source);
g_free(fdci->dest);
fd->change = NULL;
}
+void file_data_set_regroup_when_finished(FileData *fd, gboolean enable)
+{
+ FileDataChangeInfo *fdci = fd->change;
+ if (!fdci) return;
+ fdci->regroup_when_finished = enable;
+}
static gboolean file_data_sc_add_ci(FileData *fd, FileDataChangeType type)
{
}
#endif
-GList *file_data_process_groups(GList *list)
+GList *file_data_process_groups_in_selection(GList *list, GList **ungrouped_list)
{
GList *out = NULL;
GList *work = list;
work = work->next;
if (!file_data_list_contains_whole_group(list, fd))
+ {
file_data_disable_grouping(fd, TRUE);
+ if (ungrouped_list)
+ {
+ *ungrouped_list = g_list_prepend(*ungrouped_list, file_data_ref(fd));
+ }
+ }
}
/* remove sidecars from the list,
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);
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);
{
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;
{
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;
{
UtilityData *ud;
GList *flist;
+ GList *ungrouped = NULL;
if (editor_no_param(key))
{
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