[Xfce4-commits] r27228 - in xarchiver/trunk: . src

Giuseppe Torelli colossus at xfce.org
Mon Jul 7 15:01:41 CEST 2008


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
 



More information about the Xfce4-commits mailing list