improved printing of selection
authorVladimir Nadvornik <nadvornik@suse.cz>
Fri, 28 Aug 2009 21:01:29 +0000 (21:01 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Fri, 28 Aug 2009 21:01:29 +0000 (21:01 +0000)
src/filedata.c
src/filedata.h
src/print.c
src/utilops.c

index c20d7a1..1397998 100644 (file)
@@ -2466,23 +2466,26 @@ static gboolean file_data_list_dump(GList *list)
 }
 #endif
 
-GList *file_data_process_groups_in_selection(GList *list, GList **ungrouped_list)
+GList *file_data_process_groups_in_selection(GList *list, gboolean ungroup, GList **ungrouped_list)
 {
        GList *out = NULL;
        GList *work = list;
 
        /* change partial groups to independent files */
-       while (work)
+       if (ungroup)
                {
-               FileData *fd = work->data;
-               work = work->next;
-               
-               if (!file_data_list_contains_whole_group(list, fd)) 
+               while (work)
                        {
-                       file_data_disable_grouping(fd, TRUE);
-                       if (ungrouped_list) 
+                       FileData *fd = work->data;
+                       work = work->next;
+               
+                       if (!file_data_list_contains_whole_group(list, fd)) 
                                {
-                               *ungrouped_list = g_list_prepend(*ungrouped_list, file_data_ref(fd));
+                               file_data_disable_grouping(fd, TRUE);
+                               if (ungrouped_list) 
+                                       {
+                                       *ungrouped_list = g_list_prepend(*ungrouped_list, file_data_ref(fd));
+                                       }
                                }
                        }
                }
@@ -2495,17 +2498,14 @@ GList *file_data_process_groups_in_selection(GList *list, GList **ungrouped_list
                FileData *fd = work->data;
                work = work->next;
                
-               if (!fd->parent)
+               if (!fd->parent ||
+                   (!ungroup && !file_data_list_contains_whole_group(list, fd)))
                        {
-                       out = g_list_prepend(out, fd);
-                       }
-               else
-                       {
-                       file_data_unref(fd);
+                       out = g_list_prepend(out, file_data_ref(fd));
                        }
                }
                
-       g_list_free(list);
+       filelist_free(list);
        out = g_list_reverse(out);
 
        return out;
index 7a602fd..4050148 100644 (file)
@@ -127,7 +127,7 @@ gboolean file_data_sc_apply_ci(FileData *fd);
 void file_data_sc_free_ci(FileData *fd);
 void file_data_sc_free_ci_list(GList *fd_list);
 
-GList *file_data_process_groups_in_selection(GList *list, GList **ungrouped);
+GList *file_data_process_groups_in_selection(GList *list, gboolean ungroup, GList **ungrouped);
 
 
 typedef void (*FileDataNotifyFunc)(FileData *fd, NotifyType type, gpointer data);
index a708255..ec2a239 100644 (file)
@@ -3356,7 +3356,7 @@ void print_window_new(FileData *fd, GList *selection, GList *list, GtkWidget *pa
        pw = g_new0(PrintWindow, 1);
 
        pw->source_fd = file_data_ref(fd);
-       pw->source_selection = selection;
+       pw->source_selection = file_data_process_groups_in_selection(selection, FALSE, NULL);
        pw->source_list = list;
 
        pw->source = print_pref_int(PRINT_PREF_SOURCE, PRINT_SOURCE_SELECTION);
index a1e7118..a11d405 100644 (file)
@@ -1955,7 +1955,7 @@ static void file_util_delete_full(FileData *source_fd, GList *flist, GtkWidget *
 
        if (!flist) return;
        
-       flist = file_data_process_groups_in_selection(flist, &ungrouped);
+       flist = file_data_process_groups_in_selection(flist, TRUE, &ungrouped);
        
        if (!file_data_sc_add_ci_delete_list(flist))
                {
@@ -2045,7 +2045,7 @@ static void file_util_move_full(FileData *source_fd, GList *flist, const gchar *
 
        if (!flist) return;
 
-       flist = file_data_process_groups_in_selection(flist, &ungrouped);
+       flist = file_data_process_groups_in_selection(flist, TRUE, &ungrouped);
 
        if (!file_data_sc_add_ci_move_list(flist, dest_path))
                {
@@ -2094,7 +2094,7 @@ static void file_util_copy_full(FileData *source_fd, GList *flist, const gchar *
        if (file_util_write_metadata_first(UTILITY_TYPE_COPY, phase, flist, dest_path, NULL, parent))
                return;
 
-       flist = file_data_process_groups_in_selection(flist, &ungrouped);
+       flist = file_data_process_groups_in_selection(flist, TRUE, &ungrouped);
 
        if (!file_data_sc_add_ci_copy_list(flist, dest_path))
                {
@@ -2140,7 +2140,7 @@ static void file_util_rename_full(FileData *source_fd, GList *flist, const gchar
 
        if (!flist) return;
 
-       flist = file_data_process_groups_in_selection(flist, &ungrouped);
+       flist = file_data_process_groups_in_selection(flist, TRUE, &ungrouped);
 
        if (!file_data_sc_add_ci_rename_list(flist, dest_path))
                {
@@ -2217,7 +2217,7 @@ static void file_util_start_editor_full(const gchar *key, FileData *source_fd, G
        if (file_util_write_metadata_first(UTILITY_TYPE_FILTER, phase, flist, dest_path, key, parent))
                return;
 
-       flist = file_data_process_groups_in_selection(flist, &ungrouped);
+       flist = file_data_process_groups_in_selection(flist, TRUE, &ungrouped);
 
        if (!file_data_sc_add_ci_unspecified_list(flist, dest_path))
                {