[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