Author: peter
Date: 2007-04-15 21:39:30 +0000 (Sun, 15 Apr 2007)
New Revision: 25584

Modified:
   squeeze/trunk/libsqueeze/archive-iter.c
   squeeze/trunk/libsqueeze/archive-iter.h
   squeeze/trunk/libsqueeze/archive.c
   squeeze/trunk/libsqueeze/archive.h
   squeeze/trunk/libsqueeze/command-builder-gnu-tar.c
   squeeze/trunk/libsqueeze/command-builder-rar.c
   squeeze/trunk/libsqueeze/command-builder-zip.c
   squeeze/trunk/libsqueeze/command-builder.c
   squeeze/trunk/libsqueeze/command-builder.h
   squeeze/trunk/libsqueeze/internals.c
   squeeze/trunk/libsqueeze/internals.h
   squeeze/trunk/libsqueeze/libsqueeze-archive.h
   squeeze/trunk/libsqueeze/libsqueeze-view.h
   squeeze/trunk/libsqueeze/remove-command.c
   squeeze/trunk/src/main_window.c
   squeeze/trunk/src/notebook.c
   squeeze/trunk/src/tool_bar.c
Log:
reference and reality problems with iters fixed
full refresh support.


Modified: squeeze/trunk/libsqueeze/archive-iter.c
===================================================================
--- squeeze/trunk/libsqueeze/archive-iter.c     2007-04-15 21:11:53 UTC (rev 
25583)
+++ squeeze/trunk/libsqueeze/archive-iter.c     2007-04-15 21:39:30 UTC (rev 
25584)
@@ -43,7 +43,11 @@
  *************************/
 
 static void
+lsq_archive_entry_props_free(const LSQArchive *archive, LSQArchiveEntry 
*entry);
+static void
 lsq_archive_entry_free(const LSQArchive *, LSQArchiveEntry *);
+static void
+lsq_archive_entry_save_free(const LSQArchive *, LSQArchiveEntry *);
 
 inline static const gchar *
 lsq_archive_entry_get_filename(const LSQArchiveEntry *);
@@ -156,6 +160,7 @@
 inline static void
 lsq_archive_iter_pool_free(LSQArchiveIterPool *pool)
 {
+       lsq_archive_iter_pool_print();
        /* free the pool of iters */
        guint i;
        for(i = 0; i < pool->size; ++i)
@@ -499,7 +504,7 @@
 #ifdef DEBUG
        g_return_val_if_fail(iter, iter);
 #endif
-       g_return_val_if_fail(iter->ref_count, iter);
+       g_return_val_if_fail(iter->ref_count, NULL);
 
        iter->ref_count++;
 
@@ -513,35 +518,19 @@
        g_return_val_if_fail(iter, FALSE);
 #endif
        /* reverse the parent list */
-       GSList *back_stack = NULL;
-       GSList *back_iter;
-       const LSQArchiveIter *parent = iter;
-       while(parent != NULL)
+       const LSQArchiveIter *parent = iter->parent;
+       if(!parent)
        {
-               back_stack = g_slist_prepend(back_stack, (gpointer)parent);
-               parent = parent->parent;
+               /* the root entry is archive root entry */
+               if(iter->entry != iter->archive->root_entry)
+                       return FALSE;
        }
-       /* the root entry is archive root entry */
-       if(((LSQArchiveIter*)back_stack->data)->entry != 
iter->archive->root_entry)
+       else
        {
-               g_slist_free(back_stack);
-               return FALSE;
-       }
-       /* find the childeren */
-       back_iter = back_stack;
-       while(back_iter)
-       {
-               parent = (LSQArchiveIter*)back_iter->data;
-               back_iter = g_slist_next(back_iter);
-               if(!back_iter)
-                       break;
-               
if(!lsq_archive_entry_get_filename(((LSQArchiveIter*)back_iter->data)->entry) 
|| !lsq_archive_entry_get_child(parent->entry, 
lsq_archive_entry_get_filename(((LSQArchiveIter*)back_iter->data)->entry)))
-               {
-                       g_slist_free(back_stack);
+               /* find the childeren */
+               if(iter->entry != lsq_archive_entry_get_child(parent->entry, 
lsq_archive_entry_get_filename(iter->entry)))
                        return FALSE;
-               }
        }
-       g_slist_free(back_stack);
        return TRUE;
 }
 
@@ -563,25 +552,23 @@
        /* the root entry is not archive root entry */
        if(((LSQArchiveIter*)back_stack->data)->entry != 
iter->archive->root_entry)
        {
+               /* TODO: Should do iter recovery here too? */
                g_slist_free(back_stack);
                return 
lsq_archive_iter_get_with_archive(iter->archive->root_entry, NULL, 
iter->archive);
        }
+       LSQArchiveEntry *entry;
+       GSList *list = g_slist_prepend(NULL, entry = iter->archive->root_entry);
        /* find the childeren */
-       back_iter = back_stack;
-       while(back_iter)
+       for(back_iter = g_slist_next(back_stack); back_iter; back_iter = 
g_slist_next(back_iter))
        {
-               parent = (LSQArchiveIter*)back_iter->data;
-               back_iter = g_slist_next(back_iter);
-               if(!back_iter)
+               if(!(entry = lsq_archive_entry_get_child(entry, 
lsq_archive_entry_get_filename(((LSQArchiveIter*)back_iter->data)->entry))))
                        break;
-               if(!lsq_archive_entry_get_child(parent->entry, 
lsq_archive_entry_get_filename(((LSQArchiveIter*)back_iter->data)->entry)))
-               {
-                       iter = parent;
-                       break;
-               }
+               list = g_slist_prepend(list, entry);
        }
        g_slist_free(back_stack);
-       return lsq_archive_iter_ref(iter);
+       iter = lsq_archive_iter_get_for_path(iter->archive, list);
+       g_slist_free(list);
+       return iter;
 }
 
 gboolean
@@ -671,7 +658,7 @@
 }
 
 void
-lsq_archive_iter_remove(LSQArchiveIter *iter)
+lsq_archive_iter_remove(LSQArchiveIter *iter, gboolean recursive)
 {
 #ifdef DEBUG
        g_return_if_fail(iter);
@@ -681,19 +668,33 @@
        LSQArchiveIter *prev_iter = iter;
        iter = iter->parent;
 
-       while(iter->parent)
+       if(lsq_archive_entry_n_children(iter->entry) == 0)
+               recursive = TRUE;
+
+       if(recursive)
        {
-               if(iter->entry->props || 
lsq_archive_entry_n_children(iter->entry) > 1)
-                       break;
+               while(iter->parent)
+               {
+                       if(iter->entry->props || 
lsq_archive_entry_n_children(iter->entry) > 1)
+                               break;
 
-               prev_iter = iter;
-               iter = iter->parent;
+                       prev_iter = iter;
+                       iter = iter->parent;
+               }
+
+               gboolean result = lsq_archive_entry_remove_child(iter->entry, 
lsq_archive_entry_get_filename(prev_iter->entry));
+               if(result && 
!lsq_archive_iter_pool_find_iter(prev_iter->archive->pool, prev_iter->entry, 
NULL, NULL))
+               {
+                       lsq_archive_entry_free(prev_iter->archive, 
prev_iter->entry);
+               }
+               else
+               {
+                       lsq_archive_entry_save_free(prev_iter->archive, 
prev_iter->entry);
+               }
        }
-
-       gboolean result = lsq_archive_entry_remove_child(iter->entry, 
lsq_archive_entry_get_filename(prev_iter->entry));
-       if(result && !lsq_archive_iter_pool_find_iter(prev_iter->archive->pool, 
prev_iter->entry, NULL, NULL))
+       else
        {
-               lsq_archive_entry_free(prev_iter->archive, prev_iter->entry);
+               lsq_archive_entry_props_free(iter->archive, iter->entry);
        }
 }
 
@@ -1064,31 +1065,10 @@
 }
 
 static void
-lsq_archive_entry_free(const LSQArchive *archive, LSQArchiveEntry *entry)
+lsq_archive_entry_props_free(const LSQArchive *archive, LSQArchiveEntry *entry)
 {
-       guint i = 0; 
+       guint i;
        gpointer props_iter = entry->props;
-       LSQSList *buffer_iter = entry->buffer;
-
-       /* free the buffer */
-       for(; buffer_iter; buffer_iter = buffer_iter->next)
-       {
-               lsq_archive_entry_free(archive, buffer_iter->entry);
-       }
-       lsq_slist_free(entry->buffer);
-       entry->buffer = NULL;
-
-       /* free the sorted list */
-       if(entry->children)
-       {
-               /* first element of the array (*entry->children) contains the 
size of the array */
-               for(i = 1; i <= GPOINTER_TO_UINT(*entry->children); ++i)
-                       lsq_archive_entry_free(archive, entry->children[i]);
-
-               g_free(entry->children);
-               entry->children = NULL;
-       }
-
        /* free the properties */
        if(props_iter)
        {
@@ -1112,8 +1092,75 @@
                        }
                }
                g_free(entry->props);
+               entry->props = NULL;
        }
+}
 
+static void
+lsq_archive_entry_save_free(const LSQArchive *archive, LSQArchiveEntry *entry)
+{
+       guint i = 0; 
+       LSQSList *buffer_iter = entry->buffer;
+
+       /* free the buffer */
+       for(; buffer_iter; buffer_iter = buffer_iter->next)
+       {
+               if(!lsq_archive_iter_pool_find_iter(archive->pool, 
buffer_iter->entry, NULL, NULL))
+                       lsq_archive_entry_free(archive, buffer_iter->entry);
+               else
+                       lsq_archive_entry_save_free(archive, 
buffer_iter->entry);
+       }
+       lsq_slist_free(entry->buffer);
+       entry->buffer = NULL;
+
+       /* free the sorted list */
+       if(entry->children)
+       {
+               /* first element of the array (*entry->children) contains the 
size of the array */
+               for(i = 1; i <= GPOINTER_TO_UINT(*entry->children); ++i)
+               {
+                       if(!lsq_archive_iter_pool_find_iter(archive->pool, 
entry->children[i], NULL, NULL))
+                               lsq_archive_entry_free(archive, 
entry->children[i]);
+                       else
+                               lsq_archive_entry_save_free(archive, 
entry->children[i]);
+               }
+
+               g_free(entry->children);
+               entry->children = NULL;
+       }
+
+       /* free the properties */
+       lsq_archive_entry_props_free(archive, entry);
+}
+
+static void
+lsq_archive_entry_free(const LSQArchive *archive, LSQArchiveEntry *entry)
+{
+       guint i = 0; 
+       LSQSList *buffer_iter = entry->buffer;
+
+       /* free the buffer */
+       for(; buffer_iter; buffer_iter = buffer_iter->next)
+       {
+               lsq_archive_entry_free(archive, buffer_iter->entry);
+       }
+       lsq_slist_free(entry->buffer);
+       entry->buffer = NULL;
+
+       /* free the sorted list */
+       if(entry->children)
+       {
+               /* first element of the array (*entry->children) contains the 
size of the array */
+               for(i = 1; i <= GPOINTER_TO_UINT(*entry->children); ++i)
+                       lsq_archive_entry_free(archive, entry->children[i]);
+
+               g_free(entry->children);
+               entry->children = NULL;
+       }
+
+       /* free the properties */
+       lsq_archive_entry_props_free(archive, entry);
+
        /* free the mime info */
        if(entry->mime_info)
                thunar_vfs_mime_info_unref(entry->mime_info);
@@ -1629,3 +1676,81 @@
                }
        }
 }
+
+/******************************
+ * Other iter/entry functions *
+ ******************************/
+
+static gchar *
+lsq_concat_child_filenames(LSQArchiveIter *iter)
+{
+       gchar *concat_str;
+       guint i, size = lsq_archive_iter_n_children(iter);
+       LSQArchiveIter *child;
+       gchar **part = g_new(gchar*, (size*2)+1);
+       part[size*2] = NULL;
+       for(i=0; i < size; i++)
+       {
+               gchar *path;
+               child = lsq_archive_iter_nth_child(iter, i);
+
+               part[i*2] = lsq_concat_child_filenames(child);
+               path = lsq_archive_iter_get_path(child);
+               part[(i*2)+1] = g_shell_quote(path);
+               g_free(path);
+
+               lsq_archive_iter_unref(child);
+       }
+       concat_str = g_strjoinv(" ", part);
+       g_strfreev(part);
+       return concat_str;
+}
+
+gchar *
+lsq_concat_iter_filenames(GSList *file_iters, gboolean recursive)
+{
+       GSList *iter = file_iters;
+       gchar *concat_str = g_strdup(""), *_concat_str;
+       gchar *children = "";
+       for(iter = file_iters; iter; iter = iter->next)
+       {
+               gchar *path = lsq_archive_iter_get_path(iter->data);
+               gchar *quote = g_shell_quote(path);
+               g_free(path);
+
+               if(recursive)
+                       children = lsq_concat_child_filenames(iter->data);
+
+               _concat_str = concat_str;
+               concat_str = g_strconcat(_concat_str, " ", children, " ", quote 
, NULL);
+               g_free(_concat_str);
+
+               if(recursive)
+                       g_free(children);
+
+               g_free(quote);
+       }
+       return concat_str;
+}
+
+GSList *
+lsq_iter_slist_copy(GSList *iters)
+{
+       GSList *new_list = g_slist_copy(iters);
+       GSList *iter;
+       for(iter = iters; iter; iter = iter->next)
+               lsq_archive_iter_ref(iter->data);
+       //g_slist_foreach(iters, (GFunc)lsq_archive_iter_ref, NULL);
+       return new_list;
+}
+
+void
+lsq_iter_slist_free(GSList *iters)
+{
+       GSList *iter;
+       for(iter = iters; iter; iter = iter->next)
+               lsq_archive_iter_unref(iter->data);
+       //g_slist_foreach(iters, (GFunc)lsq_archive_iter_unref, NULL);
+       g_slist_free(iters);
+}
+

Modified: squeeze/trunk/libsqueeze/archive-iter.h
===================================================================
--- squeeze/trunk/libsqueeze/archive-iter.h     2007-04-15 21:11:53 UTC (rev 
25583)
+++ squeeze/trunk/libsqueeze/archive-iter.h     2007-04-15 21:39:30 UTC (rev 
25584)
@@ -24,7 +24,7 @@
 
 gboolean lsq_archive_remove_file(LSQArchive *, const gchar *);
 
-void     lsq_archive_iter_remove(LSQArchiveIter *);
+void     lsq_archive_iter_remove(LSQArchiveIter *, gboolean);
 
 G_END_DECLS
 

Modified: squeeze/trunk/libsqueeze/archive.c
===================================================================
--- squeeze/trunk/libsqueeze/archive.c  2007-04-15 21:11:53 UTC (rev 25583)
+++ squeeze/trunk/libsqueeze/archive.c  2007-04-15 21:39:30 UTC (rev 25584)
@@ -406,6 +406,19 @@
        return TRUE;
 }
 
+void lsq_archive_add_children(GSList *files)
+{
+       GSList *iter;
+       for(iter = files; iter; iter = iter->next)
+       {
+               unsigned int i, size = lsq_archive_iter_n_children(iter->data);
+               for(i = 0; i < size; ++i)
+               {
+                       files = g_slist_append(iter, 
lsq_archive_iter_nth_child(iter->data, i));
+               }
+       }
+}
+
 gboolean
 lsq_archive_remove(LSQArchive *archive, GSList *files)
 {
@@ -414,6 +427,8 @@
        if(archive->command)
                return FALSE;
 
+       //lsq_archive_add_children(files);
+
        archive->command = builder->build_remove(builder, archive, files);
        g_signal_connect(archive->command, "terminated", 
G_CALLBACK(cb_archive_archive_command_terminated), archive);
        if(!lsq_archive_command_execute(archive->command))
@@ -455,6 +470,32 @@
 }
 
 gboolean
+lsq_archive_full_refresh(LSQArchive *archive)
+{
+       g_return_val_if_fail(archive->builder, FALSE);
+       LSQCommandBuilder *builder = archive->builder;
+       if(archive->command)
+               return FALSE;
+
+       archive->command = builder->build_full_refresh(builder, archive);
+       if(archive->command)
+       {
+               g_signal_connect(archive->command, "terminated", 
G_CALLBACK(cb_archive_archive_command_terminated), archive);
+               if(!lsq_archive_command_execute(archive->command))
+               {
+                       g_object_unref(archive->command);
+                       archive->command = NULL;
+                       return FALSE;
+               }
+               else
+                       g_object_unref(archive->command);
+               lsq_archive_state_changed(archive);
+               return TRUE;
+       }
+       return FALSE;
+}
+
+gboolean
 lsq_archive_view(LSQArchive *archive, GSList *files)
 {
        g_return_val_if_fail(archive->builder, FALSE);

Modified: squeeze/trunk/libsqueeze/archive.h
===================================================================
--- squeeze/trunk/libsqueeze/archive.h  2007-04-15 21:11:53 UTC (rev 25583)
+++ squeeze/trunk/libsqueeze/archive.h  2007-04-15 21:39:30 UTC (rev 25584)
@@ -44,6 +44,8 @@
 LSQArchive         *lsq_archive_new(gchar *, const gchar *) G_GNUC_INTERNAL;
 void                lsq_archive_state_changed(const LSQArchive *archive) 
G_GNUC_INTERNAL;
 
+void                lsq_archive_add_children(GSList *files);
+
 G_END_DECLS
 
 #endif /* __ARCHIVE_H__ */

Modified: squeeze/trunk/libsqueeze/command-builder-gnu-tar.c
===================================================================
--- squeeze/trunk/libsqueeze/command-builder-gnu-tar.c  2007-04-15 21:11:53 UTC 
(rev 25583)
+++ squeeze/trunk/libsqueeze/command-builder-gnu-tar.c  2007-04-15 21:39:30 UTC 
(rev 25584)
@@ -320,7 +320,7 @@
 {
        gchar *options = NULL;
        gchar *tmp_file = NULL;
-       gchar *files = lsq_concat_iter_filenames(file_iters);
+       gchar *files = lsq_concat_iter_filenames(file_iters, TRUE);
        const gchar *compress_skeleton = NULL;
        const gchar *decompress_skeleton = NULL;
        LSQArchiveCommand *remove_macro = NULL;
@@ -405,7 +405,7 @@
 static LSQArchiveCommand *
 lsq_command_builder_gnu_tar_build_extract(LSQCommandBuilder *builder, 
LSQArchive *archive, const gchar *dest_path, GSList *file_iters)
 {
-       gchar *files = lsq_concat_iter_filenames(file_iters);
+       gchar *files = lsq_concat_iter_filenames(file_iters, TRUE);
        gchar *_dest_path = g_shell_quote(dest_path);
        gchar *options = g_strconcat(" -C ", _dest_path, NULL);
 

Modified: squeeze/trunk/libsqueeze/command-builder-rar.c
===================================================================
--- squeeze/trunk/libsqueeze/command-builder-rar.c      2007-04-15 21:11:53 UTC 
(rev 25583)
+++ squeeze/trunk/libsqueeze/command-builder-rar.c      2007-04-15 21:39:30 UTC 
(rev 25584)
@@ -192,7 +192,7 @@
 static LSQArchiveCommand *
 lsq_command_builder_rar_build_remove(LSQCommandBuilder *builder, LSQArchive 
*archive, GSList *file_iters)
 {
-       gchar *files = lsq_concat_iter_filenames(file_iters);
+       gchar *files = lsq_concat_iter_filenames(file_iters, TRUE);
 
        LSQArchiveCommand *spawn = lsq_spawn_command_new(_("Removing"), 
archive, "rar d %1$s %2$s", files, NULL, NULL);
        LSQArchiveCommand *macro = lsq_macro_command_new(archive);
@@ -210,7 +210,7 @@
 static LSQArchiveCommand *
 lsq_command_builder_rar_build_extract(LSQCommandBuilder *builder, LSQArchive 
*archive, const gchar *dest_path, GSList *file_iters)
 {
-       gchar *files = lsq_concat_iter_filenames(file_iters);
+       gchar *files = lsq_concat_iter_filenames(file_iters, TRUE);
        gchar *options = g_shell_quote(dest_path);
 
        LSQArchiveCommand *spawn = lsq_spawn_command_new(_("Extracting"), 
archive, "unrar x -y %1$s %2$s %3$s", files, options, NULL);

Modified: squeeze/trunk/libsqueeze/command-builder-zip.c
===================================================================
--- squeeze/trunk/libsqueeze/command-builder-zip.c      2007-04-15 21:11:53 UTC 
(rev 25583)
+++ squeeze/trunk/libsqueeze/command-builder-zip.c      2007-04-15 21:39:30 UTC 
(rev 25584)
@@ -167,7 +167,7 @@
 static LSQArchiveCommand *
 lsq_command_builder_zip_build_remove(LSQCommandBuilder *builder, LSQArchive 
*archive, GSList *file_iters)
 {
-       gchar *files = lsq_concat_iter_filenames(file_iters);
+       gchar *files = lsq_concat_iter_filenames(file_iters, TRUE);
 
        LSQArchiveCommand *spawn = lsq_spawn_command_new(_("Removing"), 
archive, "zip -d %1$s %2$s", files, NULL, NULL);
        LSQArchiveCommand *macro = lsq_macro_command_new(archive);
@@ -185,7 +185,7 @@
 static LSQArchiveCommand *
 lsq_command_builder_zip_build_extract(LSQCommandBuilder *builder, LSQArchive 
*archive, const gchar *dest_path, GSList *file_iters)
 {
-       gchar *files = lsq_concat_iter_filenames(file_iters);
+       gchar *files = lsq_concat_iter_filenames(file_iters, TRUE);
        gchar *_dest_path = g_shell_quote(dest_path);
        gchar *options = g_strconcat(" -d ", _dest_path, NULL);
 

Modified: squeeze/trunk/libsqueeze/command-builder.c
===================================================================
--- squeeze/trunk/libsqueeze/command-builder.c  2007-04-15 21:11:53 UTC (rev 
25583)
+++ squeeze/trunk/libsqueeze/command-builder.c  2007-04-15 21:39:30 UTC (rev 
25584)
@@ -41,6 +41,8 @@
 
 static LSQArchiveCommand *
 lsq_command_builder_build_open(LSQCommandBuilder *builder, LSQArchive 
*archive, GSList *files);
+static LSQArchiveCommand *
+lsq_command_builder_build_full_refresh(LSQCommandBuilder *builder, LSQArchive 
*archive);
 
 static GObjectClass *parent_class;
 
@@ -87,6 +89,7 @@
 {
        command_builder->settings = lsq_builder_settings_new();
        command_builder->build_open = lsq_command_builder_build_open;
+       command_builder->build_full_refresh = 
lsq_command_builder_build_full_refresh;
 }
 
 /**
@@ -131,6 +134,29 @@
        return macro;
 }
 
+static LSQArchiveCommand *
+lsq_command_builder_build_full_refresh(LSQCommandBuilder *builder, LSQArchive 
*archive)
+{
+       GSList *file_iters = NULL;
+       LSQArchiveIter *root_iter = lsq_archive_get_iter(archive, NULL);
+       unsigned int i, size = lsq_archive_iter_n_children(root_iter);
+       for(i = 0; i < size; ++i)
+       {
+               file_iters = g_slist_append(file_iters, 
lsq_archive_iter_nth_child(root_iter, i));
+       }
+       LSQArchiveCommand *remove = lsq_remove_command_new(_("Removing"), 
archive, file_iters);
+       LSQArchiveCommand *refresh = builder->build_refresh(builder, archive);
+       LSQArchiveCommand *macro = lsq_macro_command_new(archive);
+
+       lsq_macro_command_append(LSQ_MACRO_COMMAND(macro), remove);
+       lsq_macro_command_append(LSQ_MACRO_COMMAND(macro), refresh);
+
+       g_slist_free(file_iters);
+       g_object_unref(remove);
+       g_object_unref(refresh);
+       return macro;
+}
+
 LSQBuilderSettings *
 lsq_command_builder_get_settings(LSQCommandBuilder *builder)
 {

Modified: squeeze/trunk/libsqueeze/command-builder.h
===================================================================
--- squeeze/trunk/libsqueeze/command-builder.h  2007-04-15 21:11:53 UTC (rev 
25583)
+++ squeeze/trunk/libsqueeze/command-builder.h  2007-04-15 21:39:30 UTC (rev 
25584)
@@ -35,6 +35,7 @@
        LSQArchiveCommand *(*build_extract)(LSQCommandBuilder *, LSQArchive *, 
const gchar *, GSList *) G_GNUC_WARN_UNUSED_RESULT;
        LSQArchiveCommand *(*build_remove) (LSQCommandBuilder *, LSQArchive *, 
GSList *) G_GNUC_WARN_UNUSED_RESULT;
        LSQArchiveCommand *(*build_refresh)(LSQCommandBuilder *, LSQArchive *) 
G_GNUC_WARN_UNUSED_RESULT;
+       LSQArchiveCommand *(*build_full_refresh)(LSQCommandBuilder *, 
LSQArchive *) G_GNUC_WARN_UNUSED_RESULT;
        LSQArchiveCommand *(*build_open)   (LSQCommandBuilder *, LSQArchive *, 
GSList *) G_GNUC_WARN_UNUSED_RESULT;
 };
 

Modified: squeeze/trunk/libsqueeze/internals.c
===================================================================
--- squeeze/trunk/libsqueeze/internals.c        2007-04-15 21:11:53 UTC (rev 
25583)
+++ squeeze/trunk/libsqueeze/internals.c        2007-04-15 21:39:30 UTC (rev 
25584)
@@ -57,24 +57,6 @@
        return concat_str;
 }
 
-gchar *
-lsq_concat_iter_filenames(GSList *file_iters)
-{
-       GSList *_file_iters = file_iters;
-       gchar *concat_str = g_strdup(" "), *_concat_str;
-
-       while(_file_iters)
-       {
-               gchar *path = lsq_archive_iter_get_path(_file_iters->data);
-               _concat_str = concat_str;
-               concat_str = g_strconcat(_concat_str, " ", g_shell_quote(path) 
, NULL);
-               _file_iters = _file_iters->next;
-               g_free(_concat_str);
-               g_free(path);
-       }
-       return concat_str;
-}
-
 LSQArchive *
 lsq_opened_archive_get_archive(gchar *path)
 {

Modified: squeeze/trunk/libsqueeze/internals.h
===================================================================
--- squeeze/trunk/libsqueeze/internals.h        2007-04-15 21:11:53 UTC (rev 
25583)
+++ squeeze/trunk/libsqueeze/internals.h        2007-04-15 21:39:30 UTC (rev 
25584)
@@ -29,7 +29,7 @@
 gchar *
 lsq_concat_filenames(GSList *filenames);
 gchar *
-lsq_concat_iter_filenames(GSList *file_iters);
+lsq_concat_iter_filenames(GSList *file_iters, gboolean);
 
 LSQArchive *
 lsq_opened_archive_get_archive(gchar *path);

Modified: squeeze/trunk/libsqueeze/libsqueeze-archive.h
===================================================================
--- squeeze/trunk/libsqueeze/libsqueeze-archive.h       2007-04-15 21:11:53 UTC 
(rev 25583)
+++ squeeze/trunk/libsqueeze/libsqueeze-archive.h       2007-04-15 21:39:30 UTC 
(rev 25584)
@@ -72,6 +72,7 @@
 gboolean        lsq_archive_extract(LSQArchive *, const gchar *dest_path, 
GSList *files);
 gboolean        lsq_archive_remove(LSQArchive *, GSList *files);
 gboolean        lsq_archive_refresh(LSQArchive *);
+gboolean        lsq_archive_full_refresh(LSQArchive *);
 gboolean        lsq_archive_view(LSQArchive *, GSList *files);
 
 

Modified: squeeze/trunk/libsqueeze/libsqueeze-view.h
===================================================================
--- squeeze/trunk/libsqueeze/libsqueeze-view.h  2007-04-15 21:11:53 UTC (rev 
25583)
+++ squeeze/trunk/libsqueeze/libsqueeze-view.h  2007-04-15 21:39:30 UTC (rev 
25584)
@@ -39,11 +39,14 @@
 const gchar        *lsq_archive_get_entry_property_name(const LSQArchive 
*archive, guint n);
 guint               lsq_archive_n_entry_properties(const LSQArchive *archive);
 
-gboolean        lsq_archive_can_stop(const LSQArchive *archive);
-gboolean        lsq_archive_stop(const LSQArchive *archive);
+gboolean            lsq_archive_can_stop(const LSQArchive *archive);
+gboolean            lsq_archive_stop(const LSQArchive *archive);
 
-const gchar    *lsq_archive_get_status(const LSQArchive *archive);
+const gchar        *lsq_archive_get_status(const LSQArchive *archive);
 
+GSList             *lsq_iter_slist_copy(GSList *);
+void                lsq_iter_slist_free(GSList *);
+
 G_END_DECLS
 
 #endif /* __LIBSQUEEZE_VIEW_H__ */

Modified: squeeze/trunk/libsqueeze/remove-command.c
===================================================================
--- squeeze/trunk/libsqueeze/remove-command.c   2007-04-15 21:11:53 UTC (rev 
25583)
+++ squeeze/trunk/libsqueeze/remove-command.c   2007-04-15 21:39:30 UTC (rev 
25584)
@@ -102,6 +102,10 @@
 static void
 lsq_remove_command_dispose(GObject *object)
 {
+       GSList *iters = g_object_get_data(object, "entries");
+       lsq_iter_slist_free(iters);
+       g_object_set_data(object, "entries", NULL);
+
        parent_class->dispose(object);
 }
 
@@ -137,7 +141,7 @@
        if(comment)
                archive_command->comment = g_strdup(comment);
 
-       g_object_set_data(G_OBJECT(archive_command), "entries", 
g_slist_copy(iters));
+       g_object_set_data(G_OBJECT(archive_command), "entries", 
lsq_iter_slist_copy(iters));
 
        archive_command->execute = lsq_remove_command_execute;
 
@@ -148,11 +152,13 @@
 lsq_remove_command_execute(LSQArchiveCommand *command)
 {
        GSList *iters = g_object_get_data(G_OBJECT(command), "entries");
+       GSList *iter;
        
-       g_slist_foreach(iters, (GFunc)lsq_archive_iter_remove, NULL);
+       for(iter = iters; iter; iter = iter->next)
+       {
+               lsq_archive_iter_remove(iter->data, TRUE);
+       }
 
-       g_slist_free(iters);
-
        return TRUE;
 }
 

Modified: squeeze/trunk/src/main_window.c
===================================================================
--- squeeze/trunk/src/main_window.c     2007-04-15 21:11:53 UTC (rev 25583)
+++ squeeze/trunk/src/main_window.c     2007-04-15 21:39:30 UTC (rev 25584)
@@ -777,7 +777,7 @@
                extract_archive_path = 
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
                
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SQ_EXTRACT_ARCHIVE_DIALOG(dialog)->all_files_radio)))
                {
-                       g_slist_free(filenames);
+                       lsq_iter_slist_free(filenames);
                        filenames = NULL;
                }
                if(!lsq_archive_extract(lp_archive, extract_archive_path, 
filenames))
@@ -798,6 +798,7 @@
        }
        gtk_widget_destroy (dialog);
 
+       lsq_iter_slist_free(filenames);
 }
 
 static void
@@ -865,6 +866,8 @@
                        }
                }
                gtk_widget_destroy (dialog);
+
+               lsq_iter_slist_free(filenames);
        }
 }
 
@@ -888,7 +891,7 @@
        SQMainWindow *window = SQ_MAIN_WINDOW(userdata);
        SQArchiveStore *store = 
sq_notebook_get_active_store(SQ_NOTEBOOK(window->notebook));
        LSQArchive *archive = sq_archive_store_get_archive(store);
-       lsq_archive_refresh(archive);
+       lsq_archive_full_refresh(archive);
 }
 
 static void

Modified: squeeze/trunk/src/notebook.c
===================================================================
--- squeeze/trunk/src/notebook.c        2007-04-15 21:11:53 UTC (rev 25583)
+++ squeeze/trunk/src/notebook.c        2007-04-15 21:39:30 UTC (rev 25584)
@@ -571,7 +571,7 @@
 
        if(new_archive == FALSE)
        {
-               lsq_archive_refresh(archive);
+               lsq_archive_full_refresh(archive);
        }
 
 }
@@ -802,7 +802,7 @@
 
                g_signal_connect(G_OBJECT(archive), "refreshed", 
G_CALLBACK(cb_notebook_archive_refreshed), treeview);
 
-               if(lsq_archive_refresh(archive))
+               if(lsq_archive_full_refresh(archive))
                {
                        /* FIXME: show warning dialog */
                }

Modified: squeeze/trunk/src/tool_bar.c
===================================================================
--- squeeze/trunk/src/tool_bar.c        2007-04-15 21:11:53 UTC (rev 25583)
+++ squeeze/trunk/src/tool_bar.c        2007-04-15 21:39:30 UTC (rev 25584)
@@ -364,7 +364,7 @@
 cb_sq_tool_bar_refresh(GtkWidget *refresh_button, SQToolBar *tool_bar)
 {
        LSQArchive *archive = 
sq_archive_store_get_archive(SQ_NAVIGATION_BAR(tool_bar)->store);
-       lsq_archive_refresh(archive);
+       lsq_archive_full_refresh(archive);
 }
 
 static void

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to