Author: colossus
Date: 2008-07-07 13:01:40 +0000 (Mon, 07 Jul 2008)
New Revision: 27228

Modified:
   xarchiver/trunk/TODO
   xarchiver/trunk/src/add_dialog.c
   xarchiver/trunk/src/add_dialog.h
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/archive.h
   xarchiver/trunk/src/extract_dialog.c
   xarchiver/trunk/src/interface.c
   xarchiver/trunk/src/main.c
   xarchiver/trunk/src/new_dialog.c
   xarchiver/trunk/src/rar.c
   xarchiver/trunk/src/rpm.c
   xarchiver/trunk/src/string_utils.c
   xarchiver/trunk/src/string_utils.h
   xarchiver/trunk/src/window.c
   xarchiver/trunk/src/window.h
Log:
Add files into specific archive directories is now possible with drag and drop 
too.
Changed View popmenu entry to Open.
Updated TODO file.


Modified: xarchiver/trunk/TODO
===================================================================
--- xarchiver/trunk/TODO        2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/TODO        2008-07-07 13:01:40 UTC (rev 27228)
@@ -1,4 +1,5 @@
-- fix adding in the archive directories with dnd.
+- fix store output when test archives
+- fix segfault in xa_launch_external_command
 - fix the directories bug with 7z
 - fix the remaining bugs in bugzilla.xfce.org
 - to fix the arrow buttons

Modified: xarchiver/trunk/src/add_dialog.c
===================================================================
--- xarchiver/trunk/src/add_dialog.c    2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/add_dialog.c    2008-07-07 13:01:40 UTC (rev 27228)
@@ -82,7 +82,9 @@
        gtk_radio_button_set_group (GTK_RADIO_BUTTON (add_dialog->store_path), 
add_dialog->path_group);
        add_dialog->path_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON 
(add_dialog->store_path));
        gtk_button_set_focus_on_click (GTK_BUTTON (add_dialog->store_path), 
FALSE);
-
+       if (archive->location_entry_path != NULL)
+               gtk_widget_set_sensitive(add_dialog->store_path,FALSE);
+       
        add_dialog->no_store_path = gtk_radio_button_new_with_mnemonic (NULL, 
_("Do not store paths"));
        gtk_box_pack_start (GTK_BOX (hbox1), add_dialog->no_store_path, FALSE, 
FALSE, 0);
        gtk_radio_button_set_group (GTK_RADIO_BUTTON 
(add_dialog->no_store_path), add_dialog->path_group);
@@ -184,28 +186,24 @@
                        default_value = 5;
                        max_value = 9;
                }
-
                else if (archive->type == XARCHIVETYPE_ZIP)
                {
                        compression_msg = _("0 = no compression, 6 is default, 
9 = best compression but slowest");
                        default_value = 6;
                        max_value = 9;
                }
-
                else if (archive->type == XARCHIVETYPE_RAR)
                {
                        compression_msg = _("0 = no compression, 3 is default, 
5 = best compression but slowest");
                        default_value = 3;
                        max_value = 5;
                }
-
                else if (archive->type == XARCHIVETYPE_ARJ)
                {
                        compression_msg = _("0 = no compression, 1 is default, 
4 = fastest but least compression");
                        default_value = 1;
                        max_value = 4;
                }
-
                else if (archive->type == XARCHIVETYPE_LHA)
                {
                        compression_msg = _("5 = default compression, 7 = max 
compression");
@@ -340,17 +338,11 @@
 {
        gchar *temp_password = NULL;
        gchar *compression_string = NULL;
-       gchar *command = NULL;
-       gchar *new_path = NULL;
        gboolean done = FALSE;
-       gboolean result = FALSE;
-       GSList *files = NULL;
-       GSList *slist = NULL;   
        GSList *list = NULL;
-       GString *names;
-       GString *items;
+       GString *filenames;
 
-       names = g_string_new (" ");
+       filenames = g_string_new (" ");
        while ( ! done )
        {
                switch (gtk_dialog_run(GTK_DIALOG(add_dialog->dialog1)))
@@ -361,8 +353,8 @@
                        break;
 
                        case GTK_RESPONSE_OK:
-                       files = 
gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(add_dialog->filechooserwidget1));
-                       if (g_slist_length(files) == 0)
+                       list = 
gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(add_dialog->filechooserwidget1));
+                       if (g_slist_length(list) == 0)
                        {
                                response = xa_show_message_dialog (GTK_WINDOW 
(xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't add 
files to the archive:"), _("You haven't selected any files to add!") );
                                break;
@@ -380,30 +372,6 @@
                                        archive->passwd = temp_password;
                        }
                        done = TRUE;
-                       /* This in case the user wants to add files not in the 
archive root directory */
-                       if (archive->location_entry_path != NULL)
-                       {
-                               result = xa_create_temp_directory(archive);
-                               if (result == FALSE)
-                                       return;
-
-                               items = g_string_new("");
-                               new_path = g_strconcat 
(archive->tmp,"/",archive->location_entry_path,NULL);
-                               command = g_strconcat ("mkdir -p 
",new_path,NULL);
-                               list = g_slist_append(list,command);
-                               slist = files;
-                               while (slist)
-                               {
-                                       g_string_append(items,slist->data);
-                                       g_string_append_c(items,' ');
-                                       slist = slist->next;
-                               }
-                               command = g_strconcat ("cp -r ",items->str," 
",new_path,NULL);
-                               g_string_free(items,FALSE);
-                               list = g_slist_append(list,command);
-                               xa_run_command (archive,list);
-                       }
-
                        if 
(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_dialog->store_path)))
                                archive->full_path = TRUE;
                        else
@@ -427,33 +395,68 @@
                                archive->compression_level = 
gtk_adjustment_get_value(GTK_ADJUSTMENT (add_dialog->compression_value));
                                compression_string = 
g_strdup_printf("%d",archive->compression_level);
                        }
+                       gtk_widget_hide(add_dialog->dialog1);
 
-                       if ( ! archive->full_path)
+                       if (!archive->full_path)
                        {
                                gchar *current_dir = 
gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(add_dialog->filechooserwidget1));
                                chdir (current_dir);
                                g_free (current_dir);
-                               
xa_cat_filenames_basename(archive,files,names,archive->location_entry_path);
+                               
xa_cat_filenames_basename(archive,list,filenames);
                        }
                        else
-                               
xa_cat_filenames(archive,files,names,archive->location_entry_path);
+                               xa_cat_filenames(archive,list,filenames);
 
-                       gtk_widget_hide(add_dialog->dialog1);
-                       
-                       xa_execute_add_commands 
(archive,names,compression_string);
-                       g_slist_free(files);
+                       xa_execute_add_commands 
(archive,filenames,list,compression_string);
+                       g_slist_foreach(list,(GFunc)g_free,NULL);
+                       g_slist_free(list);
                        if (compression_string != NULL)
                                g_free (compression_string);
                }
        }
-       if (new_path != NULL)
-               g_free(new_path);
 }
 
-void xa_execute_add_commands (XArchive *archive,GString *names,gchar 
*compression_string)
+void xa_execute_add_commands (XArchive *archive,GString *names,GSList 
*list,gchar *compression_string)
 {
+       gchar *new_path = NULL;
+       gchar *esc,*esc2;
+       gboolean result = FALSE;
+       GString *items;
+       gchar *command = NULL;
+       GSList *slist = NULL;
+       GSList *cmd_list = NULL;
+
        if (xa_main_window)
+       {
                Update_StatusBar (_("Adding files to the archive, please 
wait..."));
+               /* This in case the user wants to add files in the archive 
directories */
+               if (archive->location_entry_path != NULL)
+               {
+                       result = xa_create_temp_directory(archive);
+                       if (result == FALSE)
+                               return;
+
+                       items = g_string_new("");
+                       new_path = g_strconcat 
(archive->tmp,"/",archive->location_entry_path,NULL);
+                       command = g_strconcat ("mkdir -p ",new_path,NULL);
+                       cmd_list = g_slist_append(cmd_list,command);
+                       slist = list;
+                       while (slist)
+                       {
+                               esc = xa_escape_bad_chars (slist->data, "\\");
+                               esc2 = xa_escape_bad_chars (esc, "$'`\"\\!?* 
()[]&|:;<>#");
+                               g_free (esc);
+                               g_string_append(items,esc2);
+                               g_string_append_c(items,' ');
+                               slist = slist->next;
+                       }
+                       command = g_strconcat ("cp -r ",items->str," 
",new_path,NULL);
+                       g_free(new_path);
+                       g_string_free(items,TRUE);
+                       cmd_list = g_slist_append(cmd_list,command);
+                       xa_run_command (archive,cmd_list);
+               }
+       }
        archive->status = XA_ARCHIVESTATUS_ADD;
        (*archive->add) (archive,names,compression_string);
 }

Modified: xarchiver/trunk/src/add_dialog.h
===================================================================
--- xarchiver/trunk/src/add_dialog.h    2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/add_dialog.h    2008-07-07 13:01:40 UTC (rev 27228)
@@ -56,7 +56,7 @@
 void password_toggled_cb ( GtkButton* ,gpointer);
 void xa_parse_add_dialog_options ( XArchive *, Add_dialog_data *);
 void xa_select_files_to_add ( GtkButton* ,gpointer );
-void xa_execute_add_commands ( XArchive *,GString *, gchar *);
+void xa_execute_add_commands ( XArchive *,GString *, GSList *, gchar *);
 void fix_adjustment_value (GtkAdjustment *,gpointer );
 #endif
 

Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c       2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/archive.c       2008-07-07 13:01:40 UTC (rev 27228)
@@ -90,7 +90,6 @@
                g_slist_free (archive->error_output);
                archive->error_output = NULL;
        }
-
        if (archive->parse_output)
        {
                ioc = g_io_channel_unix_new (archive->output_fd);
@@ -110,12 +109,6 @@
        g_io_add_watch (err_ioc,G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL, 
xa_dump_child_error_messages, archive);
 }
 
-gboolean xa_spawn_sync_process (gchar *command)
-{
-
-       return FALSE;
-}
-
 static gboolean xa_process_output (GIOChannel *ioc, GIOCondition cond, 
gpointer data)
 {
        XArchive *archive = data;
@@ -343,14 +336,13 @@
        {
                archive->parse_output = 0;
                gtk_widget_show (viewport2);
+               gtk_widget_set_sensitive (Stop_button,TRUE);
                while (_commands)
                {
                        g_print ("%s\n",(gchar*)_commands->data);
                        xa_spawn_async_process (archive,_commands->data);
                        if (archive->child_pid == 0)
                                break;
-
-                       gtk_widget_set_sensitive (Stop_button,TRUE);
                        while (waiting)
                        {
                                ps = waitpid (archive->child_pid, &status, 
WNOHANG);

Modified: xarchiver/trunk/src/archive.h
===================================================================
--- xarchiver/trunk/src/archive.h       2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/archive.h       2008-07-07 13:01:40 UTC (rev 27228)
@@ -128,7 +128,6 @@
        test_func test;
 };
 
-gboolean xa_spawn_sync_process (gchar *command);
 void xa_spawn_async_process (XArchive *archive, gchar *command);
 XArchive *xa_init_archive_structure(gint);
 void xa_clean_archive_structure (XArchive *archive);

Modified: xarchiver/trunk/src/extract_dialog.c
===================================================================
--- xarchiver/trunk/src/extract_dialog.c        2008-07-07 08:22:24 UTC (rev 
27227)
+++ xarchiver/trunk/src/extract_dialog.c        2008-07-07 13:01:40 UTC (rev 
27228)
@@ -448,7 +448,6 @@
                        archive->freshen   = 
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog_data->fresh));
                        archive->update    = 
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog_data->update));
 
-                       //gtk_widget_set_sensitive (Stop_button,TRUE);
                        gtk_widget_hide (dialog_data->dialog1);
                        archive->status = XA_ARCHIVESTATUS_EXTRACT;
                        /* Is the radiobutton Files selected? */
@@ -458,12 +457,12 @@
                                {
                                        gchar *text = 
g_strdup_printf(_("Extracting files to %s"),destination_path);
                                        Update_StatusBar ( text );
+                                       gtk_widget_set_sensitive 
(Stop_button,TRUE);
                                        g_free (text);
                                }
                        }
                        else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON 
(dialog_data->selected_radio)))
                                
gtk_tree_selection_selected_foreach(selection,(GtkTreeSelectionForeachFunc) 
xa_concat_filenames,names);
-
                        (*archive->extract) (archive,names);
                }
        }

Modified: xarchiver/trunk/src/interface.c
===================================================================
--- xarchiver/trunk/src/interface.c     2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/interface.c     2008-07-07 13:01:40 UTC (rev 27228)
@@ -766,7 +766,7 @@
        GtkWidget *paste;
        GtkWidget *image8;
        GtkWidget *separator;
-       GtkWidget *view;
+       GtkWidget *open;
        GtkWidget *extract;
        GtkWidget *image9;
        GtkWidget *ddelete;
@@ -776,13 +776,13 @@
 
        xa_popup_menu = gtk_menu_new();
 
-       view = gtk_image_menu_item_new_with_mnemonic (_("View"));
-       gtk_widget_show (view);
-       gtk_container_add (GTK_CONTAINER (xa_popup_menu),view);
+       open = gtk_image_menu_item_new_with_mnemonic (_("Open"));
+       gtk_widget_show (open);
+       gtk_container_add (GTK_CONTAINER (xa_popup_menu),open);
 
-       image9 = gtk_image_new_from_stock ("gtk-find", GTK_ICON_SIZE_MENU);
+       image9 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
        gtk_widget_show (image9);
-       gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (view), image9);
+       gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image9);
 
        extract = gtk_image_menu_item_new_with_mnemonic (_("Extract..."));
        gtk_widget_show (extract);

Modified: xarchiver/trunk/src/main.c
===================================================================
--- xarchiver/trunk/src/main.c  2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/main.c  2008-07-07 13:01:40 UTC (rev 27228)
@@ -174,20 +174,20 @@
                                if (g_file_test 
(archive_name,G_FILE_TEST_EXISTS))
                                {
                                        _current_dir = 
g_path_get_basename(archive_name);
-                                       
xa_shell_quote_filename(_current_dir,string,archive);
+                                       
xa_escape_filename(_current_dir,string,archive);
                                        g_free (_current_dir);
                                }
                                for (x = 1; x< argc; x++)
                                {
                                        _current_dir = 
g_path_get_basename(argv[x]);
-                                       
xa_shell_quote_filename(_current_dir,string,archive);
+                                       
xa_escape_filename(_current_dir,string,archive);
                                        g_free (_current_dir);
                                }
                                if (archive->type == XARCHIVETYPE_7ZIP)
                                        archive->add_recurse = FALSE;
                                else
                                        archive->add_recurse = TRUE;
-                               xa_execute_add_commands(archive,string,NULL);
+                               
xa_execute_add_commands(archive,string,NULL,NULL);
                        }
                }
                /* Switch -a */

Modified: xarchiver/trunk/src/new_dialog.c
===================================================================
--- xarchiver/trunk/src/new_dialog.c    2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/new_dialog.c    2008-07-07 13:01:40 UTC (rev 27228)
@@ -183,13 +183,13 @@
                        response = xa_show_message_dialog (GTK_WINDOW 
(xa_main_window),
                                                        GTK_DIALOG_MODAL,
                                                        GTK_MESSAGE_QUESTION,
-                                                       GTK_BUTTONS_YES_NO,
+                                                       GTK_BUTTONS_OK_CANCEL,
                                                        msg,
                                                        _("Do you want to 
overwrite it?")
                                                        );
                        g_free (utf8_path);
                        g_free (msg);
-                       if (response != GTK_RESPONSE_YES)
+                       if (response != GTK_RESPONSE_OK)
                        {
                                g_free (my_path);
                                gtk_widget_destroy (xa_file_chooser);

Modified: xarchiver/trunk/src/rar.c
===================================================================
--- xarchiver/trunk/src/rar.c   2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/rar.c   2008-07-07 13:01:40 UTC (rev 27228)
@@ -211,7 +211,7 @@
        GString *e_filenames = g_string_new("");
 
        archive->status = XA_ARCHIVESTATUS_DELETE;
-       xa_shell_quote_filename(files->str,e_filenames,archive);
+       xa_escape_filename(files->str,e_filenames,archive);
        command = g_strconcat ("rar d ",archive->escaped_path," 
",e_filenames->str,NULL);
        g_string_free(files,TRUE);
        g_string_free(e_filenames,TRUE);

Modified: xarchiver/trunk/src/rpm.c
===================================================================
--- xarchiver/trunk/src/rpm.c   2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/rpm.c   2008-07-07 13:01:40 UTC (rev 27228)
@@ -135,8 +135,8 @@
        {
             gtk_widget_hide ( viewport2 );
                xa_set_window_title (xa_main_window , NULL);
-                   response = xa_show_message_dialog (GTK_WINDOW 
(xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_QUESTION,GTK_BUTTONS_YES_NO,_("An 
error occurred while decompressing the cpio archive."),_("Do you want to view 
the command line output?") );
-                       if (response == GTK_RESPONSE_YES)
+                   response = xa_show_message_dialog (GTK_WINDOW 
(xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_QUESTION,GTK_BUTTONS_OK_CANCEL,_("An
 error occurred while decompressing the cpio archive."),_("Do you want to view 
the command line output?") );
+                       if (response == GTK_RESPONSE_OK)
                                xa_show_cmd_line_output (NULL);
                        xa_delete_temp_directory (archive[idx],1);
                        g_free (cpio_tmp);

Modified: xarchiver/trunk/src/string_utils.c
===================================================================
--- xarchiver/trunk/src/string_utils.c  2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/string_utils.c  2008-07-07 13:01:40 UTC (rev 27228)
@@ -242,13 +242,55 @@
        return utf8_string;
 }
 
-void xa_shell_quote_filename (gchar *filename,GString *data,XArchive *archive)
+void xa_escape_filename (gchar *filename,GString *data,XArchive *archive)
 {
-       gchar *quoted_filename = NULL;
        gchar *esc_filename = NULL;
        
        esc_filename = xa_escape_common_chars (filename , " '*?[]", '\\', 0);
-
        g_string_prepend (data,esc_filename);
        g_string_prepend_c (data,' ');
 }
+
+void xa_cat_filenames (XArchive *archive,GSList *list,GString *data)
+{
+       GSList *slist = list;
+       gchar *name = NULL;
+
+       while (slist)
+       {
+               if (archive->location_entry_path != NULL)
+               {
+                       name = 
g_strconcat(archive->location_entry_path,slist->data,NULL);
+                       xa_escape_filename(name,data,archive);
+                       g_free(name);
+               }
+               else
+                       xa_escape_filename(slist->data,data,archive);
+               slist = slist->next;
+       }
+}
+
+void xa_cat_filenames_basename (XArchive *archive,GSList *list,GString *data)
+{
+       gchar *basename, *name;
+       GSList *slist = list;
+
+       while (slist)
+       {
+               if (archive->location_entry_path != NULL)
+               {
+                       basename = g_path_get_basename (slist->data);
+                       name = 
g_strconcat(archive->location_entry_path,basename,NULL);
+                       g_free(basename);
+                       xa_escape_filename(name,data,archive);
+                       g_free(name);
+               }
+               else
+               {
+                       basename = g_path_get_basename (slist->data);
+                       xa_escape_filename(basename,data,archive);
+                       g_free (basename);
+               }
+               slist = slist->next;
+       }
+}

Modified: xarchiver/trunk/src/string_utils.h
===================================================================
--- xarchiver/trunk/src/string_utils.h  2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/string_utils.h  2008-07-07 13:01:40 UTC (rev 27228)
@@ -38,6 +38,8 @@
 void xa_set_window_title ( GtkWidget *window , gchar *title);
 gboolean match_patterns (char **patterns,const char *string,int flags);
 gchar *xa_remove_path_from_archive_name(gchar *name);
-void xa_shell_quote_filename (gchar *,GString *data,XArchive *);
+void xa_cat_filenames (XArchive *,GSList *,GString *);
+void xa_cat_filenames_basename (XArchive *,GSList *,GString *);
+void xa_escape_filename (gchar *,GString *data,XArchive *);
 #endif
 

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c        2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/window.c        2008-07-07 13:01:40 UTC (rev 27228)
@@ -1232,8 +1232,8 @@
 
        if (archive[idx]->status == XA_ARCHIVESTATUS_ADD || 
archive[idx]->status == XA_ARCHIVESTATUS_SFX)
        {
-               response = xa_show_message_dialog 
(GTK_WINDOW(xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_QUESTION,GTK_BUTTONS_YES_NO,_("Doing
 so will probably corrupt your archive!"),_("Do you really want to cancel?") );
-               if (response == GTK_RESPONSE_NO)
+               response = xa_show_message_dialog 
(GTK_WINDOW(xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_QUESTION,GTK_BUTTONS_OK_CANCEL,_("Doing
 so will probably corrupt your archive!"),_("Do you really want to cancel?") );
+               if (response == GTK_RESPONSE_CANCEL)
                        return;
        }
        Update_StatusBar (_("Waiting for the process to abort..."));
@@ -1369,7 +1369,7 @@
        gchar *info = NULL;
        GtkTreeIter iter;
        GtkTreeModel *model;
-       GtkTreePath *path;
+       GtkTreePath *path = NULL;
        gint selected,n_elem = 0,pos = 0;
        unsigned long int total_size = 0;
        unsigned int size = 0;
@@ -1497,66 +1497,6 @@
        g_free(info);
 }
 
-void xa_concat_filenames (GtkTreeModel *model, GtkTreePath *treepath, 
GtkTreeIter *iter, GString *data)
-{
-       XEntry *entry = NULL;
-       gchar *filename = NULL;
-       gint current_page;
-       gint idx;
-
-       current_page = gtk_notebook_get_current_page(notebook);
-       idx = xa_find_archive_index (current_page);
-       
-       gtk_tree_model_get (model,iter,archive[idx]->nc+1,&entry,-1);
-       filename = xa_build_full_path_name_from_entry(entry);
-       xa_shell_quote_filename (filename,data,archive[idx]);
-       g_free (filename);
-}
-
-void xa_cat_filenames (XArchive *archive,GSList *list,GString *data,gchar 
*new_path)
-{
-       GSList *slist = list;
-       gchar *name = NULL;
-
-       while (slist)
-       {
-               if (new_path != NULL)
-               {
-                       name = g_strconcat(new_path,slist->data,NULL);
-                       xa_shell_quote_filename(name,data,archive);
-                       g_free(name);
-               }
-               else
-                       xa_shell_quote_filename(slist->data,data,archive);
-               slist = slist->next;
-       }
-}
-
-void xa_cat_filenames_basename (XArchive *archive,GSList *list,GString 
*data,gchar *new_path)
-{
-       gchar *basename;
-       GSList *slist = list;
-
-       while (slist)
-       {
-               if (new_path != NULL)
-               {
-                       basename = g_path_get_basename (slist->data);
-                       name = g_strconcat(new_path,basename,NULL);
-                       g_free(basename);
-                       xa_shell_quote_filename(name,data,archive);
-                       g_free(name);
-               }
-               else
-               {
-                       basename = g_path_get_basename (slist->data);
-                       xa_shell_quote_filename(basename,data,archive);
-                       g_free (basename);
-               }
-               slist = slist->next;
-       }
-}
-
 void Update_StatusBar (gchar *msg)
 {
        if (xa_main_window == NULL)
@@ -1684,9 +1624,9 @@
 {
        gchar **array = NULL;
        gchar *filename = NULL;
-       gchar *name = NULL;
        gchar *_current_dir = NULL;
        gchar *current_dir = NULL;
+       GSList *list = NULL;
        gboolean one_file;
        gboolean dummy_password;
        unsigned int len = 0;
@@ -1734,7 +1674,6 @@
                response = xa_show_message_dialog (GTK_WINDOW 
(xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't 
perform this action:"),_("unrar doesn't support archive creation!") );
                return;
        }
-
        if (archive[idx]->type == XARCHIVETYPE_DEB || archive[idx]->type == 
XARCHIVETYPE_RPM)
        {
                gchar *msg;
@@ -1745,24 +1684,20 @@
                response = xa_show_message_dialog (GTK_WINDOW 
(xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't 
perform this action:"), msg );
                return;
        }
-
        GString *names = g_string_new (" ");
        _current_dir = g_path_get_dirname (array[0]);
        current_dir = g_filename_from_uri (_current_dir,NULL,NULL);
        g_free (_current_dir);
        chdir ( current_dir );
        g_free (current_dir);
-       archive[idx]->status = XA_ARCHIVESTATUS_ADD;
 
        while (array[len])
        {
                filename = g_filename_from_uri (array[len],NULL,NULL);
-               name = g_path_get_basename (filename);
-               g_free (filename);
-               xa_shell_quote_filename (name,names,archive[idx]);
-               g_free (name);
+               list = g_slist_append(list,filename);
                len++;
        }
+       xa_cat_filenames_basename(archive[idx],list,names);
        dummy_password = archive[idx]->has_passwd;
        full_path = archive[idx]->full_path;
        add_recurse = archive[idx]->add_recurse;
@@ -1770,13 +1705,16 @@
        archive[idx]->has_passwd = 0;
        archive[idx]->full_path = 0;
        archive[idx]->add_recurse = 1;
+       xa_execute_add_commands(archive[idx],names,list,NULL);
 
-       xa_execute_add_commands(archive[idx],names,NULL);
-
        archive[idx]->has_passwd = dummy_password;
        archive[idx]->full_path = full_path;
        archive[idx]->add_recurse = add_recurse;
-
+       if (list != NULL)
+       {
+               g_slist_foreach(list,(GFunc) g_free,NULL);
+               g_slist_free(list);
+       }
        g_strfreev (array);
 }
 
@@ -1795,6 +1733,22 @@
        return FALSE;
 }
 
+void xa_concat_filenames (GtkTreeModel *model, GtkTreePath *treepath, 
GtkTreeIter *iter, GString *data)
+{
+       XEntry *entry = NULL;
+       gchar *filename = NULL;
+       gint current_page;
+       gint idx;
+
+       current_page = gtk_notebook_get_current_page(notebook);
+       idx = xa_find_archive_index (current_page);
+       
+       gtk_tree_model_get (model,iter,archive[idx]->nc+1,&entry,-1);
+       filename = xa_build_full_path_name_from_entry(entry);
+       xa_escape_filename (filename,data,archive[idx]);
+       g_free (filename);
+}
+
 void xa_select_all(GtkMenuItem *menuitem,gpointer user_data)
 {
        gint idx;

Modified: xarchiver/trunk/src/window.h
===================================================================
--- xarchiver/trunk/src/window.h        2008-07-07 08:22:24 UTC (rev 27227)
+++ xarchiver/trunk/src/window.h        2008-07-07 13:01:40 UTC (rev 27228)
@@ -73,6 +73,7 @@
 void on_options1_activate (GtkMenuItem *, gpointer);
 void xa_extract_archive ( GtkMenuItem *, gpointer);
 void xa_convert_sfx ( GtkMenuItem *, gpointer);
+void xa_concat_filenames (GtkTreeModel *, GtkTreePath *, GtkTreeIter *, 
GString *);
 void xa_select_all ( GtkMenuItem *, gpointer);
 void xa_deselect_all ( GtkMenuItem *, gpointer);
 void xa_show_archive_comment ( GtkMenuItem *, gpointer);
@@ -99,9 +100,6 @@
 void xa_watch_child ( GPid pid, gint status, gpointer data);
 void xa_remove_columns();
 void xa_create_liststore ( XArchive *, gchar *columns_names[]);
-void xa_concat_filenames (GtkTreeModel *, GtkTreePath *, GtkTreeIter *, 
GString *);
-void xa_cat_filenames (XArchive *,GSList *,GString *,gchar *);
-void xa_cat_filenames_basename (XArchive *,GSList *,GString *,gchar *);
 void Update_StatusBar (gchar *);
 
 gchar *xa_open_file_dialog ();
@@ -110,7 +108,5 @@
 void xa_location_entry_activated (GtkEntry *entry,gpointer );
 void xa_treeview_row_activated(GtkTreeView *tree_view,GtkTreePath 
*path,GtkTreeViewColumn *column,gpointer );
 int xa_mouse_button_event(GtkWidget *widget,GdkEventButton *event,gpointer 
data);
-gchar *name;
-gchar *permissions;
 #endif
 

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to