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