[Xfce4-commits] r26009 - xarchiver/trunk/src

Giuseppe Torelli colossus at xfce.org
Fri Aug 24 15:33:51 CEST 2007


Author: colossus
Date: 2007-08-24 13:33:51 +0000 (Fri, 24 Aug 2007)
New Revision: 26009

Modified:
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/archive.h
   xarchiver/trunk/src/bzip2.c
   xarchiver/trunk/src/deb.c
   xarchiver/trunk/src/extract_dialog.c
   xarchiver/trunk/src/extract_dialog.h
   xarchiver/trunk/src/lzma.c
   xarchiver/trunk/src/lzma.h
   xarchiver/trunk/src/pref_dialog.c
   xarchiver/trunk/src/pref_dialog.h
   xarchiver/trunk/src/rpm.c
   xarchiver/trunk/src/window.c
Log:
Modified the function xa_run_command() to receive the archive structure.
Begin fixing extraction of tar files without the full path though so hard to accomplish!
Added option "Open image files with" in the pref dialog.


Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/archive.c	2007-08-24 13:33:51 UTC (rev 26009)
@@ -23,8 +23,6 @@
 #include "mime.h"
 #include "support.h"
 #include "window.h"
-#include <sys/types.h>
-#include <dirent.h>
 
 static gboolean xa_process_output (GIOChannel *ioc, GIOCondition cond, gpointer data);
 
@@ -225,27 +223,24 @@
 	g_free (archive);
 }
 
-gboolean xa_delete_temp_directory (gchar *dir_name, gboolean flag)
+gboolean xa_delete_temp_directory (gchar *dir_name,gboolean flag)
 {
-	DIR *dirp;
-	struct dirent *dp;
+	gchar *command;
+	gboolean result;
+	gint current_page;
+	gint idx;
 
+	current_page = gtk_notebook_get_current_page(notebook);
+	idx = xa_find_archive_index (current_page);
+
 	chdir (dir_name);
-	dirp = opendir(dir_name);
-	if (dirp == NULL)
-		return FALSE;
-
-	while ((dp = readdir(dirp)) != NULL)
-	{
-		if (dp->d_name[0] != '.')
-	    	unlink (dp->d_name);
-	}
-	closedir(dirp);
-	rmdir (dir_name);
-	return TRUE;
+	command = g_strconcat ("rm -rf ",dir_name,NULL);
+	result = xa_run_command (archive[idx],command,flag );
+	g_free (command);
+	return result;
 }
 
-gboolean xa_create_temp_directory ( gchar tmp_dir[] )
+gboolean xa_create_temp_directory (gchar tmp_dir[])
 {
 	strcpy (tmp_dir,"/tmp/xa-XXXXXX");
 	if ( mkdtemp ( tmp_dir ) == 0)
@@ -258,26 +253,21 @@
 	return TRUE;
 }
 
-gboolean xa_run_command ( gchar *command , gboolean watch_child_flag )
+gboolean xa_run_command (XArchive *archive,gchar *command , gboolean watch_child_flag)
 {
-	gint current_page;
-	gint idx;
 	int status;
 	gboolean waiting = TRUE;
 	int ps;
 
-	current_page = gtk_notebook_get_current_page (notebook);
-	idx = xa_find_archive_index ( current_page );
-
-	archive[idx]->parse_output = 0;
-	xa_spawn_async_process ( archive[idx],command,0);
-	if ( archive[idx]->child_pid == 0 )
+	archive->parse_output = 0;
+	xa_spawn_async_process ( archive,command,0);
+	if ( archive->child_pid == 0 )
 		return FALSE;
 
 	gtk_widget_show (viewport2);
 	while (waiting)
 	{
-		ps = waitpid (archive[idx]->child_pid, &status, WNOHANG);
+		ps = waitpid (archive->child_pid, &status, WNOHANG);
 		if (ps < 0)
 			waiting = FALSE;
 		else
@@ -286,7 +276,7 @@
 
 	if (watch_child_flag)
 	{
-		xa_watch_child (archive[idx]->child_pid, status, archive[idx]);
+		xa_watch_child (archive->child_pid, status, archive);
 		return TRUE;
 	}
 	return TRUE;
@@ -378,6 +368,17 @@
 	g_free(entry);
 }
 
+void xa_store_entries_in_gslist (XEntry *entry, GSList **list)
+{
+	if (entry == NULL)
+		return;
+		
+	*list = g_slist_prepend (*list,entry->filename);
+
+	xa_store_entries_in_gslist(entry->child, list);
+	xa_store_entries_in_gslist(entry->next, list);
+}
+
 XEntry *xa_find_archive_entry(XEntry *entry, gchar *string)
 {
 	if (entry == NULL)

Modified: xarchiver/trunk/src/archive.h
===================================================================
--- xarchiver/trunk/src/archive.h	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/archive.h	2007-08-24 13:33:51 UTC (rev 26009)
@@ -120,12 +120,13 @@
 void xa_clean_archive_structure ( XArchive *archive);
 gboolean xa_dump_child_error_messages (GIOChannel *ioc, GIOCondition cond, gpointer data);
 gboolean xa_create_temp_directory (gchar tmp_dir[]);
-gboolean xa_delete_temp_directory ( gchar *dir_name, gboolean flag);
-gboolean xa_run_command ( gchar *command , gboolean watch_child_flag );
+gboolean xa_delete_temp_directory (gchar *dir_name, gboolean flag);
+gboolean xa_run_command (XArchive *archive,gchar *command , gboolean watch_child_flag);
 gint xa_find_archive_index (gint page_num);
 gint xa_get_new_archive_idx();
 XEntry *xa_alloc_memory_for_each_row ( guint nc,GType column_types[]);
 void xa_free_entry (XArchive *archive,XEntry *entry);
+void xa_store_entries_in_gslist (XEntry *entry,GSList **);
 XEntry *xa_find_archive_entry(XEntry *entry, gchar *string);
 XEntry *xa_set_archive_entries_for_each_row (XArchive *archive,gchar *filename,gboolean encrypted,gpointer *items);
 gpointer *xa_fill_archive_entry_columns_for_each_row (XArchive *archive,XEntry *entry,gpointer *items);

Modified: xarchiver/trunk/src/bzip2.c
===================================================================
--- xarchiver/trunk/src/bzip2.c	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/bzip2.c	2007-08-24 13:33:51 UTC (rev 26009)
@@ -110,7 +110,7 @@
 		else
 			command = g_strconcat ("cp -f ", archive->escaped_path, " /tmp" , filename_only, flag ? ".gz" : ".bz2", NULL);
 
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command , 0);
 		g_free (command);
 		if (result == 0)
 			return ;
@@ -119,7 +119,7 @@
 		else
 			command = g_strconcat (flag ? "gzip -f -d -n " : "bzip2 -f -d ","/tmp",filename_only, flag ? ".gz" : ".bz2", NULL);
 
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command , 0);
 		g_free (command);
 		if (result == 0)
 			return;
@@ -140,7 +140,7 @@
 				command = g_strconcat ("mv -f /tmp",filename_only, " ", archive->extraction_path,NULL);
 		}
 
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command , 0);
 		g_free (command);
 		if (result == 0)
 			return;
@@ -172,10 +172,12 @@
 	}
 
 	/* Let's copy the archive to /tmp first */
+	
+	//TODO: replace /tmp with the user chosen dir in the pref dialog
 	temp_name = g_strconcat ( " /tmp", g_strrstr (archive->escaped_path , "/"), NULL);
 	command = g_strconcat ("cp -ar " ,archive->escaped_path,temp_name,NULL);
 	if ( ! cli)
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command , 0);
 	else
 		result = SpawnSyncCommand ( command );
 	g_free (command);
@@ -186,9 +188,9 @@
 	}
 	command = g_strconcat (dummy ? "gzip -f " : "bzip2 ", "-f -d ",temp_name,NULL);
 	if ( ! cli )
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command , 0);
 	else
-		result = SpawnSyncCommand ( command );
+		result = SpawnSyncCommand (command);
 	g_free (command);
 	if (result == 0)
 	{
@@ -228,7 +230,7 @@
 	else
 		command = g_strconcat (tar, " --delete -f " , temp_name , list->str , NULL );
 	if ( ! cli)
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command,0);
 	else
 		result = SpawnSyncCommand ( command );
 	g_free (command);
@@ -248,9 +250,9 @@
 
 	command = g_strconcat ( dummy ? "gzip -f " : "bzip2 ", "-f " , temp_name , NULL );
 	if ( ! cli )
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command , 0);
 	else
-		result = SpawnSyncCommand ( command );
+		result = SpawnSyncCommand (command);
 	g_free (command);
 
 	if (result == 0)
@@ -265,9 +267,9 @@
 	/* Let's move the modified archive from /tmp to the original archive location */
 	command = g_strconcat ( "mv " , temp_name , file_ext, " " ,archive->escaped_path, NULL );
 	if ( ! cli )
-		result = xa_run_command (command , 1);
+		result = xa_run_command (archive,command,1);
 	else
-		result = SpawnSyncCommand ( command );
+		result = SpawnSyncCommand (command);
 	g_free (command);
 	g_free (temp_name);
 

Modified: xarchiver/trunk/src/deb.c
===================================================================
--- xarchiver/trunk/src/deb.c	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/deb.c	2007-08-24 13:33:51 UTC (rev 26009)
@@ -47,7 +47,7 @@
 
 	/* Copy the .deb archive to the unique dir */
 	command = g_strconcat ("cp ",archive->escaped_path,archive->tmp,NULL);
-	result = xa_run_command ( command , 0);
+	result = xa_run_command (archive,command,0);
 	g_free (command);
 	if (result == FALSE)
 		return;
@@ -55,7 +55,7 @@
 	/* Ok, let's now extract the .deb archive with ar */
 	chdir (tmp_dir);
 	command = g_strconcat ("ar xv" , archive->tmp, NULL);
-	result = xa_run_command ( command , 0);
+	result = xa_run_command (archive,command,0);
 	g_free (command);
 	g_free (archive->tmp);
 

Modified: xarchiver/trunk/src/extract_dialog.c
===================================================================
--- xarchiver/trunk/src/extract_dialog.c	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/extract_dialog.c	2007-08-24 13:33:51 UTC (rev 26009)
@@ -392,9 +392,9 @@
 					g_free (text);
 				}
 				g_free (destination_path);
-        tar = g_find_program_in_path ("gtar");
-        if (tar == NULL)
-          tar = g_strdup ("tar");
+    		    tar = g_find_program_in_path ("gtar");
+        		if (tar == NULL)
+          			tar = g_strdup ("tar");
 				switch ( archive->type )
 				{
 					case XARCHIVETYPE_BZIP2:
@@ -435,7 +435,7 @@
 					}
 					else
 					{
-						xa_extract_tar_without_directories ( "tar -xvf " , archive->escaped_path, archive->overwrite,archive->tar_touch,archive->extraction_path, FALSE );
+						xa_extract_tar_without_directories ( "tar -xvf ",archive,NULL,FALSE );
 						command = NULL;
 					}
 					break;
@@ -450,7 +450,8 @@
 					}
 					else
 					{
-						xa_extract_tar_without_directories ( "tar -xvjf " , archive->escaped_path, archive->overwrite,archive->tar_touch,archive->extraction_path , FALSE );
+						g_print ("ALL files\n");
+						xa_extract_tar_without_directories ( "tar -xvjf ",archive,archive->extraction_path,FALSE );
 						command = NULL;
 					}
 					break;
@@ -465,7 +466,7 @@
 					}
 					else
 					{
-						xa_extract_tar_without_directories ( "tar -xvzf " , archive->escaped_path, archive->overwrite,archive->tar_touch,archive->extraction_path, FALSE );
+						xa_extract_tar_without_directories ( "tar -xvzf ",archive,archive->extraction_path,FALSE );
 						command = NULL;
 					}
 					break;
@@ -480,7 +481,7 @@
 					}
 					else
 					{
-						xa_extract_tar_without_directories ( "tar --use-compress-program=lzma -xvf " , archive->escaped_path, archive->overwrite,archive->tar_touch,archive->extraction_path, FALSE );
+						xa_extract_tar_without_directories ( "tar --use-compress-program=lzma -xvf ",archive,NULL,FALSE);
 						command = NULL;
 					}
 					break;
@@ -495,7 +496,7 @@
 					}
 					else
 					{
-						xa_extract_tar_without_directories ( "tar -xvzf " , archive->tmp, archive->overwrite,archive->tar_touch,archive->extraction_path, FALSE );
+						xa_extract_tar_without_directories ( "tar -xvzf ",archive,archive->tmp,FALSE );
 						command = NULL;
 					}
 					break;
@@ -524,7 +525,7 @@
 					}
 					else
 					{
-						xa_extract_tar_without_directories ( "tar -xvzf " , archive->escaped_path, archive->overwrite,archive->tar_touch,archive->extraction_path , TRUE);
+						xa_extract_tar_without_directories ( "tar -xvzf " , archive,archive->escaped_path,TRUE);
 						command = NULL;
 					}
                     break;
@@ -567,7 +568,7 @@
 				}
 				g_free (tar);
 
-				if ( command != NULL )
+				if (command != NULL)
 					return command;
 			}
 			else
@@ -638,7 +639,7 @@
 		}
 		else
 		{
-			xa_extract_tar_without_directories ( "tar -xvf " , archive->escaped_path, archive->overwrite,archive->tar_touch,path, FALSE );
+			xa_extract_tar_without_directories ( "tar -xvf " , archive,archive->escaped_path,FALSE );
 			command = NULL;
 		}
 		break;
@@ -653,7 +654,7 @@
 		}
 		else
 		{
-			xa_extract_tar_without_directories ( "tar -xjvf " , archive->escaped_path, archive->overwrite,archive->tar_touch,path, FALSE );
+			xa_extract_tar_without_directories ( "tar -xjvf " , archive,archive->escaped_path,FALSE );
 			command = NULL;
 		}
 		break;
@@ -668,7 +669,7 @@
 		}
 		else
 		{
-			xa_extract_tar_without_directories ( "tar -xzvf " , archive->escaped_path, archive->overwrite,archive->tar_touch,path, FALSE );
+			xa_extract_tar_without_directories ( "tar -xzvf " , archive,archive->escaped_path,FALSE );
 			command = NULL;
 		}
 		break;
@@ -683,7 +684,7 @@
 		}
 		else
 		{
-			xa_extract_tar_without_directories ( "tar --use-compress-program=lzma -xvf " , archive->escaped_path, archive->overwrite,archive->tar_touch,path, FALSE );
+			xa_extract_tar_without_directories ( "tar --use-compress-program=lzma -xvf " , archive,archive->escaped_path,FALSE );
 			command = NULL;
 		}
 		break;
@@ -698,7 +699,7 @@
 		}
 		else
 		{
-			xa_extract_tar_without_directories ( "tar -xvzf " , archive->tmp, archive->overwrite,archive->tar_touch,archive->extraction_path, FALSE );
+			xa_extract_tar_without_directories ( "tar -xvzf " , archive,archive->tmp,FALSE );
 			command = NULL;
 		}
 		break;
@@ -727,7 +728,7 @@
 		}
 		else
 		{
-			xa_extract_tar_without_directories ( "tar -xvzf " , archive->escaped_path, archive->overwrite,archive->tar_touch,path , TRUE);
+			xa_extract_tar_without_directories ( "tar -xvzf " , archive,archive->escaped_path,TRUE);
 			command = NULL;
 		}
         break;
@@ -778,7 +779,7 @@
 	return command;
 }
 
-gboolean xa_extract_tar_without_directories ( gchar *string, gchar *escaped_path, gboolean overwrite, gboolean tar_touch, gchar *extract_path, gboolean cpio_flag )
+gboolean xa_extract_tar_without_directories ( gchar *string, XArchive *archive, gchar *extract_path,gboolean cpio_flag)
 {
 	gchar *command = NULL;
 	gchar *name = NULL;
@@ -786,31 +787,26 @@
 	gchar tmp_dir[14] = "";
 	GtkTreeSelection *selection;
 	GString *names, *unescaped_names;
-	gboolean end = FALSE;
 	GtkTreeIter iter;
 	GList *row_list;
 	GSList *filenames = NULL;
+	GSList *xxx = NULL;
 	gboolean result;
-	gint current_page;
-	gint idx;
 
-	current_page = gtk_notebook_get_current_page(notebook);
-	idx = xa_find_archive_index (current_page);
-
 	names = g_string_new ("");
 	unescaped_names = g_string_new ("");
 
-	selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (archive[idx]->treeview) );
-	row_list = gtk_tree_selection_get_selected_rows (selection, &archive[idx]->model);
+	selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (archive->treeview) );
+	row_list = gtk_tree_selection_get_selected_rows (selection, &archive->model);
 
 	if (row_list != NULL)
 	{
 		while (row_list)
 		{
-			gtk_tree_model_get_iter(archive[idx]->model, &iter, row_list->data);
-			gtk_tree_model_get (archive[idx]->model, &iter,
-								0, &name,
-								1, &permission,
+			gtk_tree_model_get_iter(archive->model, &iter, row_list->data);
+			gtk_tree_model_get (archive->model, &iter,
+								1, &name,
+								3, &permission,
 								-1);
 			gtk_tree_path_free (row_list->data);
 
@@ -826,20 +822,18 @@
 	}
 	else
 	{
-		end = gtk_tree_model_get_iter_first (archive[idx]->model , &iter);
-		while (end)
+		/* *Here we have to fill a GSList with all the filenames in the archive so that we can use mv on all of them */
+		XEntry *entry;
+		GSList *s = archive->entries;
+
+		for (; s; s = s->next)
 		{
-			gtk_tree_model_get (archive[idx]->model, &iter,	0, &name,
-												1, &permission, -1);
-			if (strstr (permission ,"d") == NULL)
-			{
-				ConcatenateFileNames2 ( name , names );
-				filenames = g_slist_append ( filenames,name );
-			}
-			g_free (permission);
-			end = gtk_tree_model_iter_next (archive[idx]->model,&iter);
+			entry = s->data;
+			xa_store_entries_in_gslist(entry,&xxx);
 		}
 	}
+	filenames = g_slist_reverse(xxx);
+	
 	result = xa_create_temp_directory (tmp_dir);
 	if (result == 0)
 		return FALSE;
@@ -847,14 +841,14 @@
 	if (cpio_flag)
 	{
 		chdir (tmp_dir);
-		command = g_strconcat ( "cpio --make-directories -F " , archive[idx]->tmp , " -i" , NULL );
+		command = g_strconcat ( "cpio --make-directories -F " , archive->tmp , " -i" , NULL );
 	}
 	else
-		command = g_strconcat ( string, escaped_path,
-										overwrite ? " --overwrite" : " --keep-old-files",
-										tar_touch ? " --touch" : "",
+		command = g_strconcat ( string, archive->escaped_path,
+										archive->overwrite ? " --overwrite" : " --keep-old-files",
+										archive->tar_touch ? " --touch" : "",
 										" -C " , tmp_dir , names->str, NULL );
-	result = xa_run_command (command , 0);
+	result = xa_run_command (archive,command,0);
 	g_string_free (names, TRUE);
 	g_free (command);
 
@@ -866,26 +860,29 @@
 		return FALSE;
 	}
 	chdir (tmp_dir);
+	
 	while (filenames)
 	{
-		gchar *unescaped = EscapeBadChars ( filenames->data , "$\'`\"\\!?* ()[]&|@#:;");
+		gchar *unescaped = EscapeBadChars ( (gchar*)filenames->data , "$\'`\"\\!?* ()[]&|@#:;");
 		g_string_prepend ( unescaped_names, unescaped );
 		g_string_prepend_c (unescaped_names, ' ');
 		g_free (unescaped);
 		filenames = filenames->next;
 	}
 	command = g_strconcat ( "mv -f ", unescaped_names->str, " " , extract_path , NULL );
-	result = xa_run_command (command , 0);
+	g_print ("%s\n",command);
+	result = xa_run_command (archive,command,0);
 	g_free (command);
 	g_slist_free (filenames);
 	g_string_free ( unescaped_names, TRUE );
 	if (result == 0 || stop_flag)
 	{
-		xa_delete_temp_directory ( tmp_dir, 0 );
+		xa_delete_temp_directory (tmp_dir,0);
 		gtk_widget_hide (viewport2);
 		Update_StatusBar (_("Operation canceled."));
 		return FALSE;
 	}
+
 	if (cpio_flag)
 		xa_delete_temp_directory ( tmp_dir, 0 );
 	else

Modified: xarchiver/trunk/src/extract_dialog.h
===================================================================
--- xarchiver/trunk/src/extract_dialog.h	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/extract_dialog.h	2007-08-24 13:33:51 UTC (rev 26009)
@@ -68,7 +68,7 @@
 void update_fresh_toggled_cb (GtkToggleButton *button, Extract_dialog_data *data);
 gchar *xa_parse_extract_dialog_options ( XArchive *archive , Extract_dialog_data *dialog_data, GtkTreeSelection *selection);
 gchar *xa_extract_single_files ( XArchive *archive , GString *files, gchar *path);
-gboolean xa_extract_tar_without_directories ( gchar *string, gchar *escaped_path, gboolean overwrite, gboolean tar_touch, gchar *extract_path , gboolean cpio_flag);
+gboolean xa_extract_tar_without_directories ( gchar *string, XArchive *archive,gchar *extract_path,gboolean cpio_flag);
 void xa_choose_extraction_directory (GtkWidget *widget, gpointer data);
 #endif
 

Modified: xarchiver/trunk/src/lzma.c
===================================================================
--- xarchiver/trunk/src/lzma.c	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/lzma.c	2007-08-24 13:33:51 UTC (rev 26009)
@@ -27,15 +27,14 @@
 
 FILE *fd;
 
-extern gboolean TarOpen (GIOChannel *ioc, GIOCondition cond, gpointer data);
 extern int output_fd;
 extern gboolean cli;
-
 short int l;
 
-void OpenLzma ( XArchive *archive )
+void xa_open_lzma ( XArchive *archive )
 {
 	gchar *command;
+	unsigned short int i;
 
 	if ( g_str_has_suffix ( archive->escaped_path , ".tar.lzma") || g_str_has_suffix ( archive->escaped_path , ".tlz") )
 	{
@@ -49,6 +48,7 @@
 		archive->dummy_size = 0;
 		archive->nr_of_files = 0;
 		archive->nr_of_dirs = 0;
+		archive->nc = 6;
 		archive->format ="TAR.LZMA";
 		archive->parse_output = xa_get_tar_line_content;
 
@@ -60,9 +60,13 @@
 		if ( archive->child_pid == 0 )
 			return;
 
-		char *names[]= {(_("Filename")),(_("Permissions")),(_("Symbolic Link")),(_("Owner/Group")),(_("Size")),(_("Date")),(_("Time"))};
-		GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
-//		xa_create_liststore ( 7, names , (GType *)types, archive );
+		GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
+		archive->column_types = g_malloc0(sizeof(types));
+		for (i = 0; i < 8; i++)
+			archive->column_types[i] = types[i];
+
+		char *names[]= {(_("Points to")),(_("Permissions")),(_("Owner/Group")),(_("Size")),(_("Date")),(_("Time"))};
+		xa_create_liststore (archive,names);
         archive->type = XARCHIVETYPE_TAR_LZMA;
 	}
 	else
@@ -106,7 +110,7 @@
 		else
 			command = g_strconcat ("cp -f ", archive->escaped_path, " /tmp" , filename_only, ".lzma", NULL);
 
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command,0);
 		g_free (command);
 		if (result == 0)
 			return ;
@@ -115,7 +119,7 @@
 		else
 			command = g_strconcat ("lzma -f -d ","/tmp",filename_only, ".lzma", NULL);
 
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command,0);
 		g_free (command);
 		if (result == 0)
 			return;
@@ -130,7 +134,7 @@
 			command = g_strconcat ("mv -f /tmp",filename_only, " ", archive->extraction_path,NULL);
 		}
 
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command,0);
 		g_free (command);
 		if (result == 0)
 			return;
@@ -165,7 +169,7 @@
 	temp_name = g_strconcat ( " /tmp", g_strrstr (archive->escaped_path , "/"), NULL);
 	command = g_strconcat ("cp -ar " ,archive->escaped_path,temp_name,NULL);
 	if ( ! cli)
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command,0);
 	else
 		result = SpawnSyncCommand ( command );
 	g_free (command);
@@ -176,7 +180,7 @@
 	}
 	command = g_strconcat ("lzma ", "-f -d ",temp_name,NULL);
 	if ( ! cli )
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command,0);
 	else
 		result = SpawnSyncCommand ( command );
 	g_free (command);
@@ -209,7 +213,7 @@
 	else
 		command = g_strconcat (tar, " --delete -f " , temp_name , list->str , NULL );
 	if ( ! cli)
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command,0);
 	else
 		result = SpawnSyncCommand ( command );
 	g_free (command);
@@ -229,7 +233,7 @@
 
 	command = g_strconcat ( "lzma ", "-f " , temp_name , NULL );
 	if ( ! cli )
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive,command,0);
 	else
 		result = SpawnSyncCommand ( command );
 	g_free (command);
@@ -244,7 +248,7 @@
 	/* Let's move the modified archive from /tmp to the original archive location */
 	command = g_strconcat ( "mv " , temp_name , file_ext, " " ,archive->escaped_path, NULL );
 	if ( ! cli )
-		result = xa_run_command (command , 1);
+		result = xa_run_command (archive,command,1);
 	else
 		result = SpawnSyncCommand ( command );
 	g_free (command);

Modified: xarchiver/trunk/src/lzma.h
===================================================================
--- xarchiver/trunk/src/lzma.h	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/lzma.h	2007-08-24 13:33:51 UTC (rev 26009)
@@ -21,10 +21,13 @@
 #define LZMA_H
 
 #include <gtk/gtk.h>
-#include "interface.h"
+#include <string.h>
+#include <stdlib.h>
+#include "string_utils.h"
 #include "support.h"
+#include "archive.h"
 
-void OpenLzma ( XArchive *archive );
+void xa_open_lzma ( XArchive *archive );
 void lzma_extract ( XArchive *archive );
 void xa_add_delete_tar_lzma( GString *list , XArchive *archive , gboolean add );
 #endif

Modified: xarchiver/trunk/src/pref_dialog.c
===================================================================
--- xarchiver/trunk/src/pref_dialog.c	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/pref_dialog.c	2007-08-24 13:33:51 UTC (rev 26009)
@@ -202,7 +202,7 @@
 	gtk_container_add (GTK_CONTAINER (frame3), alignment3);
 	gtk_alignment_set_padding (GTK_ALIGNMENT (alignment3), 0, 0, 12, 0);
 
-	table2 = gtk_table_new (4, 2,FALSE);
+	table2 = gtk_table_new (5, 2,FALSE);
 	gtk_container_add (GTK_CONTAINER (alignment3), table2);
 	gtk_table_set_row_spacings (GTK_TABLE (table2), 2);
 	gtk_table_set_col_spacings (GTK_TABLE (table2), 4);
@@ -229,19 +229,31 @@
                      (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (GTK_SHRINK), 0, 0);
                     
-	label8 = gtk_label_new (_("Preferred temp directory:"));
+	label8 = gtk_label_new (_("Open image files with:"));
 	gtk_table_attach (GTK_TABLE (table2), label8, 0, 1, 2, 3,
                      (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (GTK_SHRINK), 0, 0);
 	gtk_misc_set_alignment (GTK_MISC (label8), 0, 0.5);
+	prefs_data->combo_prefered_viewer = gtk_combo_box_new_text();
+	gtk_combo_box_append_text (GTK_COMBO_BOX (prefs_data->combo_prefered_viewer), _("choose...") );
+	gtk_table_attach (GTK_TABLE (table2), prefs_data->combo_prefered_viewer, 1, 2, 2, 3,
+                     (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_SHRINK), 0, 0);
+
+	label9 = gtk_label_new (_("Preferred temp directory:"));
+	gtk_table_attach (GTK_TABLE (table2), label9, 0, 1, 3, 4,
+                     (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_SHRINK), 0, 0);
+	gtk_misc_set_alignment (GTK_MISC (label9), 0, 0.5);
 	prefs_data->combo_prefered_temp_dir = gtk_combo_box_new_text();
 	gtk_combo_box_append_text (GTK_COMBO_BOX (prefs_data->combo_prefered_temp_dir), _("/tmp") );
 	gtk_combo_box_append_text (GTK_COMBO_BOX (prefs_data->combo_prefered_temp_dir), _("choose...") );
-	gtk_table_attach (GTK_TABLE (table2), prefs_data->combo_prefered_temp_dir, 1, 2, 2, 3,
+	gtk_table_attach (GTK_TABLE (table2), prefs_data->combo_prefered_temp_dir, 1, 2, 3, 4,
                      (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (GTK_SHRINK), 0, 0);
+
 	prefs_data->check_save_geometry = gtk_check_button_new_with_mnemonic (_("Save window geometry"));
-	gtk_table_attach (GTK_TABLE (table2), prefs_data->check_save_geometry, 0, 2, 3, 4,
+	gtk_table_attach (GTK_TABLE (table2), prefs_data->check_save_geometry, 0, 2, 4, 5,
                      (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (GTK_SHRINK), 0, 0);
 	gtk_button_set_focus_on_click (GTK_BUTTON (prefs_data->check_save_geometry), FALSE);
@@ -315,6 +327,7 @@
 	
 	g_key_file_set_integer (xa_key_file,PACKAGE,"preferred_web_browser",gtk_combo_box_get_active (GTK_COMBO_BOX(prefs_data->combo_prefered_web_browser)));
 	g_key_file_set_integer (xa_key_file,PACKAGE,"preferred_editor",gtk_combo_box_get_active (GTK_COMBO_BOX(prefs_data->combo_prefered_editor)));
+	g_key_file_set_integer (xa_key_file,PACKAGE,"preferred_viewer",gtk_combo_box_get_active (GTK_COMBO_BOX(prefs_data->combo_prefered_viewer)));
 	g_key_file_set_integer (xa_key_file,PACKAGE,"preferred_temp_dir",gtk_combo_box_get_active (GTK_COMBO_BOX(prefs_data->combo_prefered_temp_dir)));
 	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_data->check_save_geometry)) )
 	{
@@ -380,6 +393,7 @@
 		
 		gtk_combo_box_set_active (GTK_COMBO_BOX(prefs_data->combo_prefered_web_browser),g_key_file_get_integer(xa_key_file,PACKAGE,"preferred_web_browser",NULL));
 		gtk_combo_box_set_active (GTK_COMBO_BOX(prefs_data->combo_prefered_editor),g_key_file_get_integer(xa_key_file,PACKAGE,"preferred_editor",NULL));
+		gtk_combo_box_set_active (GTK_COMBO_BOX(prefs_data->combo_prefered_viewer),g_key_file_get_integer(xa_key_file,PACKAGE,"preferred_viewer",NULL));
 		gtk_combo_box_set_active (GTK_COMBO_BOX(prefs_data->combo_prefered_temp_dir),g_key_file_get_integer(xa_key_file,PACKAGE,"preferred_temp_dir",NULL));
 		coords = g_key_file_get_integer_list(xa_key_file, PACKAGE, "geometry", &coords_len, &error);
 		if (error)

Modified: xarchiver/trunk/src/pref_dialog.h
===================================================================
--- xarchiver/trunk/src/pref_dialog.h	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/pref_dialog.h	2007-08-24 13:33:51 UTC (rev 26009)
@@ -25,7 +25,7 @@
 	GtkWidget *dialog_vbox1;
 	GtkWidget *combo_prefered_format, *check_save_add_dialog, *check_save_extract_dialog;
 	GtkWidget *allow_dir_extract_with_dnd, *confirm_deletion, *combo_archive_view,*combo_icon_size;
-	GtkWidget *check_show_comment, *check_sort_filename_column,*show_location_bar;
+	GtkWidget *check_show_comment, *check_sort_filename_column,*show_location_bar,*combo_prefered_viewer;
 	GtkWidget *combo_prefered_web_browser, *combo_prefered_editor, *combo_prefered_temp_dir, *check_save_geometry,*prefs_notebook;
 	GtkListStore *prefs_liststore;
 	GtkTooltips *tooltips;

Modified: xarchiver/trunk/src/rpm.c
===================================================================
--- xarchiver/trunk/src/rpm.c	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/rpm.c	2007-08-24 13:33:51 UTC (rev 26009)
@@ -111,7 +111,7 @@
 	//Now I run dd to have the bzip2 / gzip compressed cpio archive in /tmp
 	gchar *command = g_strconcat ( "dd if=" , archive->escaped_path, " ibs=" , ibs , " skip=1 of=" , gzip_tmp , NULL );
 	g_free (ibs);
-	result = xa_run_command ( command , 0);
+	result = xa_run_command (archive,command,0);
 	g_free (command);
 	if (result == FALSE)
 	{	

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c	2007-08-24 07:41:59 UTC (rev 26008)
+++ xarchiver/trunk/src/window.c	2007-08-24 13:33:51 UTC (rev 26009)
@@ -133,7 +133,7 @@
 				break;
 
 				case XARCHIVETYPE_TAR_LZMA:
-				OpenLzma (archive);
+				xa_open_lzma (archive);
 				break;
 
 				case XARCHIVETYPE_ZIP:
@@ -345,7 +345,7 @@
 		break;
 
 		case XARCHIVETYPE_LZMA:
-		OpenLzma ( archive[current_page] );
+		xa_open_lzma ( archive[current_page] );
 		break;
 
 		case XARCHIVETYPE_RAR:
@@ -442,7 +442,7 @@
 		command = NULL;
 	}
 	archive[id]->status = XA_ARCHIVESTATUS_TEST;
-    xa_run_command ( command , 1);
+    xa_run_command (archive[id],command,1);
     g_free (command);
 }
 
@@ -591,7 +591,7 @@
     {
     	xa_set_button_state (0,0,0,0,0,0,0,0);
     	gtk_widget_set_sensitive (Stop_button,TRUE);
-        xa_run_command ( command , 1);
+        xa_run_command (archive[id],command,1);
         g_free (command);
     }
     g_string_free (names , TRUE );
@@ -612,7 +612,7 @@
 	gtk_widget_destroy ( add_window->dialog1 );
 	if (command != NULL)
 	{
-		xa_run_command (command , 1);
+		xa_run_command (archive[idx],command,1);
 		g_free (command);
 	}
 	g_free ( add_window );
@@ -647,7 +647,7 @@
 		gtk_widget_set_sensitive ( check_menu , FALSE);
 		gtk_widget_set_sensitive ( properties , FALSE);
 		xa_set_button_state (0,0,0,0,0,0,0,0);
-		xa_run_command (command , 1);
+		xa_run_command (archive[idx],command,1);
 		g_free (command);
 	}
 	g_free (extract_window);
@@ -764,11 +764,11 @@
 				fclose (sfx_archive);
 
 				command = g_strconcat ("chmod 755 ", archive_name_escaped , NULL);
-				result = xa_run_command (command , 0);
+				result = xa_run_command (archive[idx],command,0);
 				g_free (command);
 
 				command = g_strconcat ("zip -A ",archive_name_escaped,NULL);
-				result = xa_run_command (command , 1);
+				result = xa_run_command (archive[idx],command,1);
 				g_free (command);
 				command = NULL;
 			}
@@ -874,7 +874,7 @@
 				fclose (sfx_archive);
 
 				command = g_strconcat ("chmod 755 ", archive_name_escaped , NULL);
-				result = xa_run_command (command , 1);
+				result = xa_run_command (archive[idx],command,1);
 				g_free (command);
 				command = NULL;
 			}
@@ -892,7 +892,7 @@
 	}
 	if (command != NULL)
 	{
-		xa_run_command ( command , 1);
+		xa_run_command (archive[idx],command,1);
 		g_free (command);
 	}
 }
@@ -1342,7 +1342,7 @@
 	archive[idx]->overwrite = overwrite;
 	if (command != NULL)
 	{
-		result = xa_run_command (command , 0);
+		result = xa_run_command (archive[idx],command,0);
 		g_free (command);
 		if ( result == 0 )
 		{
@@ -1760,7 +1760,7 @@
 		if ( command != NULL )
 		{
 			archive[idx]->status = XA_ARCHIVESTATUS_EXTRACT;
-			xa_run_command ( command , 1);
+			xa_run_command (archive[idx],command,1);
 			g_free (command);
 		}
 		archive[idx]->full_path = full_path;
@@ -1882,7 +1882,7 @@
 		gtk_widget_set_sensitive ( check_menu , FALSE);
 		gtk_widget_set_sensitive ( properties , FALSE);
 		xa_set_button_state (0,0,0,0,0,0,0,0);
-		xa_run_command (command , 1);
+		xa_run_command (archive[idx],command,1);
 		g_free (command);
 	}
 	g_string_free (names, TRUE);



More information about the Xfce4-commits mailing list