file-roller r2343 - in trunk: . data nautilus src



Author: paobac
Date: Sun Jun 29 07:31:08 2008
New Revision: 2343
URL: http://svn.gnome.org/viewvc/file-roller?rev=2343&view=rev

Log:
2008-06-29  Paolo Bacchilega  <paobac svn gnome org>

	* src/fr-window.c (open_folder): 
	* src/gtk-utils.c (show_help_dialog): 
	* configure.in: 
	
	Allow to compile with Gtk+ 2.12 as well.

2008-06-29  Paolo Bacchilega  <paobac svn gnome org>	
	
	* data/file-roller.desktop.in.in: 
	* src/main.c: use application/x-java-archive as mime type for .jar files.
	
	* src/fr-command-jar.c: register the jar mime type. 
	
	* src/fr-command-7z.c (fr_command_7z_handle_error): added support
	for 7zip files with encrypted headers.

Modified:
   trunk/   (props changed)
   trunk/ChangeLog
   trunk/configure.in
   trunk/data/file-roller.desktop.in.in
   trunk/nautilus/nautilus-fileroller.c
   trunk/src/fr-archive.c
   trunk/src/fr-command-7z.c
   trunk/src/fr-command-jar.c
   trunk/src/fr-window.c
   trunk/src/gtk-utils.c
   trunk/src/main.c

Modified: trunk/configure.in
==============================================================================
--- trunk/configure.in	(original)
+++ trunk/configure.in	Sun Jun 29 07:31:08 2008
@@ -20,7 +20,8 @@
 
 GLIB_REQUIRED=2.16.0
 GIO_REQUIRED=2.16.0
-GTK_REQUIRED=2.13.0
+GTK_2_12_REQUIRED=2.12.0
+GTK_2_13_REQUIRED=2.13.0
 LIBGNOME_REQUIRED=2.6.0
 LIBGNOMEUI_REQUIRED=2.6.0
 LIBGLADE_REQUIRED=2.4.0
@@ -28,7 +29,6 @@
 
 AC_SUBST(GLIB_REQUIRED)
 AC_SUBST(GIO_REQUIRED)
-AC_SUBST(GTK_REQUIRED)
 AC_SUBST(LIBGNOME_REQUIRED)
 AC_SUBST(LIBGNOMEUI_REQUIRED)
 AC_SUBST(LIBGLADE_REQUIRED)
@@ -36,6 +36,14 @@
 
 dnl ===========================================================================
 
+if pkg-config --atleast-version=$GTK_2_13_REQUIRED gtk+-2.0; then
+	GTK_REQUIRED=$GTK_2_13_REQUIRED
+	AC_DEFINE(GTK_2_13, "1", [Use the Gtk+ 2.13 series])
+else
+	GTK_REQUIRED=$GTK_2_12_REQUIRED
+fi
+AC_SUBST(GTK_REQUIRED)
+
 PKG_CHECK_MODULES(FR,					\
 	glib-2.0 >= $GLIB_REQUIRED			\
 	gthread-2.0					\
@@ -145,4 +153,5 @@
 	Compiler:               ${CC}
 	Internal mkdtemp:       ${mkdtemp_missing}
 	Nautilus support: 	${build_nautilus_actions}
+	Gtk+ version:           ${GTK_REQUIRED}
 "

Modified: trunk/data/file-roller.desktop.in.in
==============================================================================
--- trunk/data/file-roller.desktop.in.in	(original)
+++ trunk/data/file-roller.desktop.in.in	Sun Jun 29 07:31:08 2008
@@ -10,7 +10,7 @@
 Type=Application
 Icon=file-roller
 Categories=GTK;GNOME;Utility;
-MimeType=application/x-7z-compressed;application/x-7z-compressed-tar;application/x-ace;application/x-alz;application/x-ar;application/x-arj;application/x-bzip;application/x-bzip-compressed-tar;application/x-bzip1;application/x-bzip1-compressed-tar;application/x-cabinet;application/x-cbr;application/x-cbz;application/x-cd-image;application/x-compress;application/x-compressed-tar;application/x-cpio;application/x-deb;application/x-ear;application/x-executable; application/x-gtar;application/x-gzip;application/x-gzpostscript;application/x-jar;application/x-java-archive;application/x-lha;application/x-lhz;application/x-lzma;application/x-lzma-compressed-tar;application/x-lzop;application/x-lzop-compressed-tar;application/x-rar;application/x-rar-compressed;application/x-rpm;application/x-rzip;application/x-tar;application/x-tarz;application/x-stuffit;application/x-war;application/x-zip;application/x-zip-compressed;application/x-zoo;application/zip;multipart/x-zip;
+MimeType=application/x-7z-compressed;application/x-7z-compressed-tar;application/x-ace;application/x-alz;application/x-ar;application/x-arj;application/x-bzip;application/x-bzip-compressed-tar;application/x-bzip1;application/x-bzip1-compressed-tar;application/x-cabinet;application/x-cbr;application/x-cbz;application/x-cd-image;application/x-compress;application/x-compressed-tar;application/x-cpio;application/x-deb;application/x-ear;application/x-executable; application/x-gtar;application/x-gzip;application/x-gzpostscript;application/x-java-archive;application/x-java-archive;application/x-lha;application/x-lhz;application/x-lzma;application/x-lzma-compressed-tar;application/x-lzop;application/x-lzop-compressed-tar;application/x-rar;application/x-rar-compressed;application/x-rpm;application/x-rzip;application/x-tar;application/x-tarz;application/x-stuffit;application/x-war;application/x-zip;application/x-zip-compressed;application/x-zoo;application/zip;multipart/x-zip;
 X-GNOME-DocPath=file-roller/file-roller.xml
 X-GNOME-Bugzilla-Bugzilla=GNOME
 X-GNOME-Bugzilla-Product=file-roller

Modified: trunk/nautilus/nautilus-fileroller.c
==============================================================================
--- trunk/nautilus/nautilus-fileroller.c	(original)
+++ trunk/nautilus/nautilus-fileroller.c	Sun Jun 29 07:31:08 2008
@@ -1,6 +1,6 @@
 /*
  *  File-Roller
- * 
+ *
  *  Copyright (C) 2004 Free Software Foundation, Inc.
  *
  *  This library is free software; you can redistribute it and/or
@@ -18,7 +18,7 @@
  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Author: Paolo Bacchilega <paobac cvs gnome org>
- * 
+ *
  */
 
 #include <config.h>
@@ -48,7 +48,7 @@
 
 	uri = nautilus_file_info_get_uri (file);
 	default_dir = nautilus_file_info_get_parent_uri (file);
-	
+
 	cmd = g_string_new ("file-roller");
 	g_string_append_printf (cmd,
 				" --default-dir=%s --extract %s",
@@ -89,7 +89,7 @@
 	for (scan = files; scan; scan = scan->next) {
 		NautilusFileInfo *file = scan->data;
 		char             *uri;
-		
+
 		uri = nautilus_file_info_get_uri (file);
 		g_string_append_printf (cmd, " %s", g_shell_quote (uri));
 		g_free (uri);
@@ -145,44 +145,43 @@
  	"application/x-7z-compressed-tar",
  	"application/x-ace",
  	"application/x-alz",
-	"application/x-ar", 
+	"application/x-ar",
 	"application/x-arj",
 	"application/x-bzip",
 	"application/x-bzip-compressed-tar",
 	"application/x-bzip1",
 	"application/x-bzip1-compressed-tar",
-	"application/x-cabinet", 
-	"application/x-cbr", 
-	"application/x-cbz", 
+	"application/x-cabinet",
+	"application/x-cbr",
+	"application/x-cbz",
 	"application/x-cd-image",
 	"application/x-compress",
-	"application/x-compressed-tar", 
-	"application/x-cpio", 
+	"application/x-compressed-tar",
+	"application/x-cpio",
 	"application/x-deb",
 	"application/x-ear",
-	"application/x-executable", 
+	"application/x-executable",
 	"application/x-gtar",
 	"application/x-gzip",
-	"application/x-gzpostscript", 
-	"application/x-jar",
+	"application/x-gzpostscript",
 	"application/x-java-archive",
 	"application/x-lha",
 	"application/x-lhz",
 	"application/x-lzma",
-	"application/x-lzma-compressed-tar", 
+	"application/x-lzma-compressed-tar",
 	"application/x-lzop",
-	"application/x-lzop-compressed-tar", 
-	"application/x-rar", 
+	"application/x-lzop-compressed-tar",
+	"application/x-rar",
 	"application/x-rar-compressed",
-	"application/x-rpm", 
+	"application/x-rpm",
 	"application/x-rzip",
-	"application/x-tar", 
+	"application/x-tar",
 	"application/x-tarz",
 	"application/x-stuffit",
-	"application/x-war", 
+	"application/x-war",
 	"application/x-zip",
 	"application/x-zip-compressed",
-	"application/x-zoo", 
+	"application/x-zoo",
 	"application/zip",
 	"multipart/x-zip",
 	NULL
@@ -208,22 +207,22 @@
 	gboolean  result = FALSE;
 	GFile    *location;
 	char     *scheme;
-			
+
 	location = nautilus_file_info_get_location (file);
 	scheme = g_file_get_uri_scheme (location);
-	
+
 	if (scheme != NULL) {
 		const char *unsupported[] = { "trash", "computer", NULL };
 		int         i;
-		
+
 		for (i = 0; unsupported[i] != NULL; i++)
-			if (strcmp (scheme, unsupported[i]) == 0) 
+			if (strcmp (scheme, unsupported[i]) == 0)
 				result = TRUE;
 	}
-	
+
 	g_free (scheme);
 	g_object_unref (location);
-	
+
 	return result;
 }
 
@@ -248,14 +247,14 @@
 
 	for (scan = files; scan; scan = scan->next) {
 		NautilusFileInfo *file = scan->data;
-		
+
 		if (all_archives && ! is_archive (file))
 			all_archives = FALSE;
 
 		if (can_write) {
 			NautilusFileInfo *parent;
 
-			parent = nautilus_file_info_get_parent_info (file);			
+			parent = nautilus_file_info_get_parent_info (file);
  			can_write = nautilus_file_info_can_write (parent);
 		}
 	}
@@ -282,7 +281,7 @@
 					(GDestroyNotify) nautilus_file_info_list_free);
 
 		items = g_list_append (items, item);
-	} 
+	}
 	else if (all_archives && ! can_write) {
 		NautilusMenuItem *item;
 

Modified: trunk/src/fr-archive.c
==============================================================================
--- trunk/src/fr-archive.c	(original)
+++ trunk/src/fr-archive.c	Sun Jun 29 07:31:08 2008
@@ -284,8 +284,8 @@
 		fr_process_stop (archive->process);
 		return;
 	}
-	
-	if (! g_cancellable_is_cancelled (archive->priv->cancellable)) 
+
+	if (! g_cancellable_is_cancelled (archive->priv->cancellable))
 		g_cancellable_cancel (archive->priv->cancellable);
 }
 
@@ -349,7 +349,7 @@
 	archive->priv->extraction_destination = NULL;
 	archive->priv->temp_extraction_dir = NULL;
 	archive->priv->cancellable = g_cancellable_new ();
-	
+
 	archive->process = fr_process_new ();
 	g_signal_connect (G_OBJECT (archive->process),
 			  "sticky_only",
@@ -365,6 +365,9 @@
 }
 
 
+/*!
+ *
+ */
 static GFile *
 get_local_copy_for_file (GFile *remote_file)
 {
@@ -379,7 +382,7 @@
 		archive_name = g_file_get_basename (remote_file);
 		local_uri = g_build_filename (temp_dir, archive_name, NULL);
 		local_copy = g_file_new_for_uri (local_uri);
-	
+
 		g_free (local_uri);
 		g_free (archive_name);
 	}
@@ -402,14 +405,14 @@
 			g_warning ("Failed to delete the local copy: %s", err->message);
 			g_clear_error (&err);
 		}
-		
+
 		temp_folder = g_file_get_parent (archive->local_copy);
 		g_file_delete (temp_folder, NULL, &err);
 		if (err != NULL) {
 			g_warning ("Failed to delete temp folder: %s", err->message);
 			g_clear_error (&err);
 		}
-		
+
 		g_object_unref (temp_folder);
 	}
 
@@ -482,8 +485,8 @@
 	GFileInfo  *info;
 	GError     *err = NULL;
  	const char *content_type = NULL;
-	
-	info = g_file_query_info (file, 
+
+	info = g_file_query_info (file,
 				  G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
 				  0, NULL, &err);
 	if (info == NULL) {
@@ -494,7 +497,7 @@
 		content_type = get_static_string (g_file_info_get_content_type (info));
 		g_object_unref (info);
 	}
-	
+
 	return content_type;
 }
 
@@ -507,32 +510,32 @@
 	FrCommandCaps  requested_capabilities = FR_COMMAND_CAP_NONE;
 	GType          command_type;
 	char          *filename;
-	
+
 	if (mime_type == NULL)
 		return FALSE;
-	
+
 	archive->is_compressed_file = FALSE;
 
 	/* try with the WRITE capability even when loading, this way we give
-	 * priority to the commands that can read and write over commands 
+	 * priority to the commands that can read and write over commands
 	 * that can only read a specific file format. */
-		
-	requested_capabilities |= FR_COMMAND_CAP_READ_WRITE;	
+
+	requested_capabilities |= FR_COMMAND_CAP_READ_WRITE;
 	if (! loading && ! archive->can_create_compressed_file)
 		requested_capabilities |= FR_COMMAND_CAP_ARCHIVE_MANY_FILES;
 	command_type = get_command_type_from_mime_type (mime_type, requested_capabilities);
-	
-	/* if no command was found and we are loading, remove the write 
+
+	/* if no command was found and we are loading, remove the write
 	 * capability and try again */
-	
-	if ((command_type == 0) && loading) {	
+
+	if ((command_type == 0) && loading) {
 		requested_capabilities ^= FR_COMMAND_CAP_WRITE;
 		command_type = get_command_type_from_mime_type (mime_type, requested_capabilities);
 	}
-	
+
 	if (command_type == 0)
 		return FALSE;
-	
+
 	filename = g_file_get_path (archive->local_copy);
 	archive->command = FR_COMMAND (g_object_new (command_type,
 					             "process", archive->process,
@@ -540,14 +543,14 @@
 					             "mime-type", mime_type,
 					             NULL));
 	g_free (filename);
-	
+
 	if (! fr_command_is_capable_of (archive->command, requested_capabilities)) {
 		g_object_unref (archive->command);
 		archive->command = NULL;
 	}
 	else if (archive->command != NULL)
 		archive->is_compressed_file = ! fr_command_is_capable_of (archive->command, FR_COMMAND_CAP_ARCHIVE_MANY_FILES);
-	
+
 	return (archive->command != NULL);
 }
 
@@ -557,14 +560,14 @@
 {
 	const char *mime_type = NULL;
 	char       *filename;
-	
+
 	if (file == NULL)
 		return FALSE;
-	
+
 	filename = g_file_get_path (file);
 	mime_type = get_mime_type_from_extension (get_file_extension (filename));
 	g_free (filename);
-	
+
 	return mime_type;
 }
 
@@ -603,7 +606,7 @@
 	fr_archive_action_completed (archive, action, error_type, error_details);
 }
 
-                                  
+
 static void
 copy_to_remote_location_done (GError   *error,
 			      gpointer  user_data)
@@ -615,7 +618,7 @@
 }
 
 
-static void 
+static void
 copy_to_remote_location_progress (goffset   current_file,
                                   goffset   total_files,
                                   GFile    *source,
@@ -625,24 +628,24 @@
                                   gpointer  user_data)
 {
 	XferData *xfer_data = user_data;
-	
+
 	g_signal_emit (G_OBJECT (xfer_data->archive),
 		       fr_archive_signals[PROGRESS],
 		       0,
 		       (double) current_num_bytes / total_num_bytes);
 }
-				      
+
 
 static void
 copy_to_remote_location (FrArchive  *archive,
 			 FrAction    action)
 {
 	XferData *xfer_data;
-	
+
 	xfer_data = g_new0 (XferData, 1);
 	xfer_data->archive = archive;
 	xfer_data->action = action;
-	
+
 	g_copy_file_async (archive->local_copy,
 			   archive->file,
 			   G_FILE_COPY_OVERWRITE,
@@ -659,7 +662,7 @@
 
 
 static void
-move_here (FrArchive *archive) 
+move_here (FrArchive *archive)
 {
 	char   *content_uri;
 	char   *parent;
@@ -670,15 +673,15 @@
 
 	content_uri = get_dir_content_if_unique (archive->priv->extraction_destination);
 	if (content_uri == NULL)
-		return;	
+		return;
 
 	parent = remove_level_from_path (content_uri);
-		
+
 	if (uricmp (parent, archive->priv->extraction_destination) == 0) {
 		char *new_uri;
-		
+
 		new_uri = get_alternative_uri_for_uri (archive->priv->extraction_destination);
-		 
+
 		source = g_file_new_for_uri (archive->priv->extraction_destination);
 		destination = g_file_new_for_uri (new_uri);
 		if (! g_file_move (source, destination, 0, NULL, NULL, NULL, &error)) {
@@ -687,39 +690,39 @@
 		}
 		g_object_unref (source);
 		g_object_unref (destination);
-				
+
 		g_free (archive->priv->extraction_destination);
 		archive->priv->extraction_destination = new_uri;
 
 		g_free (parent);
-		
+
 		content_uri = get_dir_content_if_unique (archive->priv->extraction_destination);
 		if (content_uri == NULL)
-			return;	
+			return;
 
 		parent = remove_level_from_path (content_uri);
 	}
 
 	parent_parent = remove_level_from_path (parent);
 	new_content_uri = get_alternative_uri (parent_parent, file_name_from_path (content_uri));
-	
+
 	source = g_file_new_for_uri (content_uri);
 	destination = g_file_new_for_uri (new_content_uri);
 	if (! g_file_move (source, destination, 0, NULL, NULL, NULL, &error)) {
 		g_warning ("could not rename %s to %s: %s", content_uri, new_content_uri, error->message);
 		g_clear_error (&error);
 	}
-	
+
 	parent_file = g_file_new_for_uri (parent);
 	if (! g_file_delete (parent_file, NULL, &error)) {
 		g_warning ("could not remove directory %s: %s", parent, error->message);
 		g_clear_error (&error);
 	}
 	g_object_unref (parent_file);
-	
+
 	g_free (archive->priv->extraction_destination);
 	archive->priv->extraction_destination = new_content_uri;
-	
+
 	g_free (parent_parent);
 	g_free (parent);
 	g_free (content_uri);
@@ -731,24 +734,24 @@
 			   gpointer  user_data)
 {
 	FrArchive *archive = user_data;
-	
+
 	remove_local_directory (archive->priv->temp_extraction_dir);
 	g_free (archive->priv->temp_extraction_dir);
 	archive->priv->temp_extraction_dir = NULL;
-	
+
 	fr_archive_action_completed (archive,
 				     FR_ACTION_COPYING_FILES_TO_REMOTE,
 				     FR_PROC_ERROR_NONE,
 				     NULL);
- 
+
 	if ((error == NULL) && (archive->priv->extract_here))
-		move_here (archive); 
-	
-	fr_archive_copy_done (archive, FR_ACTION_EXTRACTING_FILES, error);	
+		move_here (archive);
+
+	fr_archive_copy_done (archive, FR_ACTION_EXTRACTING_FILES, error);
 }
 
 
-static void 
+static void
 copy_extracted_files_progress (goffset   current_file,
                                goffset   total_files,
                                GFile    *source,
@@ -758,7 +761,7 @@
                                gpointer  user_data)
 {
 	FrArchive *archive = user_data;
-	
+
 	g_signal_emit (G_OBJECT (archive),
 		       fr_archive_signals[PROGRESS],
 		       0,
@@ -770,7 +773,7 @@
 copy_extracted_files_to_destination (FrArchive *archive)
 {
 	char *temp_extraction_dir;
-	
+
 	temp_extraction_dir = g_filename_to_uri (archive->priv->temp_extraction_dir, NULL, NULL);
 	g_directory_copy_async (temp_extraction_dir,
 				archive->priv->extraction_destination,
@@ -807,7 +810,7 @@
 			}
 		}
 		break;
-		
+
 	case FR_ACTION_ADDING_FILES:
 		if (error->type == FR_PROC_ERROR_NONE) {
 			fr_archive_remove_temp_work_dir (archive);
@@ -825,7 +828,7 @@
 			}
 		}
 		break;
-		
+
 	case FR_ACTION_EXTRACTING_FILES:
 		if (error->type == FR_PROC_ERROR_NONE) {
 			if  (archive->priv->remote_extraction) {
@@ -833,23 +836,23 @@
 				return;
 			}
 			else if (archive->priv->extract_here)
-				move_here (archive); 
+				move_here (archive);
 		}
 		else {
-			/* if an error occurred during extraction remove the 
+			/* if an error occurred during extraction remove the
 			 * temp extraction dir, if used. */
-			
+
 			if ((archive->priv->remote_extraction) && (archive->priv->temp_extraction_dir != NULL)) {
 				remove_local_directory (archive->priv->temp_extraction_dir);
 				g_free (archive->priv->temp_extraction_dir);
 				archive->priv->temp_extraction_dir = NULL;
 			}
-			
-			if (archive->priv->extract_here) 
+
+			if (archive->priv->extract_here)
 				remove_directory (archive->priv->extraction_destination);
-		}	
+		}
 		break;
-		
+
 	default:
 		/* nothing */
 		break;
@@ -889,21 +892,20 @@
 }
 
 
-/* filename must not be escaped. */
 gboolean
 fr_archive_create (FrArchive  *archive,
 		   const char *uri)
 {
 	FrCommand  *tmp_command;
 	const char *mime_type;
-	
+
 	if (uri == NULL)
 		return FALSE;
 
 	fr_archive_set_uri (archive, uri);
 
 	tmp_command = archive->command;
-	
+
 	mime_type = get_mime_type_from_filename (archive->local_copy);
 	if (! create_command_from_mime_type (archive, mime_type, FALSE)) {
 		archive->command = tmp_command;
@@ -968,25 +970,25 @@
 {
 	FrCommand  *tmp_command;
 	const char *mime_type;
-	
+
 	archive->have_permissions = check_permissions (uri, W_OK);
 	archive->read_only = ! archive->have_permissions;
 
 	tmp_command = archive->command;
-	
+
 	mime_type = get_mime_type_from_filename (archive->local_copy);
 	if (! create_command_from_mime_type (archive, mime_type, TRUE)) {
 		mime_type = get_mime_type_from_content (archive->local_copy);
 		if (! create_command_from_mime_type (archive, mime_type, TRUE)) {
 			archive->command = tmp_command;
 			fr_archive_action_completed (archive,
-						     FR_ACTION_LOADING_ARCHIVE, 
+						     FR_ACTION_LOADING_ARCHIVE,
 						     FR_PROC_ERROR_GENERIC,
 						     _("Archive type not supported."));
 			return;
 		}
 	}
-	
+
 	if (tmp_command != NULL) {
 		g_signal_handlers_disconnect_by_data (tmp_command, archive);
 		g_object_unref (tmp_command);
@@ -994,9 +996,9 @@
 
 	archive->content_type = mime_type;
 
-	if (! fr_command_is_capable_of (archive->command, FR_COMMAND_CAP_WRITE)) 
+	if (! fr_command_is_capable_of (archive->command, FR_COMMAND_CAP_WRITE))
 		archive->read_only = TRUE;
-	
+
 	g_signal_connect (G_OBJECT (archive->command),
 			  "start",
 			  G_CALLBACK (action_started),
@@ -1018,15 +1020,15 @@
 	archive->command->fake_load = fr_archive_fake_load (archive);
 
 	fr_archive_action_completed (archive,
-				     FR_ACTION_LOADING_ARCHIVE, 
-				     FR_PROC_ERROR_NONE, 
+				     FR_ACTION_LOADING_ARCHIVE,
+				     FR_PROC_ERROR_NONE,
 				     NULL);
 
 	/**/
 
 	fr_process_clear (archive->process);
 	fr_command_list (archive->command, password);
-	fr_process_start (archive->process);	
+	fr_process_start (archive->process);
 }
 
 
@@ -1038,13 +1040,13 @@
 
 	if (error != NULL)
 		fr_archive_copy_done (xfer_data->archive, FR_ACTION_LOADING_ARCHIVE, error);
-	else	
+	else
 		load_local_archive (xfer_data->archive, xfer_data->uri, xfer_data->password);
 	xfer_data_free (xfer_data);
 }
 
 
-static void 
+static void
 copy_remote_file_progress (goffset   current_file,
                            goffset   total_files,
                            GFile    *source,
@@ -1054,7 +1056,7 @@
                            gpointer  user_data)
 {
 	XferData *xfer_data = user_data;
-	
+
 	g_signal_emit (G_OBJECT (xfer_data->archive),
 		       fr_archive_signals[PROGRESS],
 		       0,
@@ -1066,7 +1068,7 @@
 copy_remote_file_done_cb (gpointer user_data)
 {
 	XferData *xfer_data = user_data;
-	
+
 	g_source_remove (xfer_data->source_id);
 	copy_remote_file_done (NULL, xfer_data);
 	return FALSE;
@@ -1078,7 +1080,7 @@
 		  const char *password)
 {
 	XferData *xfer_data;
-	
+
 	if (! g_file_query_exists (archive->file, NULL)) {
 		GError *error;
 		error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("The file doesn't exist"));
@@ -1086,18 +1088,18 @@
 		g_error_free (error);
 		return;
 	}
-	
+
 	xfer_data = g_new0 (XferData, 1);
 	xfer_data->archive = archive;
 	xfer_data->uri = g_file_get_uri (archive->file);
 	if (password != NULL)
 		xfer_data->password = g_strdup (password);
-	
+
 	if (! archive->is_remote) {
 		xfer_data->source_id = g_idle_add (copy_remote_file_done_cb, xfer_data);
 		return;
 	}
-	
+
 	g_copy_file_async (archive->file,
 			   archive->local_copy,
 			   G_FILE_COPY_OVERWRITE,
@@ -1110,7 +1112,6 @@
 }
 
 
-/* filename must not be escaped. */
 gboolean
 fr_archive_load (FrArchive  *archive,
 		 const char *uri,
@@ -1144,8 +1145,8 @@
 
 	fr_archive_set_uri (archive, uri);
 	load_local_archive (archive, uri, password);
-	
-	return TRUE;	
+
+	return TRUE;
 }
 
 
@@ -1154,7 +1155,7 @@
 		   const char *password)
 {
 	char *uri;
-	
+
 	g_return_if_fail (archive != NULL);
 	g_return_if_fail (archive->file != NULL);
 
@@ -1167,7 +1168,6 @@
 }
 
 
-/* filename must not be escaped. */
 void
 fr_archive_rename (FrArchive  *archive,
 		   const char *filename)
@@ -1234,7 +1234,6 @@
 }
 
 
-/* Note: all paths unescaped. */
 static FileData *
 find_file_in_archive (FrArchive *archive,
 		      char      *path)
@@ -1256,7 +1255,6 @@
 static void archive_remove (FrArchive *archive, GList *file_list);
 
 
-/* Note: all paths unescaped. */
 static GList *
 newer_files_only (FrArchive  *archive,
 		  GList      *file_list,
@@ -1280,7 +1278,7 @@
 
 		fullpath = g_strconcat (base_dir, "/", filename, NULL);
 		uri = g_filename_to_uri (fullpath, NULL, NULL);
-		
+
 		if (fdata->modified >= get_file_mtime (uri)) {
 			g_free (fullpath);
 			g_free (uri);
@@ -1288,7 +1286,7 @@
 		}
 		g_free (fullpath);
 		g_free (uri);
-		
+
 		newer_files = g_list_prepend (newer_files, g_strdup (scan->data));
 	}
 
@@ -1315,7 +1313,7 @@
 	for (scan = file_list; scan; scan = scan->next) {
 		char *uri = scan->data;
 		char *local_filename;
-		
+
 		local_filename = g_uri_unescape_string (uri, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH);
 		if (local_filename != NULL)
 			local_file_list = g_list_prepend (local_file_list, local_filename);
@@ -1325,7 +1323,6 @@
 }
 
 
-/* Note: all paths unescaped. */
 void
 fr_archive_add (FrArchive     *archive,
 		GList         *file_list,
@@ -1471,7 +1468,6 @@
 }
 
 
-/* Note: all paths unescaped. */
 static void
 fr_archive_add_local_files (FrArchive     *archive,
 			    GList         *file_list,
@@ -1500,10 +1496,10 @@
 			gpointer  user_data)
 {
 	XferData *xfer_data = user_data;
-	
+
 	fr_archive_copy_done (xfer_data->archive, FR_ACTION_COPYING_FILES_FROM_REMOTE, error);
-	
-	if (error == NULL) 		
+
+	if (error == NULL)
 		fr_archive_add_local_files (xfer_data->archive,
 					    xfer_data->file_list,
 					    xfer_data->tmp_dir,
@@ -1515,7 +1511,7 @@
 }
 
 
-static void 
+static void
 copy_remote_files_progress (goffset   current_file,
                             goffset   total_files,
                             GFile    *source,
@@ -1525,7 +1521,7 @@
                             gpointer  user_data)
 {
 	XferData *xfer_data = user_data;
-	
+
 	g_signal_emit (G_OBJECT (xfer_data->archive),
 		       fr_archive_signals[PROGRESS],
 		       0,
@@ -1547,14 +1543,14 @@
 	GHashTable *created_folders;
 	GList      *scan;
 	XferData   *xfer_data;
-	
+
 	created_folders = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free, NULL);
 	for (scan = file_list; scan; scan = scan->next) {
 		char  *partial_filename = scan->data;
 		char  *local_uri;
 		char  *local_folder_uri;
 		char  *remote_uri;
-		
+
 		local_uri = g_strconcat ("file://", tmp_dir, "/", partial_filename, NULL);
 		local_folder_uri = remove_level_from_path (local_uri);
 		if (g_hash_table_lookup (created_folders, local_folder_uri) == NULL) {
@@ -1603,7 +1599,7 @@
 		       fr_archive_signals[START],
 		       0,
 		       FR_ACTION_COPYING_FILES_FROM_REMOTE);
-	
+
 	g_copy_files_async (sources,
 			    destinations,
 			    G_FILE_COPY_OVERWRITE,
@@ -1613,7 +1609,7 @@
 			    xfer_data,
 			    copy_remote_files_done,
 			    xfer_data);
-	
+
 	gio_file_list_free (sources);
 	gio_file_list_free (destinations);
 }
@@ -1628,7 +1624,6 @@
 }
 
 
-/* Note: all paths unescaped. */
 void
 fr_archive_add_files (FrArchive     *archive,
 		      GList         *file_list,
@@ -1641,21 +1636,21 @@
 	if (uri_is_local (base_dir)) {
 		char *local_dir = g_filename_from_uri (base_dir, NULL, NULL);
 		fr_archive_add_local_files (archive,
-					    file_list, 
-					    local_dir, 
-					    dest_dir, 
-					    update, 
-					    password, 
+					    file_list,
+					    local_dir,
+					    dest_dir,
+					    update,
+					    password,
 					    compression);
 		g_free (local_dir);
 	}
 	else
 		copy_remote_files (archive,
-				   file_list, 
-				   base_dir, 
-				   dest_dir, 
-				   update, 
-				   password, 
+				   file_list,
+				   base_dir,
+				   dest_dir,
+				   update,
+				   password,
 				   compression,
 				   fr_archive_get_temp_work_dir (archive));
 }
@@ -1695,14 +1690,14 @@
 
 	if (error != NULL) {
 		fr_archive_action_completed (archive,
-					     FR_ACTION_GETTING_FILE_LIST, 
+					     FR_ACTION_GETTING_FILE_LIST,
 					     (g_error_matches (error, G_FILE_ERROR, G_IO_ERROR_CANCELLED) ? FR_PROC_ERROR_STOPPED : FR_PROC_ERROR_GENERIC),
 					     error->message);
 		return;
 	}
-	
+
 	fr_archive_action_completed (archive,
-				     FR_ACTION_GETTING_FILE_LIST, 
+				     FR_ACTION_GETTING_FILE_LIST,
 				     FR_PROC_ERROR_NONE,
 				     NULL);
 
@@ -1721,7 +1716,6 @@
 }
 
 
-/* Note: all paths unescaped. */
 void
 fr_archive_add_with_wildcard (FrArchive     *archive,
 			      const char    *include_files,
@@ -1750,8 +1744,8 @@
 		       fr_archive_signals[START],
 		       0,
 		       FR_ACTION_GETTING_FILE_LIST);
-					
-	g_directory_list_async (source_dir, 
+
+	g_directory_list_async (source_dir,
 				source_dir,
 				TRUE,
 				follow_links,
@@ -1808,15 +1802,15 @@
 	}
 
 	fr_archive_action_completed (archive,
-				     FR_ACTION_GETTING_FILE_LIST, 
+				     FR_ACTION_GETTING_FILE_LIST,
 				     FR_PROC_ERROR_NONE,
 				     NULL);
 
-	if (archive->command->propAddCanStoreFolders) 
+	if (archive->command->propAddCanStoreFolders)
 		file_list = g_list_concat (file_list, dir_list);
 	else
 		path_list_free (dir_list);
-		
+
 	if (file_list != NULL) {
 		fr_archive_add_files (ad_data->archive,
 				      file_list,
@@ -1832,7 +1826,6 @@
 }
 
 
-/* Note: all paths unescaped. */
 void
 fr_archive_add_directory (FrArchive     *archive,
 			  const char    *directory,
@@ -1859,8 +1852,8 @@
 		       fr_archive_signals[START],
 		       0,
 		       FR_ACTION_GETTING_FILE_LIST);
-			    
-	g_directory_list_all_async (directory, 
+
+	g_directory_list_all_async (directory,
 				    base_dir,
 				    TRUE,
 				    archive->priv->cancellable,
@@ -1868,8 +1861,6 @@
 				    ad_data);
 }
 
-
-/* Note: all paths unescaped. */
 void
 fr_archive_add_items (FrArchive     *archive,
 		      GList         *item_list,
@@ -1896,7 +1887,7 @@
 		       fr_archive_signals[START],
 		       0,
 		       FR_ACTION_GETTING_FILE_LIST);
-				
+
 	g_list_items_async (item_list,
 			    base_dir,
 			    archive->priv->cancellable,
@@ -2079,11 +2070,11 @@
 {
 	GList *scan;
 	char  *archive_uri;
-	
+
 	if (archive->read_only) {
 		fr_archive_action_completed (archive,
-					     FR_ACTION_ADDING_FILES, 
-					     FR_PROC_ERROR_GENERIC, 
+					     FR_ACTION_ADDING_FILES,
+					     FR_PROC_ERROR_GENERIC,
 					     ! archive->have_permissions ? _("You don't have the right permissions.") : _("This archive type cannot be modified"));
 		return;
 	}
@@ -2143,12 +2134,11 @@
 archive_type_has_issues_deleting_non_empty_folders (FrArchive *archive)
 {
 	/*if ((archive->command->files == NULL) || (archive->command->files->len == 0))
-		return FALSE;  FIXME: test with extract_here */		
+		return FALSE;  FIXME: test with extract_here */
 	return ! archive->command->propCanDeleteNonEmptyFolders;
 }
 
 
-/* Note: all paths unescaped. */
 static void
 archive_remove (FrArchive *archive,
 		GList     *file_list)
@@ -2157,7 +2147,7 @@
 	GList    *tmp_file_list = NULL;
 	gboolean  tmp_file_list_created = FALSE;
 	GList    *scan;
-	
+
 	/* file_list == NULL means delete all the files in the archive. */
 
 	if (file_list == NULL) {
@@ -2173,7 +2163,7 @@
 
 	if (archive_type_has_issues_deleting_non_empty_folders (archive)) {
 		GList *folders_to_remove;
-		
+
 		/* remove from the list the files contained in folders to be
 		 * removed. */
 
@@ -2200,7 +2190,7 @@
 
 	if (! tmp_file_list_created)
 		tmp_file_list = g_list_copy (file_list);
-			
+
 	if (file_list_created)
 		g_list_free (file_list);
 
@@ -2229,7 +2219,6 @@
 }
 
 
-/* Note: all paths unescaped. */
 void
 fr_archive_remove (FrArchive     *archive,
 		   GList         *file_list,
@@ -2251,7 +2240,6 @@
 /* -- extract -- */
 
 
-/* Note: all paths escaped, source_dir and dest_dir escaped. */
 static void
 move_files_to_dir (FrArchive  *archive,
 		   GList      *file_list,
@@ -2274,7 +2262,6 @@
 }
 
 
-/* Note: all paths unescaped, temp_dir and dest_dir unescaped. */
 static void
 move_files_in_chunks (FrArchive  *archive,
 		      GList      *file_list,
@@ -2309,7 +2296,6 @@
 }
 
 
-/* Note: all paths escaped, dest_dir unescaped. */
 static void
 extract_in_chunks (FrCommand  *command,
 		   GList      *file_list,
@@ -2477,36 +2463,33 @@
 
 static GList*
 remove_files_contained_in_this_dir (GList      *file_list,
-				    const char *dirname, 
+				    const char *dirname,
 				    gboolean   *changed)
 {
 	GList *scan;
 
 	*changed = FALSE;
-	
+
 	for (scan = file_list; scan; /* empty */) {
 		char *filename = scan->data;
 
 		if (path_in_path (dirname, filename)) {
 			GList *next = scan->next;
-			
+
 			file_list = g_list_remove_link (file_list, scan);
 			g_list_free (scan);
 			*changed = TRUE;
-			
+
 			scan = next;
 		}
 		else
 			scan = scan->next;
 	}
-	
+
 	return file_list;
 }
 
 
-/* Note : All paths unescaped.
- * Note2: Do not escape dest_dir it will escaped in fr_command_extract if
- *        needed. */
 void
 fr_archive_extract_to_local (FrArchive  *archive,
 			     GList      *file_list,
@@ -2544,7 +2527,7 @@
 	extract_all = (file_list == NULL);
 	if (extract_all && (! all_options_supported || ! archive->command->propCanExtractAll)) {
 		int i;
-		
+
 		file_list = NULL;
 		for (i = 0; i < archive->command->files->len; i++) {
 			FileData *fdata = g_ptr_array_index (archive->command->files, i);
@@ -2555,7 +2538,7 @@
 
 	if (extract_all && (file_list == NULL))
 		fr_command_set_n_files (archive->command, archive->command->files->len);
-	else 
+	else
 		fr_command_set_n_files (archive->command, g_list_length (file_list));
 
 	if (all_options_supported) {
@@ -2565,9 +2548,9 @@
 			created_filtered_list = TRUE;
 			filtered = g_list_copy (file_list);
 			filtered = g_list_sort (filtered, (GCompareFunc) strcmp);
-			for (scan = filtered; scan; /* empty */) {  
+			for (scan = filtered; scan; /* empty */) {
 				gboolean changed = FALSE;
-				
+
 				filtered = remove_files_contained_in_this_dir (filtered, scan->data, &changed);
 				if (changed)
 					scan = filtered;
@@ -2731,7 +2714,7 @@
 {
 	g_free (archive->priv->extraction_destination);
 	archive->priv->extraction_destination = g_strdup (destination);
-	
+
 	g_free (archive->priv->temp_extraction_dir);
 	archive->priv->temp_extraction_dir = NULL;
 
@@ -2749,7 +2732,7 @@
 	}
 	else {
 		char *local_destination;
-		
+
 		local_destination = g_filename_from_uri (destination, NULL, NULL);
 		fr_archive_extract_to_local (archive,
 					     file_list,
@@ -2773,26 +2756,26 @@
 	const char *ext;
 	char       *new_name;
 	char       *desired_destination = NULL;
-	
+
 	directory = g_file_get_parent (file);
 	directory_uri = g_file_get_uri (directory);
-	
+
 	name = g_file_get_basename (file);
 	ext = get_archive_filename_extension (name);
 	if (ext == NULL)
 		/* if no extension is present add a suffix to the name... */
 		new_name = g_strconcat (name, "_FILES", NULL);
-	else 
+	else
 		/* ...else use the name without the extension */
-		new_name = g_strndup (name, strlen (name) - strlen (ext)); 
-	
+		new_name = g_strndup (name, strlen (name) - strlen (ext));
+
 	desired_destination = g_strconcat (directory_uri, "/", new_name, NULL);
-	
+
 	g_free (new_name);
 	g_free (name);
 	g_free (directory_uri);
 	g_object_unref (directory);
-	
+
 	return desired_destination;
 }
 
@@ -2805,32 +2788,32 @@
 	char  *destination = NULL;
 	int    n = 1;
 	GFile *directory;
-	
+
 	desired_destination = get_desired_destination_for_archive (file);
 	do {
 		*error = NULL;
-		 
+
 		g_free (destination);
 		if (n == 1)
 			destination = g_strdup (desired_destination);
 		else
 			destination = g_strdup_printf ("%s%%20(%d)", desired_destination, n);
-			
+
 		directory = g_file_new_for_uri (destination);
 		g_file_make_directory (directory, NULL, error);
 		g_object_unref (directory);
-		
+
 		n++;
 	} while (g_error_matches (*error, G_IO_ERROR, G_IO_ERROR_EXISTS));
-	
+
 	g_free (desired_destination);
-	
+
 	if (*error != NULL) {
 		g_warning ("could not create destination folder: %s\n", (*error)->message);
 		g_free (destination);
 		destination = NULL;
 	}
-	
+
 	return destination;
 }
 
@@ -2844,7 +2827,7 @@
 {
 	char   *destination;
 	GError *error = NULL;
-	
+
 	destination = get_extract_here_destination (archive->file, &error);
 	if (error != NULL) {
 		fr_archive_action_completed (archive,
@@ -2854,7 +2837,7 @@
 		g_clear_error (&error);
 		return FALSE;
 	}
-	
+
 	archive->priv->extract_here = TRUE;
 	fr_archive_extract (archive,
 			    NULL,
@@ -2866,9 +2849,9 @@
 			    password);
 
 	g_free (destination);
-	
-	return TRUE;			    
-}			 
+
+	return TRUE;
+}
 
 
 const char *
@@ -2901,7 +2884,7 @@
 	mime_type = get_mime_type_from_content (file);
 	if (mime_type != NULL) {
 		int i;
-		
+
 		for (i = 0; mime_type_desc[i].mime_type != NULL; i++) {
 			if (strcmp (mime_type_desc[i].mime_type, mime_type) == 0) {
 				g_object_unref (file);

Modified: trunk/src/fr-command-7z.c
==============================================================================
--- trunk/src/fr-command-7z.c	(original)
+++ trunk/src/fr-command-7z.c	Sun Jun 29 07:31:08 2008
@@ -130,7 +130,7 @@
 		}
 		return;
 	}
-	
+
 	if (p7z_comm->fdata == NULL)
 		p7z_comm->fdata = file_data_new ();
 
@@ -142,11 +142,11 @@
 	}
 
 	fdata = p7z_comm->fdata;
-	
+
 	if (strcmp (fields[0], "Path") == 0) {
 		fdata->free_original_path = TRUE;
 		fdata->original_path = g_strdup (fields[1]);
-		fdata->full_path = g_strconcat ((fdata->original_path[0] != '/') ? "/" : "", 
+		fdata->full_path = g_strconcat ((fdata->original_path[0] != '/') ? "/" : "",
 						fdata->original_path,
 						(fdata->dir && (fdata->original_path[strlen (fdata->original_path - 1)] != '/')) ? "/" : "",
 						NULL);
@@ -159,7 +159,7 @@
 	}
 	else if (strcmp (fields[0], "Modified") == 0) {
 		char **modified_fields;
-		
+
 		modified_fields = g_strsplit (fields[1], " ", 2);
 		fdata->modified = mktime_from_string (modified_fields[0], modified_fields[1]);
 		g_strfreev (modified_fields);
@@ -197,7 +197,7 @@
 {
 	if (always_specify || ((password != NULL) && (*password != 0))) {
 		char *arg;
-		
+
 		arg = g_strconcat ("-p", password, NULL);
 		fr_process_add_arg (comm->process, arg);
 		g_free (arg);
@@ -210,7 +210,7 @@
 		    const char *password)
 {
 	FrCommand7z *p7z_comm = FR_COMMAND_7Z (comm);
-	
+
 	fr_process_set_out_line_func (FR_COMMAND (comm)->process,
 				      list__process_line,
 				      comm);
@@ -302,10 +302,10 @@
 
 	if (is_mime_type (comm->mime_type, "application/x-executable"))
 		fr_process_add_arg (comm->process, "-sfx");
-		
+
 	fr_process_add_arg (comm->process, comm->filename);
 
-	for (scan = file_list; scan; scan = scan->next) 
+	for (scan = file_list; scan; scan = scan->next)
 		fr_process_add_arg (comm->process, scan->data);
 
 	fr_process_end_command (comm->process);
@@ -333,13 +333,13 @@
 	fr_process_add_arg (comm->process, "-bd");
 	fr_process_add_arg (comm->process, "-y");
 	add_password_arg (comm, password, FALSE);
-	
-	if (dest_dir != NULL) 
+
+	if (dest_dir != NULL)
 		fr_process_add_arg_concat (comm->process, "-o", dest_dir, NULL);
 
 	fr_process_add_arg (comm->process, comm->filename);
 
-	for (scan = file_list; scan; scan = scan->next) 
+	for (scan = file_list; scan; scan = scan->next)
 		fr_process_add_arg (comm->process, scan->data);
 
 	fr_process_end_command (comm->process);
@@ -364,9 +364,9 @@
 fr_command_7z_handle_error (FrCommand   *comm,
 			    FrProcError *error)
 {
-	if (error->type != FR_PROC_ERROR_COMMAND_ERROR) 
+	if (error->type != FR_PROC_ERROR_COMMAND_ERROR)
 		return;
-		
+
 	if (error->status <= 1) {
 		error->type = FR_PROC_ERROR_NONE;
 	}
@@ -375,8 +375,10 @@
 
 		for (scan = g_list_last (comm->process->out.raw); scan; scan = scan->prev) {
 			char *line = scan->data;
-				
-			if (strstr (line, "Wrong password?") != NULL) {
+
+			if ((strstr (line, "Wrong password?") != NULL)
+			    || (strstr (line, "Enter password") != NULL))
+			{
 				error->type = FR_PROC_ERROR_ASK_PASSWORD;
 				break;
 			}
@@ -392,7 +394,7 @@
 				    /*"application/x-cbr",*/
 				    "application/x-cbz",
 				    "application/x-executable",
-				    "application/x-rar", 
+				    "application/x-rar",
 				    "application/zip",
 				    NULL };
 
@@ -404,19 +406,19 @@
 }
 
 
-FrCommandCap   
+FrCommandCap
 fr_command_7z_get_capabilities (FrCommand  *comm,
 			        const char *mime_type)
 {
 	FrCommandCap capabilities;
-	
+
 	capabilities = FR_COMMAND_CAP_ARCHIVE_MANY_FILES;
 	if (! is_program_in_path ("7za") && ! is_program_in_path ("7zr") && ! is_program_in_path ("7z"))
 		return capabilities;
 
 	if (is_mime_type (mime_type, "application/x-7z-compressed"))
-		capabilities |= FR_COMMAND_CAP_READ_WRITE;	
-	
+		capabilities |= FR_COMMAND_CAP_READ_WRITE;
+
 	else if (is_program_in_path ("7z")) {
 		capabilities |= FR_COMMAND_CAP_READ;
 		if (is_mime_type (mime_type, "application/x-cbr")
@@ -427,7 +429,7 @@
 			capabilities |= FR_COMMAND_CAP_WRITE;
 		}
 	}
-	
+
 	return capabilities;
 }
 

Modified: trunk/src/fr-command-jar.c
==============================================================================
--- trunk/src/fr-command-jar.c	(original)
+++ trunk/src/fr-command-jar.c	Sun Jun 29 07:31:08 2008
@@ -66,7 +66,7 @@
 		char *filename = scan->data;
 		char *path = build_uri (base_dir, filename, NULL);
 		char *package = NULL;
-				
+
 		if (file_extension_is (filename, ".java"))
 			package = get_package_name_from_java_file (path);
 		else if (file_extension_is (filename, ".class"))
@@ -76,14 +76,14 @@
 			zip_list = g_list_append (zip_list, g_strdup (filename));
 		else {
 			JarData *newdata = g_new0 (JarData, 1);
-			
+
 			newdata->package_minus_one_level = remove_level_from_path (package);
 			newdata->link_name = g_strdup (file_name_from_path (package));
 			newdata->rel_path = remove_level_from_path (filename);
 			newdata->filename = g_strdup (file_name_from_path (filename));
 			jardata_list = g_list_append (jardata_list, newdata);
 		}
-		
+
 		g_free (package);
 		g_free (path);
 	}
@@ -95,33 +95,33 @@
 		char    *old_link;
 		char    *link_name;
 		int      retval;
-		
+
 		pack_path = build_uri (tmp_dir, jdata->package_minus_one_level, NULL);
-		if (! make_directory_tree_from_path (pack_path, 0755, NULL)) { 
+		if (! make_directory_tree_from_path (pack_path, 0755, NULL)) {
 			g_free (pack_path);
 			continue;
 		}
-		
+
 		old_link = build_uri (base_dir, jdata->rel_path, NULL);
 		link_name = g_build_filename (pack_path, jdata->link_name, NULL);
 
 		retval = symlink (old_link, link_name);
-		if ((retval != -1) || (errno == EEXIST)) 
-			jar_list = g_list_append (jar_list, 
+		if ((retval != -1) || (errno == EEXIST))
+			jar_list = g_list_append (jar_list,
 						  g_build_filename (jdata->package_minus_one_level,
 							            jdata->link_name,
-						      	            jdata->filename, 
+						      	            jdata->filename,
 						      	            NULL));
-						      	            
+
 		g_free (link_name);
 		g_free (old_link);
 		g_free (pack_path);
 	}
 
-	if (zip_list != NULL) 
+	if (zip_list != NULL)
 		parent_class->add (comm, zip_list, base_dir, update, FALSE, password, compression);
-	
-	if (jar_list != NULL) 
+
+	if (jar_list != NULL)
 		parent_class->add (comm, jar_list, tmp_dir, update, FALSE, password, compression);
 
 	fr_process_begin_command (proc, "rm");
@@ -147,26 +147,54 @@
 }
 
 
-static void 
+const char *jar_mime_type[] = { "application/x-java-archive",
+				NULL };
+
+
+const char **
+fr_command_jar_get_mime_types (FrCommand *comm)
+{
+	return jar_mime_type;
+}
+
+
+FrCommandCap
+fr_command_jar_get_capabilities (FrCommand  *comm,
+			         const char *mime_type)
+{
+	FrCommandCap capabilities;
+
+	capabilities |= FR_COMMAND_CAP_ARCHIVE_MANY_FILES;
+	if (is_program_in_path ("zip"))
+		capabilities |= FR_COMMAND_CAP_READ_WRITE;
+
+	return capabilities;
+}
+
+
+static void
 fr_command_jar_class_init (FrCommandJarClass *class)
 {
 	GObjectClass   *gobject_class = G_OBJECT_CLASS(class);
 	FrCommandClass *afc = FR_COMMAND_CLASS (class);
 
 	parent_class = g_type_class_peek_parent (class);
-	
+
 	gobject_class->finalize = fr_command_jar_finalize;
+
 	afc->add = fr_command_jar_add;
+	afc->get_mime_types = fr_command_jar_get_mime_types;
+	afc->get_capabilities = fr_command_jar_get_capabilities;
 }
 
- 
-static void 
+
+static void
 fr_command_jar_init (FrCommand *comm)
 {
 }
 
 
-static void 
+static void
 fr_command_jar_finalize (GObject *object)
 {
         g_return_if_fail (object != NULL);

Modified: trunk/src/fr-window.c
==============================================================================
--- trunk/src/fr-window.c	(original)
+++ trunk/src/fr-window.c	Sun Jun 29 07:31:08 2008
@@ -93,7 +93,7 @@
 #define OCTET_ATOM gdk_atom_intern  ("application/octet-stream", FALSE)
 #define XFR_ATOM   gdk_atom_intern  ("XdndFileRoller0", FALSE)
 
-#define FR_CLIPBOARD (gdk_atom_intern_static_string ("_FILE_ROLLER_SPECIAL_CLIPBOARD")) 
+#define FR_CLIPBOARD (gdk_atom_intern_static_string ("_FILE_ROLLER_SPECIAL_CLIPBOARD"))
 #define FR_SPECIAL_URI_LIST (gdk_atom_intern_static_string ("application/file-roller-uri-list"))
 
 static GtkTargetEntry clipboard_targets[] = {
@@ -181,10 +181,10 @@
 fr_clipboard_data_new (void)
 {
 	FrClipboardData *data;
-	
+
 	data = g_new0 (FrClipboardData, 1);
 	data->refs = 1;
-	
+
 	return data;
 }
 
@@ -198,13 +198,13 @@
 
 
 static void
-fr_clipboard_data_unref (FrClipboardData *clipboard_data) 
+fr_clipboard_data_unref (FrClipboardData *clipboard_data)
 {
 	if (clipboard_data == NULL)
 		return;
 	if (--clipboard_data->refs > 0)
 		return;
-	
+
 	g_free (clipboard_data->archive_filename);
 	g_free (clipboard_data->archive_password);
 	g_free (clipboard_data->base_dir);
@@ -212,13 +212,13 @@
 	g_free (clipboard_data->current_dir);
 	g_list_foreach (clipboard_data->files, (GFunc) g_free, NULL);
 	g_list_free (clipboard_data->files);
-	g_free (clipboard_data);	
+	g_free (clipboard_data);
 }
 
 
 static void
 fr_clipboard_data_set_password (FrClipboardData *clipboard_data,
-			        const char      *password) 
+			        const char      *password)
 {
 	if (clipboard_data->archive_password != password)
 		g_free (clipboard_data->archive_password);
@@ -257,7 +257,7 @@
 	GtkTreePath       *tree_hover_path;
 	GtkTreePath       *list_hover_path;
 	GtkTreeViewColumn *filename_column;
-	
+
 	gboolean         filter_mode;
 	gint             current_view_length;
 
@@ -289,7 +289,7 @@
 	gboolean         asked_for_password;
 	gboolean         ask_to_open_destination_after_extraction;
 	gboolean         destroy_with_error_dialog;
-	
+
 	FRBatchAction    current_batch_action;
 
 	gboolean         give_focus_to_the_list;
@@ -325,10 +325,10 @@
 
 	FrClipboardData *clipboard_data;
 	FrClipboardData *copy_data;
-	
+
 	FrArchive       *copy_from_archive;
 	guint            check_clipboard;
-	
+
 	GtkActionGroup  *actions;
 
 	GtkRecentManager *recent_manager;
@@ -368,7 +368,7 @@
 	char             *pd_last_archive;
 
 	/* update dialog data */
-	
+
 	gpointer          update_dialog;
 	GList            *open_files;
 
@@ -486,7 +486,7 @@
 		path_list_free (window->priv->history);
 	window->priv->history = NULL;
 	window->priv->history_current = NULL;
-	g_free (window->priv->last_location);	
+	g_free (window->priv->last_location);
 	window->priv->last_location = NULL;
 }
 
@@ -495,11 +495,11 @@
 fr_window_free_open_files (FrWindow *window)
 {
 	GList *scan;
-	
+
 	for (scan = window->priv->open_files; scan; scan = scan->next) {
 		OpenFile *file = scan->data;
-		
-		if (file->monitor != NULL) 
+
+		if (file->monitor != NULL)
 			g_file_monitor_cancel (file->monitor);
 		open_file_free (file);
 	}
@@ -516,19 +516,19 @@
 		g_free (window->priv->convert_data.new_file);
 		window->priv->convert_data.new_file = NULL;
 	}
-	
+
 	window->priv->convert_data.converting = FALSE;
-	
+
 	if (window->priv->convert_data.temp_dir != NULL) {
 		g_free (window->priv->convert_data.temp_dir);
 		window->priv->convert_data.temp_dir = NULL;
 	}
-	
+
 	if (window->priv->convert_data.new_archive != NULL) {
 		g_object_unref (window->priv->convert_data.new_archive);
 		window->priv->convert_data.new_archive = NULL;
 	}
-	
+
 	if (window->priv->convert_data.password != NULL) {
 		g_free (window->priv->convert_data.password);
 		window->priv->convert_data.password = NULL;
@@ -583,7 +583,7 @@
 
 	g_free (priv->password);
 	g_free (priv->password_for_paste);
-		
+
 	g_object_unref (priv->list_store);
 
 	if (window->priv->clipboard_data != NULL) {
@@ -602,11 +602,11 @@
 		g_source_remove (priv->check_clipboard);
 		priv->check_clipboard = 0;
 	}
-	
+
 	fr_window_free_open_files (window);
-	
+
 	fr_window_convert_data_free (window, TRUE);
-	
+
 	g_clear_error (&priv->drag_error);
 	path_list_free (priv->drag_file_list);
 	priv->drag_file_list = NULL;
@@ -620,7 +620,7 @@
 		gtk_widget_destroy (priv->folder_popup_menu);
 		priv->folder_popup_menu = NULL;
 	}
-	
+
 	if (priv->sidebar_folder_popup_menu != NULL) {
 		gtk_widget_destroy (priv->sidebar_folder_popup_menu);
 		priv->sidebar_folder_popup_menu = NULL;
@@ -652,7 +652,7 @@
 		g_object_unref (window->archive);
 		window->archive = NULL;
 	}
-		
+
 	if (window->priv != NULL) {
 		fr_window_free_private_data (window);
 		g_free (window->priv);
@@ -693,32 +693,32 @@
 void
 fr_window_close (FrWindow *window)
 {
-	if (window->priv->activity_ref > 0) 
+	if (window->priv->activity_ref > 0)
 		return;
-		
+
 	window->priv->closing = TRUE;
-	
+
 	if (window->priv->check_clipboard != 0) {
 		g_source_remove (window->priv->check_clipboard);
 		window->priv->check_clipboard = 0;
 	}
-	
+
 	if (GTK_WIDGET_REALIZED (window)) {
 		int width, height;
-		
+
 		gdk_drawable_get_size (GTK_WIDGET (window)->window, &width, &height);
 		eel_gconf_set_integer (PREF_UI_WINDOW_WIDTH, width);
 		eel_gconf_set_integer (PREF_UI_WINDOW_HEIGHT, height);
-		
+
 		width = gtk_paned_get_position (GTK_PANED (window->priv->paned));
 		if (width > 0)
 			eel_gconf_set_integer (PREF_UI_SIDEBAR_WIDTH, width);
-		
+
 		width = gtk_tree_view_column_get_width (window->priv->filename_column);
 		if (width > 0)
 			eel_gconf_set_integer (PREF_NAME_COLUMN_WIDTH, width);
 	}
-	
+
 	g_idle_add (close__step2, window);
 }
 
@@ -754,7 +754,7 @@
 	window->priv = g_new0 (FrWindowPrivateData, 1);
 	window->priv->update_dropped_files = FALSE;
 	window->priv->filter_mode = FALSE;
-	
+
 	WindowList = g_list_prepend (WindowList, window);
 }
 
@@ -855,12 +855,12 @@
 {
 	GPtrArray *files;
 	int        i;
-	
+
 	files = g_ptr_array_sized_new (128);
-	
+
 	for (i = 0; i < window->archive->command->files->len; i++) {
 		FileData *fdata = g_ptr_array_index (window->archive->command->files, i);
-		
+
 		if (fdata->list_name == NULL)
 			continue;
 		g_ptr_array_add (files, fdata);
@@ -989,7 +989,7 @@
 		return sort_by_name (ptr1, ptr2);
 
 	/* 2 files */
-	
+
 	result = strcasecmp (fdata1->path, fdata2->path);
 	if (result == 0)
 		return sort_by_name (ptr1, ptr2);
@@ -1018,14 +1018,14 @@
 	char    *dirname;
 	int      dirname_l;
 	int      i;
-	
+
 	dirname = g_strconcat (current_dir, name, "/", NULL);
 	dirname_l = strlen (dirname);
 
 	size = 0;
 	for (i = 0; i < window->archive->command->files->len; i++) {
 		FileData *fd = g_ptr_array_index (window->archive->command->files, i);
-		
+
 		if (strncmp (dirname, fd->full_path, dirname_l) == 0)
 			size += fd->size;
 	}
@@ -1048,7 +1048,7 @@
 
 	if (fdata->dir || (fdata->name == NULL))
 		return FALSE;
-		
+
 	return strncasecmp (fdata->name, filter, strlen (filter)) == 0;
 }
 
@@ -1193,7 +1193,7 @@
 get_mime_type_icon (const char *mime_type)
 {
 	GdkPixbuf *pixbuf = NULL;
-	
+
 	pixbuf = g_hash_table_lookup (tree_pixbuf_hash, mime_type);
 	if (pixbuf != NULL) {
 		g_object_ref (G_OBJECT (pixbuf));
@@ -1234,9 +1234,9 @@
 	}
 
 	icon = g_content_type_get_icon (content_type);
-	pixbuf = get_icon_pixbuf (icon_theme, G_THEMED_ICON (icon), file_list_icon_size);				
+	pixbuf = get_icon_pixbuf (icon_theme, G_THEMED_ICON (icon), file_list_icon_size);
 	g_object_unref (icon);
-			
+
 	if (pixbuf == NULL)
 		return NULL;
 
@@ -1264,7 +1264,7 @@
 		g_object_ref (G_OBJECT (pixbuf));
 		return pixbuf;
 	}
-	
+
 	pixbuf = gtk_icon_theme_load_icon (icon_theme,
 					   "emblem-nowrite",
 					   file_list_icon_size,
@@ -1272,11 +1272,11 @@
 					   NULL);
 	if (pixbuf == NULL)
 		return NULL;
-		
+
 	pixbuf = gdk_pixbuf_copy (pixbuf);
 	g_hash_table_insert (pixbuf_hash, (gpointer) "emblem-nowrite", pixbuf);
 	g_object_ref (G_OBJECT (pixbuf));
-	
+
 	return pixbuf;
 }
 
@@ -1407,7 +1407,7 @@
 	int      tot_n, sel_n;
 	goffset  tot_size, sel_size;
 	GList   *scan;
-	
+
 	if (window == NULL)
 		return;
 
@@ -1422,12 +1422,12 @@
 	if (window->priv->archive_present) {
 		GPtrArray *files = fr_window_get_current_dir_list (window);
 		int        i;
-		
+
 		for (i = 0; i < files->len; i++) {
 			FileData *fd = g_ptr_array_index (files, i);
-			
+
 			tot_n++;
-			if (! file_data_is_dir (fd)) 
+			if (! file_data_is_dir (fd))
 				tot_size += fd->size;
 			else
 				tot_size += fd->dir_size;
@@ -1440,12 +1440,12 @@
 
 	if (window->priv->archive_present) {
 		GList *selection = get_selection_as_fd (window);
-		
+
 		for (scan = selection; scan; scan = scan->next) {
 			FileData *fd = scan->data;
-			
+
 			sel_n++;
-			if (! file_data_is_dir (fd)) 
+			if (! file_data_is_dir (fd))
 				sel_size += fd->size;
 		}
 		g_list_free (selection);
@@ -1453,7 +1453,7 @@
 
 	size_txt = g_format_size_for_display (tot_size);
 	sel_size_txt = g_format_size_for_display (sel_size);
-	
+
 	if (tot_n == 0)
 		archive_info = g_strdup ("");
 	else
@@ -1502,8 +1502,8 @@
 
 		icon = get_icon (GTK_WIDGET (window), fdata);
 		utf8_name = g_filename_display_name (fdata->list_name);
-		emblem = get_emblem (GTK_WIDGET (window), fdata); 
-				
+		emblem = get_emblem (GTK_WIDGET (window), fdata);
+
 		if (file_data_is_dir (fdata)) {
 			char *utf8_path;
 			char *tmp;
@@ -1512,19 +1512,19 @@
 
 			if (fdata->list_dir)
 				tmp = remove_ending_separator (fr_window_get_current_location (window));
-				
+
 			else
 				tmp = remove_level_from_path (fdata->path);
 			utf8_path = g_filename_display_name (tmp);
 			g_free (tmp);
 
 			s_size = g_format_size_for_display (fdata->dir_size);
-				
-			if (fdata->list_dir) 
+
+			if (fdata->list_dir)
 				s_time = g_strdup ("");
 			else
 				s_time = get_time_string (fdata->modified);
-			
+
 			gtk_list_store_set (window->priv->list_store, &iter,
 					    COLUMN_FILE_DATA, fdata,
 					    COLUMN_ICON, icon,
@@ -1571,11 +1571,11 @@
 		if (emblem != NULL)
 			g_object_unref (emblem);
 	}
-	
-	gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (window->priv->list_store), 
-					      get_column_from_sort_method (window->priv->sort_method), 
+
+	gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (window->priv->list_store),
+					      get_column_from_sort_method (window->priv->sort_method),
 					      window->priv->sort_type);
-					      
+
 	fr_window_update_statusbar_list_info (window);
 	fr_window_stop_activity_mode (window);
 }
@@ -1587,7 +1587,7 @@
 {
 	char *path_a = *((char**) a);
 	char *path_b = *((char**) b);
-	
+
 	return strcmp (path_a, path_b);
 }
 
@@ -1599,7 +1599,7 @@
 			 GtkTreeIter *iter)
 {
 	gboolean    result = FALSE;
-	
+
 	if (! gtk_tree_model_iter_children (GTK_TREE_MODEL (window->priv->tree_store), iter, parent))
 		return FALSE;
 
@@ -1611,20 +1611,20 @@
 			*iter = tmp;
 			return TRUE;
 		}
-		
+
 		gtk_tree_model_get (GTK_TREE_MODEL (window->priv->tree_store),
 				    iter,
 				    TREE_COLUMN_PATH, &iter_path,
-				    -1);			    
-				    
+				    -1);
+
 		if ((iter_path != NULL) && (strcmp (path, iter_path) == 0)) {
 			result = TRUE;
 			g_free (iter_path);
 			break;
-		}				    
+		}
 		g_free (iter_path);
 	} while (gtk_tree_model_iter_next (GTK_TREE_MODEL (window->priv->tree_store), iter));
-	
+
 	return result;
 }
 
@@ -1635,7 +1635,7 @@
 	       gboolean    sensitive)
 {
 	GtkAction *action;
-	
+
 	action = gtk_action_group_get_action (window->priv->actions, action_name);
 	g_object_set (action, "sensitive", sensitive, NULL);
 }
@@ -1647,7 +1647,7 @@
 	const char *current_dir = fr_window_get_current_location (window);
 	char       *path;
 	GtkTreeIter iter;
-	
+
 	if (window->priv->list_mode == FR_WINDOW_LIST_MODE_FLAT) {
 		gtk_widget_hide (window->priv->location_bar);
 		return;
@@ -1656,7 +1656,7 @@
 	gtk_widget_show (window->priv->location_bar);
 
 	gtk_entry_set_text (GTK_ENTRY (window->priv->location_entry), window->priv->archive_present? current_dir: "");
-	
+
 	set_sensitive (window, "GoBack", window->priv->archive_present && (current_dir != NULL) && (window->priv->history_current != NULL) && (window->priv->history_current->next != NULL));
 	set_sensitive (window, "GoForward", window->priv->archive_present && (current_dir != NULL) && (window->priv->history_current != NULL) && (window->priv->history_current->prev != NULL));
 	set_sensitive (window, "GoUp", window->priv->archive_present && (current_dir != NULL) && (strcmp (current_dir, "/") != 0));
@@ -1673,11 +1673,11 @@
 	if (get_tree_iter_from_path (window, path, NULL, &iter)) {
 		GtkTreeSelection *selection;
 		GtkTreePath      *t_path;
-		
+
 		t_path = gtk_tree_model_get_path (GTK_TREE_MODEL (window->priv->tree_store), &iter);
 		gtk_tree_view_expand_to_path (GTK_TREE_VIEW (window->priv->tree_view), t_path);
 		gtk_tree_path_free (t_path);
-		
+
 		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (window->priv->tree_view));
 		gtk_tree_selection_select_iter (selection, &iter);
 	}
@@ -1692,65 +1692,65 @@
 	GHashTable *dir_cache;
 	int         i;
 	GdkPixbuf  *icon;
-	
+
 	gtk_tree_store_clear (window->priv->tree_store);
 
-	if (! window->priv->view_folders  
-	    || ! window->priv->archive_present 
-	    || (window->priv->list_mode == FR_WINDOW_LIST_MODE_FLAT)) 
+	if (! window->priv->view_folders
+	    || ! window->priv->archive_present
+	    || (window->priv->list_mode == FR_WINDOW_LIST_MODE_FLAT))
 	{
 		gtk_widget_set_sensitive (window->priv->tree_view, FALSE);
 		gtk_widget_hide (window->priv->sidepane);
 		return;
 	}
-	else { 
+	else {
 		gtk_widget_set_sensitive (window->priv->tree_view, TRUE);
 		if (! GTK_WIDGET_VISIBLE (window->priv->sidepane))
 			gtk_widget_show_all (window->priv->sidepane);
 	}
 
-	if (GTK_WIDGET_REALIZED (window->priv->tree_view)) 
+	if (GTK_WIDGET_REALIZED (window->priv->tree_view))
 		gtk_tree_view_scroll_to_point (GTK_TREE_VIEW (window->priv->tree_view), 0, 0);
-	
+
 	/**/
-	
+
 	dirs = g_ptr_array_sized_new (128);
 
 	dir_cache = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL);
 	for (i = 0; i < window->archive->command->files->len; i++) {
 		FileData *fdata = g_ptr_array_index (window->archive->command->files, i);
 		char     *dir;
-		
+
 		if (gtk_entry_get_text (GTK_ENTRY (window->priv->filter_entry)) != NULL) {
 			if (! file_data_respects_filter (window, fdata))
 				continue;
 		}
-		
+
 		if (fdata->dir)
 			dir = remove_ending_separator (fdata->full_path);
-		else 
+		else
 			dir = remove_level_from_path (fdata->full_path);
 
 		while ((dir != NULL) && (strcmp (dir, "/") != 0)) {
 			char *new_dir;
-			
-			if (g_hash_table_lookup (dir_cache, dir) != NULL) 
+
+			if (g_hash_table_lookup (dir_cache, dir) != NULL)
 				break;
 
 			new_dir = dir;
 			g_ptr_array_add (dirs, new_dir);
 			g_hash_table_replace (dir_cache, new_dir, "1");
-			
+
 			dir = remove_level_from_path (new_dir);
 		}
-		
+
 		g_free (dir);
-	}	
+	}
 	g_hash_table_destroy (dir_cache);
-	
+
 	g_ptr_array_sort (dirs, path_compare);
 	dir_cache = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) gtk_tree_path_free);
-		
+
 	/**/
 
 	icon = get_mime_type_icon (MIME_TYPE_ARCHIVE);
@@ -1758,26 +1758,26 @@
 		GtkTreeIter  node;
 		char        *uri;
 		char        *name;
-		
+
 		uri = g_file_get_uri (window->archive->file);
 		name = g_uri_display_basename (uri);
-		
+
 		gtk_tree_store_append (window->priv->tree_store, &node, NULL);
 		gtk_tree_store_set (window->priv->tree_store, &node,
 				    TREE_COLUMN_ICON, icon,
-				    TREE_COLUMN_NAME, name, 
+				    TREE_COLUMN_NAME, name,
 				    TREE_COLUMN_PATH, "/",
 				    TREE_COLUMN_WEIGHT, PANGO_WEIGHT_BOLD,
 				    -1);
 		g_hash_table_replace (dir_cache, "/", gtk_tree_model_get_path (GTK_TREE_MODEL (window->priv->tree_store), &node));
-		
+
 		g_free (name);
 		g_free (uri);
 	}
 	g_object_unref (icon);
-	
+
 	/**/
-	
+
 	icon = get_mime_type_icon (MIME_TYPE_DIRECTORY);
 	for (i = 0; i < dirs->len; i++) {
 		char        *dir = g_ptr_array_index (dirs, i);
@@ -1785,11 +1785,11 @@
 		GtkTreePath *parent_path;
 		GtkTreeIter  parent;
 		GtkTreeIter  node;
-			
+
 		parent_dir = remove_level_from_path (dir);
-		if (parent_dir == NULL)	
+		if (parent_dir == NULL)
 			continue;
-			
+
 		parent_path = g_hash_table_lookup (dir_cache, parent_dir);
 		gtk_tree_model_get_iter (GTK_TREE_MODEL (window->priv->tree_store),
 					 &parent,
@@ -1797,20 +1797,20 @@
 		gtk_tree_store_append (window->priv->tree_store, &node, &parent);
 		gtk_tree_store_set (window->priv->tree_store, &node,
 				    TREE_COLUMN_ICON, icon,
-				    TREE_COLUMN_NAME, file_name_from_path (dir), 
+				    TREE_COLUMN_NAME, file_name_from_path (dir),
 				    TREE_COLUMN_PATH, dir,
 				    TREE_COLUMN_WEIGHT, PANGO_WEIGHT_NORMAL,
 				    -1);
-		g_hash_table_replace (dir_cache, dir, gtk_tree_model_get_path (GTK_TREE_MODEL (window->priv->tree_store), &node));		    
+		g_hash_table_replace (dir_cache, dir, gtk_tree_model_get_path (GTK_TREE_MODEL (window->priv->tree_store), &node));
 
 		g_free (parent_dir);
 	}
 	g_hash_table_destroy (dir_cache);
 	if (icon != NULL)
 		g_object_unref (icon);
-			
+
 	g_ptr_array_free (dirs, TRUE);
-	
+
 	fr_window_update_current_location (window);
 }
 
@@ -1824,7 +1824,7 @@
 	if ((filter == NULL) || (*filter == '\0'))
 		gtk_widget_hide (window->priv->filter_bar);
 	else
-		gtk_widget_show (window->priv->filter_bar);	
+		gtk_widget_show (window->priv->filter_bar);
 }
 
 
@@ -1835,7 +1835,7 @@
 	GPtrArray  *files;
 	gboolean    free_files = FALSE;
 
-	if (GTK_WIDGET_REALIZED (window->priv->list_view)) 
+	if (GTK_WIDGET_REALIZED (window->priv->list_view))
 		gtk_tree_view_scroll_to_point (GTK_TREE_VIEW (window->priv->list_view), 0, 0);
 
 	gtk_list_store_clear (window->priv->list_store);
@@ -1854,7 +1854,7 @@
 
 		return;
 	}
-	else { 
+	else {
 		gtk_widget_set_sensitive (window->priv->list_view, TRUE);
 		if (! GTK_WIDGET_VISIBLE (window->priv->list_view))
 			gtk_widget_show_all (window->priv->list_view->parent);
@@ -1889,7 +1889,7 @@
 			fr_window_history_add (window, current_dir);
 		}
 		g_free (current_dir);
-		
+
 		g_ptr_array_sort (window->archive->command->files, sort_by_full_path);
 		fr_window_compute_list_names (window, window->archive->command->files);
 		files = fr_window_get_current_dir_list (window);
@@ -1903,9 +1903,9 @@
 
 	if (update_view)
 		fr_window_populate_file_list (window, files);
-		
+
 	if (free_files)
-		g_ptr_array_free (files, TRUE);	
+		g_ptr_array_free (files, TRUE);
 }
 
 
@@ -1996,18 +1996,18 @@
 	gboolean      no_archive;
 	gboolean      ro;
 	gboolean      compr_file;
-	
+
 	if (window->priv->closing)
 		return FALSE;
-	
+
 	running    = window->priv->activity_ref > 0;
 	no_archive = (window->archive == NULL) || ! window->priv->archive_present;
 	ro         = ! no_archive && window->archive->read_only;
 	compr_file = ! no_archive && window->archive->is_compressed_file;
-	
+
 	clipboard = gtk_clipboard_get (FR_CLIPBOARD);
-	set_sensitive (window, "Paste", ! no_archive && ! ro && ! running && ! compr_file && (window->priv->list_mode != FR_WINDOW_LIST_MODE_FLAT) && gtk_clipboard_wait_is_target_available (clipboard, FR_SPECIAL_URI_LIST));	
-	
+	set_sensitive (window, "Paste", ! no_archive && ! ro && ! running && ! compr_file && (window->priv->list_mode != FR_WINDOW_LIST_MODE_FLAT) && gtk_clipboard_wait_is_target_available (clipboard, FR_SPECIAL_URI_LIST));
+
 	return TRUE;
 }
 
@@ -2048,7 +2048,7 @@
 	set_sensitive (window, "DeselectAll", ! no_archive && sel_not_null);
 	set_sensitive (window, "Extract", file_op);
 	set_sensitive (window, "Extract_Toolbar", file_op);
-	set_sensitive (window, "Find", ! no_archive);	
+	set_sensitive (window, "Find", ! no_archive);
 	set_sensitive (window, "LastOutput", ((window->archive != NULL)
 					      && (window->archive->process != NULL)
 					      && (window->archive->process->out.raw != NULL)));
@@ -2078,14 +2078,14 @@
 	set_sensitive (window, "SelectAll", (window->priv->current_view_length > 0) && (window->priv->current_view_length != n_selected));
 	set_sensitive (window, "DeselectAll", n_selected > 0);
 	set_sensitive (window, "OpenRecentMenu", ! running);
-	
+
 	set_sensitive (window, "ViewFolders", (window->priv->list_mode == FR_WINDOW_LIST_MODE_AS_DIR));
-	
+
 	set_sensitive (window, "ViewAllFiles", ! window->priv->filter_mode);
 	set_sensitive (window, "ViewAsFolder", ! window->priv->filter_mode);
-	
+
 	/**/
-	
+
 	if (! window->priv->closing && (window->priv->check_clipboard == 0))
 		window->priv->check_clipboard = g_timeout_add (CHECK_CLIPBOARD_TIMEOUT, check_clipboard_cb, window);
 }
@@ -2102,7 +2102,7 @@
 	{
 		fr_window_go_to_location (window, gtk_entry_get_text (GTK_ENTRY (window->priv->location_entry)), FALSE);
 	}
-	
+
 	return FALSE;
 }
 
@@ -2135,7 +2135,7 @@
 
 	if (! window->priv->batch_mode && GTK_WIDGET_MAPPED (window))
 		gtk_widget_hide (window->priv->progress_bar);
-		
+
 	if (window->priv->progress_dialog == NULL)
 		return;
 
@@ -2174,13 +2174,22 @@
 open_folder (GtkWindow  *parent,
 	     const char *folder)
 {
+#ifdef GTK_2_13
 	GdkAppLaunchContext *app_context;
 	GError              *error = NULL;
-	
+#else
+	GAppLaunchContext *app_context;
+	GError            *error = NULL;
+#endif
 	if (folder == NULL)
 		return;
 
+#ifdef GTK_2_13
 	app_context = gdk_app_launch_context_new ();
+#else
+	app_context = g_app_launch_context_new ();
+#endif
+
 	if (! g_app_info_launch_default_for_uri (folder, G_APP_LAUNCH_CONTEXT (app_context), &error)) {
 		GtkWidget *d;
 		char      *utf8_name;
@@ -2218,7 +2227,7 @@
 			  FrWindow  *window)
 {
 	GtkWidget *new_window;
-	
+
 	switch (response_id) {
 	case GTK_RESPONSE_CANCEL:
 		if (window->priv->stoppable) {
@@ -2229,9 +2238,9 @@
 	case GTK_RESPONSE_CLOSE:
 		close_progress_dialog (window, TRUE);
 		break;
-	case DIALOG_RESPONSE_OPEN_ARCHIVE:		
+	case DIALOG_RESPONSE_OPEN_ARCHIVE:
 		new_window = fr_window_new ();
-		gtk_widget_show (new_window);		
+		gtk_widget_show (new_window);
 		fr_window_archive_open (FR_WINDOW (new_window), window->priv->convert_data.new_file, GTK_WINDOW (new_window));
 		close_progress_dialog (window, TRUE);
 		break;
@@ -2318,7 +2327,7 @@
 		      FrWindow   *window)
 {
 	char *current_archive;
-	
+
 	if (window->priv->progress_dialog == NULL)
 		return TRUE;
 
@@ -2367,7 +2376,7 @@
 		}
 		else {
 			char *name;
-			
+
 			window->priv->pd_last_archive = g_strdup (current_archive);
 
 			name = g_uri_display_basename (window->priv->pd_last_archive);
@@ -2392,10 +2401,10 @@
 	const char    *title;
 	char          *markup;
 	PangoAttrList *attr_list;
-	
-	if (window->priv->progress_dialog != NULL) 
+
+	if (window->priv->progress_dialog != NULL)
 		return;
-	
+
 	if (window->priv->batch_mode)
 		parent = NULL;
 	else
@@ -2407,20 +2416,20 @@
 					       			     parent,
 					       			     GTK_DIALOG_DESTROY_WITH_PARENT,
 					       			     NULL);
-						       
+
 	window->priv->pd_open_archive_button = gtk_dialog_add_button (GTK_DIALOG (window->priv->progress_dialog), _("_Open the Archive"), DIALOG_RESPONSE_OPEN_ARCHIVE);
 	window->priv->pd_open_destination_button = gtk_dialog_add_button (GTK_DIALOG (window->priv->progress_dialog), _("_Open the Destination"), DIALOG_RESPONSE_OPEN_DESTINATION_FOLDER);
 	window->priv->pd_close_button = gtk_dialog_add_button (GTK_DIALOG (window->priv->progress_dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
 	window->priv->pd_cancel_button = gtk_dialog_add_button (GTK_DIALOG (window->priv->progress_dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
-					       
+
 	d = GTK_DIALOG (window->priv->progress_dialog);
 	gtk_dialog_set_has_separator (d, FALSE);
 	gtk_window_set_resizable (GTK_WINDOW (d), TRUE);
 	gtk_dialog_set_default_response (GTK_DIALOG (d), GTK_RESPONSE_OK);
 	gtk_window_set_default_size (GTK_WINDOW (d), PROGRESS_DIALOG_DEFAULT_WIDTH, -1);
-		
+
 	/* Main */
-		
+
 	vbox = gtk_vbox_new (FALSE, 5);
 	gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
 	gtk_box_pack_start (GTK_BOX (d->vbox), vbox, FALSE, FALSE, 10);
@@ -2439,7 +2448,7 @@
 	gtk_misc_set_alignment (GTK_MISC (lbl), 0.0, 0.5);
 	gtk_misc_set_padding (GTK_MISC (lbl), 0, 0);
 	gtk_label_set_ellipsize (GTK_LABEL (lbl), PANGO_ELLIPSIZE_END);
-	
+
 	gtk_container_add (GTK_CONTAINER (align), lbl);
 	gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0);
 
@@ -2478,7 +2487,7 @@
 	progress_vbox = gtk_vbox_new (FALSE, 6);
 	gtk_container_add (GTK_CONTAINER (align), progress_vbox);
 	gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0);
-	
+
 	/* progress bar */
 
 	window->priv->pd_progress_bar = gtk_progress_bar_new ();
@@ -2497,7 +2506,7 @@
 	gtk_misc_set_alignment (GTK_MISC (lbl), 0.0, 0.5);
 	gtk_label_set_ellipsize (GTK_LABEL (lbl), PANGO_ELLIPSIZE_END);
 	gtk_box_pack_start (GTK_BOX (progress_vbox), lbl, TRUE, TRUE, 0);
-	
+
 	gtk_widget_show_all (vbox);
 
 	/* signals */
@@ -2546,18 +2555,18 @@
 		g_source_remove (window->priv->hide_progress_timeout);
 		window->priv->hide_progress_timeout = 0;
 	}
-	
+
 	if (open_now) {
 		if (window->priv->progress_timeout != 0)
 			g_source_remove (window->priv->progress_timeout);
 		window->priv->progress_timeout = 0;
 	}
 
-	if ((window->priv->progress_timeout != 0) 
-	    || ((window->priv->progress_dialog != NULL) && GTK_WIDGET_VISIBLE (window->priv->progress_dialog))) 
+	if ((window->priv->progress_timeout != 0)
+	    || ((window->priv->progress_dialog != NULL) && GTK_WIDGET_VISIBLE (window->priv->progress_dialog)))
 		return;
 
-	if (! window->priv->batch_mode && ! open_now) 
+	if (! window->priv->batch_mode && ! open_now)
 		gtk_widget_show (window->priv->progress_bar);
 
 	create_the_progress_dialog (window);
@@ -2565,7 +2574,7 @@
 	gtk_widget_hide (window->priv->pd_open_archive_button);
 	gtk_widget_hide (window->priv->pd_open_destination_button);
 	gtk_widget_hide (window->priv->pd_close_button);
-	
+
 	if (open_now)
 		display_progress_dialog (window);
 	else
@@ -2582,7 +2591,7 @@
 {
 	window->priv->progress_pulse = (fraction < 0.0);
 	if (! window->priv->progress_pulse) {
-		fraction = CLAMP (fraction, 0.0, 1.0);	
+		fraction = CLAMP (fraction, 0.0, 1.0);
 		if (window->priv->progress_dialog != NULL)
 			gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (window->priv->pd_progress_bar), fraction);
 		gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (window->priv->progress_bar), fraction);
@@ -2595,7 +2604,7 @@
 open_progress_dialog_with_open_destination (FrWindow *window)
 {
 	window->priv->ask_to_open_destination_after_extraction = FALSE;
-	
+
 	if (window->priv->hide_progress_timeout != 0) {
 		g_source_remove (window->priv->hide_progress_timeout);
 		window->priv->hide_progress_timeout = 0;
@@ -2604,7 +2613,7 @@
 		g_source_remove (window->priv->progress_timeout);
 		window->priv->progress_timeout = 0;
 	}
-	
+
 	create_the_progress_dialog (window);
 	gtk_widget_hide (window->priv->pd_cancel_button);
 	gtk_widget_hide (window->priv->pd_open_archive_button);
@@ -2627,7 +2636,7 @@
 		g_source_remove (window->priv->progress_timeout);
 		window->priv->progress_timeout = 0;
 	}
-	
+
 	create_the_progress_dialog (window);
 	gtk_widget_hide (window->priv->pd_cancel_button);
 	gtk_widget_hide (window->priv->pd_open_destination_button);
@@ -2685,7 +2694,7 @@
 	message = get_message_from_action (action);
 	full_msg = g_strdup_printf ("%s, %s", message, _("wait please..."));
 	fr_window_push_message (window, full_msg);
-	
+
 	switch (action) {
 	case FR_ACTION_EXTRACTING_FILES:
 		open_progress_dialog (window, window->priv->ask_to_open_destination_after_extraction || window->priv->convert_data.converting || window->priv->batch_mode);
@@ -2694,7 +2703,7 @@
 		open_progress_dialog (window, window->priv->batch_mode);
 		break;
 	}
-		
+
 	if (archive->command != NULL) {
 		fr_command_progress (archive->command, -1.0);
 		fr_command_message (archive->command, message);
@@ -2764,7 +2773,7 @@
 			     GtkWindow *dialog_parent)
 {
 	close_progress_dialog (window, TRUE);
-	
+
 	if (dialog_parent != NULL)
 		gtk_window_set_modal (dialog_parent, FALSE);
 	g_signal_connect (dialog,
@@ -2773,13 +2782,13 @@
 			  window);
 	gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
 	gtk_widget_show (dialog);
-	
+
 	window->priv->showing_error_dialog = TRUE;
 	window->priv->error_dialog_parent = dialog_parent;
 }
-			     
 
-void  
+
+void
 fr_window_destroy_with_error_dialog (FrWindow *window)
 {
 	window->priv->destroy_with_error_dialog = TRUE;
@@ -2801,7 +2810,7 @@
 		/* nothing */
 	}
 	else if (error->type != FR_PROC_ERROR_NONE) {
-		char      *msg = NULL;		
+		char      *msg = NULL;
 		char      *utf8_name;
 		char      *details = NULL;
 		GtkWindow *dialog_parent;
@@ -2856,7 +2865,7 @@
 		case FR_ACTION_SAVING_REMOTE_ARCHIVE:
 			msg = _("An error occurred while saving the archive.");
 			break;
-			
+
 		default:
 			msg = _("An error occurred.");
 			break;
@@ -2920,7 +2929,7 @@
 
 	handle_errors (window, archive, action, error);
 
-	if (error->type == FR_PROC_ERROR_NONE) 		
+	if (error->type == FR_PROC_ERROR_NONE)
 		open_progress_dialog_with_open_archive (window);
 
 	remove_local_directory (window->priv->convert_data.temp_dir);
@@ -3023,7 +3032,7 @@
 
 		fr_window_update_title (window);
 		fr_window_go_to_location (window, fr_window_get_current_location (window), TRUE);
-		fr_window_update_dir_tree (window);		
+		fr_window_update_dir_tree (window);
 		if (! window->priv->batch_mode && window->priv->non_interactive)
 			gtk_window_present (GTK_WINDOW (window));
 		break;
@@ -3036,7 +3045,7 @@
 	case FR_ACTION_ADDING_FILES:
 		close_progress_dialog (window, FALSE);
 		if (error->type == FR_PROC_ERROR_NONE) {
-			if (window->priv->archive_new) 
+			if (window->priv->archive_new)
 				window->priv->archive_new = FALSE;
 			fr_window_add_to_recent_list (window, window->priv->archive_uri);
 		}
@@ -3062,7 +3071,7 @@
 		}
 		if (window->priv->convert_data.converting) {
 			char *source_dir;
-			
+
 			source_dir = g_filename_to_uri (window->priv->convert_data.temp_dir, NULL, NULL);
 			fr_archive_add_with_wildcard (
 				  window->priv->convert_data.new_archive,
@@ -3101,7 +3110,7 @@
 			fr_window_stop_batch (window);
 		else
 			fr_window_exec_next_batch_action (window);
-	}		
+	}
 }
 
 
@@ -3123,13 +3132,13 @@
 		dirname = g_strdup (path);
 	dirname_l = strlen (dirname);
 	for (i = 0; i < window->archive->command->files->len; i++) {
-		FileData *fd = g_ptr_array_index (window->archive->command->files, i);	
+		FileData *fd = g_ptr_array_index (window->archive->command->files, i);
 
 		if (strncmp (dirname, fd->full_path, dirname_l) == 0)
 			list = g_list_prepend (list, g_strdup (fd->original_path));
 	}
 	g_free (dirname);
-	
+
 	return g_list_reverse (list);
 }
 
@@ -3140,13 +3149,13 @@
 {
 	char  *dirname;
 	GList *list;
-	
+
 	dirname = g_strconcat (fr_window_get_current_location (window),
 			       fdata->list_name,
 			       NULL);
 	list = get_dir_list_from_path (window, dirname);
 	g_free (dirname);
-	
+
 	return list;
 }
 
@@ -3189,7 +3198,7 @@
 	if (selections)
 		g_list_free (selections);
 
-	return g_list_reverse (list);	
+	return g_list_reverse (list);
 }
 
 
@@ -3227,7 +3236,7 @@
 	}
 	path_list_free (selections);
 
-	return g_list_reverse (list);	
+	return g_list_reverse (list);
 }
 
 
@@ -3365,7 +3374,7 @@
 				gtk_tree_selection_unselect_all (selection);
 				gtk_tree_selection_select_iter (selection, &iter);
 			}
-			
+
 			gtk_menu_popup (GTK_MENU (window->priv->sidebar_folder_popup_menu),
 					NULL, NULL, NULL,
 					window,
@@ -3394,7 +3403,7 @@
 	tree_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (window->priv->list_view));
 	if (tree_selection == NULL)
 		return NULL;
-	
+
 	selection = NULL;
 	gtk_tree_selection_selected_foreach (tree_selection, add_selected_from_list_view, &selection);
 	if ((selection == NULL) || (selection->next != NULL)) {
@@ -3422,7 +3431,7 @@
 	tree_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (window->priv->tree_view));
 	if (tree_selection == NULL)
 		return NULL;
-		
+
 	selections = NULL;
 	gtk_tree_selection_selected_foreach (tree_selection, add_selected_from_tree_view, &selections);
 
@@ -3444,7 +3453,7 @@
 	if (! from_sidebar) {
 		FileData *fdata;
 		char     *dir_name;
-		
+
 		fdata = fr_window_get_selected_item_from_file_list (window);
 		if ((fdata == NULL) || ! file_data_is_dir (fdata)) {
 			file_data_free (fdata);
@@ -3458,11 +3467,11 @@
 		g_free (dir_name);
 		file_data_free (fdata);
 	}
-	else 
+	else
 		dir_path = fr_window_get_selected_folder_in_tree_view (window);
-	
+
 	fr_window_go_to_location (window, dir_path, FALSE);
-	
+
 	g_free (dir_path);
 }
 
@@ -3490,7 +3499,7 @@
 		GList *list = g_list_prepend (NULL, fdata->original_path);
 		fr_window_open_files (window, list, FALSE);
 		g_list_free (list);
-	} 
+	}
 	else if (window->priv->list_mode == FR_WINDOW_LIST_MODE_AS_DIR) {
 		char *new_dir;
 		new_dir = g_strconcat (fr_window_get_current_location (window),
@@ -3675,7 +3684,7 @@
 	/* only redraw if the hover row has changed */
 	if (!(last_hover_path == NULL && window->priv->list_hover_path == NULL) &&
 	    (!(last_hover_path != NULL && window->priv->list_hover_path != NULL) ||
-	     gtk_tree_path_compare (last_hover_path, window->priv->list_hover_path))) 
+	     gtk_tree_path_compare (last_hover_path, window->priv->list_hover_path)))
 	{
 		if (last_hover_path) {
 			gtk_tree_model_get_iter (GTK_TREE_MODEL (window->priv->list_store),
@@ -3736,7 +3745,7 @@
 		return NULL;
 
 	uris = g_uri_list_extract_uris (uri_list);
-	for (i = 0; uris[i] != NULL; i++) 
+	for (i = 0; uris[i] != NULL; i++)
 		list = g_list_prepend (list, g_strdup (uris[i]));
 	g_strfreev (uris);
 
@@ -3775,11 +3784,11 @@
 	FrClipboardData  *clipboard_data;
 	char            **uris;
 	int               i;
-	
+
 	clipboard_data = fr_clipboard_data_new ();
-		
+
 	uris = g_strsplit (data, "\r\n", -1);
-		
+
 	clipboard_data->archive_filename = g_strdup (uris[0]);
 	if (window->priv->password_for_paste != NULL)
 		clipboard_data->archive_password = g_strdup (window->priv->password_for_paste);
@@ -3791,9 +3800,9 @@
 		if (uris[i][0] != '\0')
 			clipboard_data->files = g_list_prepend (clipboard_data->files, g_strdup (uris[i]));
 	clipboard_data->files = g_list_reverse (clipboard_data->files);
-	
+
 	g_strfreev (uris);
-	
+
 	return clipboard_data;
 }
 
@@ -3836,11 +3845,11 @@
 
 	if (data->target == XFR_ATOM) {
 		FrClipboardData *dnd_data;
-		
+
 		dnd_data = get_clipboard_data_from_selection_data (window, (char*) data->data);
-		dnd_data->current_dir = g_strdup (fr_window_get_current_location (window));		
-		fr_window_paste_from_clipboard_data (window, dnd_data);	
-			
+		dnd_data->current_dir = g_strdup (fr_window_get_current_location (window));
+		fr_window_paste_from_clipboard_data (window, dnd_data);
+
 		return;
 	}
 
@@ -3868,7 +3877,7 @@
 	if (window->priv->archive_present
 	    && (window->archive != NULL)
 	    && ! window->archive->read_only
-	    && ! window->archive->is_compressed_file) 
+	    && ! window->archive->is_compressed_file)
 	{
 		if (one_file && is_an_archive) {
 			GtkWidget *d;
@@ -3893,8 +3902,8 @@
 				fr_window_archive_add_dropped_items (window, list, FALSE);
 			else if (r == 1)  /* Open */
 				fr_window_archive_open (window, list->data, GTK_WINDOW (window));
- 		} 
- 		else 
+ 		}
+ 		else
 			fr_window_archive_add_dropped_items (window, list, FALSE);
 	}
 	else {
@@ -3930,16 +3939,16 @@
 
 				first_item = (char*) list->data;
 				folder = remove_level_from_path (first_item);
-				if (folder != NULL) 
+				if (folder != NULL)
 					fr_window_set_open_default_dir (window, folder);
-					
+
 				if ((list->next != NULL) && (folder != NULL))
 					archive_name = file_name_from_path (folder);
 				else
 					archive_name = file_name_from_path (first_item);
-					
+
 				show_new_archive_dialog (window, archive_name);
-				
+
 				g_free (folder);
 			}
 		}
@@ -3965,7 +3974,7 @@
 
 	g_free (window->priv->drag_destination_folder);
 	window->priv->drag_destination_folder = NULL;
-	
+
 	g_free (window->priv->drag_base_dir);
 	window->priv->drag_base_dir = NULL;
 
@@ -4073,13 +4082,13 @@
 	GString *list;
 	char    *local_filename;
 	GList   *scan;
-	
+
 	list = g_string_new (NULL);
-	
+
 	local_filename = g_file_get_uri (window->archive->local_copy);
 	g_string_append (list, local_filename);
 	g_free (local_filename);
-	
+
 	g_string_append (list, "\r\n");
 	if (window->priv->password != NULL)
 		g_string_append (list, window->priv->password);
@@ -4092,7 +4101,7 @@
 		g_string_append (list, scan->data);
 		g_string_append (list, "\r\n");
 	}
-	
+
 	return g_string_free (list, FALSE);
 }
 
@@ -4109,35 +4118,35 @@
 	GList    *file_list;
 	char     *destination;
 	char     *destination_folder;
-	
+
 	debug (DEBUG_INFO, "::DragDataGet -->\n");
-	
+
 	if (window->priv->activity_ref > 0)
 		return FALSE;
-		
+
 	file_list = fr_window_get_folder_tree_selection (window, TRUE, NULL);
 	if (file_list == NULL)
 		return FALSE;
-	
+
 	if (selection_data->target == XFR_ATOM) {
 		FrClipboardData *tmp;
 		char            *data;
-		
+
 		tmp = fr_clipboard_data_new ();
 		tmp->files = file_list;
 		tmp->op = FR_CLIPBOARD_OP_COPY;
 		tmp->base_dir = g_strdup (fr_window_get_current_location (window));
-		
+
 		data = get_selection_data_from_clipboard_data (window, tmp);
 		gtk_selection_data_set (selection_data, XFR_ATOM, 8, (guchar *) data, strlen (data));
-		
+
 		fr_clipboard_data_unref (tmp);
 		g_free (data);
-			
+
 		return TRUE;
 	}
 
-	if (! nautilus_xds_dnd_is_valid_xds_context (context)) 
+	if (! nautilus_xds_dnd_is_valid_xds_context (context))
 		return FALSE;
 
 	destination = get_xds_atom_value (context);
@@ -4150,10 +4159,10 @@
 	 * folder */
 
 	g_clear_error (&window->priv->drag_error);
-	
+
 	if (! check_permissions (destination_folder, R_OK | W_OK | X_OK)) {
 		char *destination_folder_display_name;
-		
+
 		destination_folder_display_name = g_filename_display_name (destination_folder);
 		window->priv->drag_error = g_error_new (FR_ERROR, 0, _("You don't have the right permissions to extract archives in the folder \"%s\""), destination_folder_display_name);
 		g_free (destination_folder_display_name);
@@ -4202,22 +4211,22 @@
 	if (selection_data->target == XFR_ATOM) {
 		FrClipboardData *tmp;
 		char            *data;
-		
+
 		tmp = fr_clipboard_data_new ();
 		tmp->files = fr_window_get_file_list_selection (window, TRUE, NULL);
 		tmp->op = FR_CLIPBOARD_OP_COPY;
 		tmp->base_dir = g_strdup (fr_window_get_current_location (window));
-		
+
 		data = get_selection_data_from_clipboard_data (window, tmp);
 		gtk_selection_data_set (selection_data, XFR_ATOM, 8, (guchar *) data, strlen (data));
-		
+
 		fr_clipboard_data_unref (tmp);
 		g_free (data);
-			
+
 		return TRUE;
-	}		
+	}
 
-	if (! nautilus_xds_dnd_is_valid_xds_context (context)) 
+	if (! nautilus_xds_dnd_is_valid_xds_context (context))
 		return FALSE;
 
 	destination = get_xds_atom_value (context);
@@ -4230,10 +4239,10 @@
 	 * folder */
 
 	g_clear_error (&window->priv->drag_error);
-	
+
 	if (! check_permissions (destination_folder, R_OK | W_OK | X_OK)) {
 		char *destination_folder_display_name;
-		
+
 		destination_folder_display_name = g_filename_display_name (destination_folder);
 		window->priv->drag_error = g_error_new (FR_ERROR, 0, _("You don't have the right permissions to extract archives in the folder \"%s\""), destination_folder_display_name);
 		g_free (destination_folder_display_name);
@@ -4268,12 +4277,12 @@
 {
 	window->priv->filter_mode = FALSE;
 	window->priv->list_mode = window->priv->last_list_mode;
-	
+
 	gtk_entry_set_text (GTK_ENTRY (window->priv->filter_entry), "");
 	fr_window_update_filter_bar_visibility (window);
-	
+
 	gtk_list_store_clear (window->priv->list_store);
-	
+
 	fr_window_update_columns_visibility (window);
 	fr_window_update_file_list (window, TRUE);
 	fr_window_update_dir_tree (window);
@@ -4292,7 +4301,7 @@
 
 	if (GTK_WIDGET_HAS_FOCUS (window->priv->location_entry))
 		return FALSE;
-		
+
 	if (GTK_WIDGET_HAS_FOCUS (window->priv->filter_entry)) {
 		switch (event->keyval) {
 		case GDK_Escape:
@@ -4328,7 +4337,7 @@
 					window,
 					3,
 					GDK_CURRENT_TIME);
-			retval = TRUE;			
+			retval = TRUE;
 		}
 		break;
 
@@ -4383,10 +4392,10 @@
 {
 	FrWindow    *window = user_data;
 	GtkTreeIter  iter;
-	
+
 	if (gtk_tree_selection_get_selected (selection, NULL, &iter)) {
 		char *path;
-		
+
 		gtk_tree_model_get (GTK_TREE_MODEL (window->priv->tree_store),
 				    &iter,
 				    TREE_COLUMN_PATH, &path,
@@ -4487,7 +4496,7 @@
 	gtk_tree_view_column_set_title (column, _("Folders"));
 
 	/* icon */
-	
+
 	renderer = gtk_cell_renderer_pixbuf_new ();
 	gtk_tree_view_column_pack_start (column, renderer, FALSE);
 	gtk_tree_view_column_set_attributes (column, renderer,
@@ -4513,7 +4522,7 @@
 
 	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
 	gtk_tree_view_column_set_sort_column_id (column, TREE_COLUMN_NAME);
-						 							 
+
 	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
 }
 
@@ -4536,8 +4545,8 @@
 	window->priv->filename_column = column = gtk_tree_view_column_new ();
 	gtk_tree_view_column_set_title (column, _("Name"));
 
-	/* emblem */						 
-						 
+	/* emblem */
+
 	renderer = gtk_cell_renderer_pixbuf_new ();
 	gtk_tree_view_column_pack_end (column, renderer, FALSE);
 	gtk_tree_view_column_set_attributes (column, renderer,
@@ -4545,7 +4554,7 @@
 					     NULL);
 
 	/* icon */
-	
+
 	renderer = gtk_cell_renderer_pixbuf_new ();
 	gtk_tree_view_column_pack_start (column, renderer, FALSE);
 	gtk_tree_view_column_set_attributes (column, renderer,
@@ -4579,12 +4588,12 @@
 	gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME);
 	gtk_tree_view_column_set_cell_data_func (column, renderer,
 						 (GtkTreeCellDataFunc) filename_cell_data_func,
-						 window, NULL);				
-						 
+						 window, NULL);
+
 	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
 
 	/* Other columns */
-	
+
 	for (j = 0, i = COLUMN_SIZE; i < NUMBER_OF_COLUMNS; i++, j++) {
 		GValue  value = { 0, };
 
@@ -4724,9 +4733,9 @@
 
 	set_active (window, "ViewToolbar", eel_gconf_get_boolean (PREF_UI_TOOLBAR, TRUE));
 	set_active (window, "ViewStatusbar", eel_gconf_get_boolean (PREF_UI_STATUSBAR, TRUE));
-	
+
 	window->priv->view_folders = eel_gconf_get_boolean (PREF_UI_FOLDERS, FALSE);
-	set_active (window, "ViewFolders", window->priv->view_folders);	
+	set_active (window, "ViewFolders", window->priv->view_folders);
 
 	fr_window_update_filter_bar_visibility (window);
 
@@ -4881,7 +4890,7 @@
 		g_hash_table_destroy (tree_pixbuf_hash);
 		tree_pixbuf_hash = g_hash_table_new (g_str_hash, g_str_equal);
 	}
-	
+
 	fr_window_update_file_list (window, TRUE);
 	fr_window_update_dir_tree (window);
 }
@@ -4927,7 +4936,7 @@
 			add_after_opening = TRUE;
 			break;
 		}
-		if ((action->type == FR_BATCH_ACTION_EXTRACT) 
+		if ((action->type == FR_BATCH_ACTION_EXTRACT)
 		    || (action->type == FR_BATCH_ACTION_EXTRACT_HERE)
 		    || (action->type == FR_BATCH_ACTION_EXTRACT_INTERACT)) {
 			extract_after_opening = TRUE;
@@ -5069,7 +5078,7 @@
 	gtk_recent_chooser_set_limit (chooser, eel_gconf_get_integer (PREF_UI_HISTORY_LEN, MAX_HISTORY_LEN));
 	gtk_recent_chooser_set_show_not_found (chooser, TRUE);
 	gtk_recent_chooser_set_sort_type (chooser, GTK_RECENT_SORT_MRU);
-	 
+
 	g_signal_connect (G_OBJECT (chooser),
 			  "item_activated",
 			  G_CALLBACK (recent_chooser_item_activated_cb),
@@ -5093,12 +5102,12 @@
 
 	fr_window_update_filter_bar_visibility (window);
 	window->priv->list_mode = FR_WINDOW_LIST_MODE_FLAT;
-	
+
 	gtk_list_store_clear (window->priv->list_store);
-	
+
 	column = gtk_tree_view_get_column (tree_view, 4);
-	gtk_tree_view_column_set_visible (column, TRUE);	
-	
+	gtk_tree_view_column_set_visible (column, TRUE);
+
 	fr_window_update_file_list (window, TRUE);
 	fr_window_update_dir_tree (window);
 	fr_window_update_current_location (window);
@@ -5114,14 +5123,14 @@
 
 
 static void
-filter_entry_icon_released_cb (SexyIconEntry         *entry, 
+filter_entry_icon_released_cb (SexyIconEntry         *entry,
 			       SexyIconEntryPosition  icon_pos,
 			       int                    button,
 			       gpointer               user_data)
 {
 	FrWindow *window = FR_WINDOW (user_data);
-	
-	if ((button == 1) && (icon_pos == SEXY_ICON_ENTRY_SECONDARY)) 		
+
+	if ((button == 1) && (icon_pos == SEXY_ICON_ENTRY_SECONDARY))
 		fr_window_deactivate_filter (window);
 }
 
@@ -5165,7 +5174,7 @@
 		return;
 		break;
 	}
-        
+
 	gtk_table_attach (GTK_TABLE (window->priv->layout),
 			  child,
 			  0, 1,
@@ -5219,7 +5228,7 @@
 	if (tree_pixbuf_hash == NULL)
 		tree_pixbuf_hash = g_hash_table_new (g_str_hash, g_str_equal);
 
-	if (icon_theme == NULL) 
+	if (icon_theme == NULL)
 		icon_theme = gtk_icon_theme_get_default ();
 
 	/* Create the application. */
@@ -5368,7 +5377,7 @@
 	window->priv->current_batch_action.free_func = NULL;
 
 	window->priv->pd_last_archive = NULL;
-	
+
 	/* Create the widgets. */
 
 	/* * File list. */
@@ -5382,7 +5391,7 @@
 						      G_TYPE_STRING,
 						      G_TYPE_STRING,
 						      G_TYPE_STRING);
-	g_object_set_data (G_OBJECT (window->priv->list_store), "FrWindow", window);		
+	g_object_set_data (G_OBJECT (window->priv->list_store), "FrWindow", window);
 	window->priv->list_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (window->priv->list_store));
 
 	gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (window->priv->list_view), TRUE);
@@ -5467,18 +5476,18 @@
 	window->priv->filter_bar = filter_box = gtk_hbox_new (FALSE, 6);
 	gtk_container_set_border_width (GTK_CONTAINER (filter_box), 3);
 	fr_window_attach (FR_WINDOW (window), window->priv->filter_bar, FR_WINDOW_AREA_FILTERBAR);
-	
+
 	gtk_box_pack_start (GTK_BOX (filter_box),
 			    gtk_label_new (_("Find:")), FALSE, FALSE, 0);
 
 	/* * filter entry */
-	
+
 	window->priv->filter_entry = sexy_icon_entry_new ();
 	/*sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (window->priv->filter_entry),
 				  SEXY_ICON_ENTRY_PRIMARY,
 				  GTK_IMAGE (gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_MENU)));*/
 	sexy_icon_entry_add_clear_button (SEXY_ICON_ENTRY (window->priv->filter_entry));
-	
+
 	gtk_widget_set_size_request (window->priv->filter_entry, 300, -1);
 	gtk_box_pack_start (GTK_BOX (filter_box),
 			    window->priv->filter_entry, FALSE, FALSE, 6);
@@ -5515,7 +5524,7 @@
 			  "changed",
 			  G_CALLBACK (dir_tree_selection_changed_cb),
 			  window);
-	
+
 	g_signal_connect (G_OBJECT (window->priv->tree_view),
 			  "drag_begin",
 			  G_CALLBACK (file_list_drag_begin),
@@ -5532,7 +5541,7 @@
                              GDK_BUTTON1_MASK,
                              folder_tree_targets, G_N_ELEMENTS (folder_tree_targets),
                              GDK_ACTION_COPY);
-                             
+
 	tree_scrolled_window = gtk_scrolled_window_new (NULL, NULL);
 	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (tree_scrolled_window),
 					GTK_POLICY_AUTOMATIC,
@@ -5542,18 +5551,18 @@
 	/* side pane */
 
 	window->priv->sidepane = gtk_vbox_new (FALSE, 0);
-	
+
 	sidepane_title = gtk_frame_new (NULL);
 	gtk_frame_set_shadow_type (GTK_FRAME (sidepane_title), GTK_SHADOW_ETCHED_IN);
-	
+
 	sidepane_title_box = gtk_hbox_new (FALSE, 0);
 	gtk_container_set_border_width (GTK_CONTAINER (sidepane_title_box), 2);
-	gtk_container_add (GTK_CONTAINER (sidepane_title), sidepane_title_box);	
+	gtk_container_add (GTK_CONTAINER (sidepane_title), sidepane_title_box);
 	sidepane_title_label = gtk_label_new (_("Folders"));
-	
+
 	gtk_misc_set_alignment (GTK_MISC (sidepane_title_label), 0.0, 0.5);
 	gtk_box_pack_start (GTK_BOX (sidepane_title_box), sidepane_title_label, TRUE, TRUE, 0);
-	
+
 	close_sidepane_button = gtk_button_new ();
 	gtk_container_add (GTK_CONTAINER (close_sidepane_button), gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU));
 	gtk_button_set_relief (GTK_BUTTON (close_sidepane_button), GTK_RELIEF_NONE);
@@ -5573,10 +5582,10 @@
 	gtk_paned_pack1 (GTK_PANED (window->priv->paned), window->priv->sidepane, FALSE, TRUE);
 	gtk_paned_pack2 (GTK_PANED (window->priv->paned), list_scrolled_window, TRUE, TRUE);
 	gtk_paned_set_position (GTK_PANED (window->priv->paned), eel_gconf_get_integer (PREF_UI_SIDEBAR_WIDTH, DEF_SIDEBAR_WIDTH));
-	
+
 	fr_window_attach (FR_WINDOW (window), window->priv->paned, FR_WINDOW_AREA_CONTENTS);
 	gtk_widget_show_all (window->priv->paned);
-	
+
 	/* Build the menu and the toolbar. */
 
 	ui = gtk_ui_manager_new ();
@@ -5614,20 +5623,20 @@
 				    gtk_ui_manager_get_accel_group (ui));
 
 	/* Add a hidden short cut Ctrl-Q for power users */
-	gtk_accel_group_connect (gtk_ui_manager_get_accel_group (ui), 
+	gtk_accel_group_connect (gtk_ui_manager_get_accel_group (ui),
 				 GDK_q, GDK_CONTROL_MASK, 0,
 	                         g_cclosure_new_swap (G_CALLBACK (fr_window_close), window, NULL));
-	
+
 
 	if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, -1, &error)) {
 		g_message ("building menus failed: %s", error->message);
 		g_error_free (error);
 	}
-	
+
 	menubar = gtk_ui_manager_get_widget (ui, "/MenuBar");
 	fr_window_attach (FR_WINDOW (window), menubar, FR_WINDOW_AREA_MENUBAR);
 	gtk_widget_show (menubar);
-	 
+
 	window->priv->toolbar = toolbar = gtk_ui_manager_get_widget (ui, "/ToolBar");
 	gtk_toolbar_set_show_arrow (GTK_TOOLBAR (toolbar), TRUE);
 	set_action_important (ui, "/ToolBar/Extract_Toolbar");
@@ -5658,23 +5667,23 @@
 			  "key_press_event",
 			  G_CALLBACK (location_entry_key_press_event_cb),
 			  window);
-	
+
 	{
 		GtkToolItem *tool_item;
-		
+
 		tool_item = gtk_separator_tool_item_new ();
 		gtk_widget_show_all (GTK_WIDGET (tool_item));
 		gtk_toolbar_insert (GTK_TOOLBAR (window->priv->location_bar), tool_item, -1);
-		
+
 		tool_item = gtk_tool_item_new ();
 		gtk_tool_item_set_expand (tool_item, TRUE);
 		gtk_container_add (GTK_CONTAINER (tool_item), location_box);
 		gtk_widget_show_all (GTK_WIDGET (tool_item));
 		gtk_toolbar_insert (GTK_TOOLBAR (window->priv->location_bar), tool_item, -1);
 	}
-	
+
 	fr_window_attach (FR_WINDOW (window), window->priv->location_bar, FR_WINDOW_AREA_LOCATIONBAR);
-	if (window->priv->list_mode == FR_WINDOW_LIST_MODE_FLAT) 
+	if (window->priv->list_mode == FR_WINDOW_LIST_MODE_FLAT)
 		gtk_widget_hide (window->priv->location_bar);
 	else
 		gtk_widget_show (window->priv->location_bar);
@@ -5699,7 +5708,7 @@
 	gtk_tool_item_set_homogeneous (open_recent_tool_item, FALSE);
 	gtk_widget_set_tooltip_text (GTK_WIDGET (open_recent_tool_item), _("Open archive"));
 	gtk_menu_tool_button_set_arrow_tooltip_text (GTK_MENU_TOOL_BUTTON (open_recent_tool_item), _("Open a recently used archive"));
-	
+
 	window->priv->open_action = gtk_action_new ("Toolbar_Open", _("Open"), _("Open archive"), GTK_STOCK_OPEN);
 	g_object_set (window->priv->open_action, "is_important", TRUE, NULL);
 	g_signal_connect (window->priv->open_action,
@@ -5710,7 +5719,7 @@
 
 	gtk_widget_show (GTK_WIDGET (open_recent_tool_item));
 	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), open_recent_tool_item, 1);
-	
+
 	/**/
 
 	fr_window_attach (FR_WINDOW (window), window->priv->toolbar, FR_WINDOW_AREA_TOOLBAR);
@@ -5718,7 +5727,7 @@
 		gtk_widget_show (toolbar);
 	else
 		gtk_widget_hide (toolbar);
-	
+
 	window->priv->file_popup_menu = gtk_ui_manager_get_widget (ui, "/FilePopupMenu");
 	window->priv->folder_popup_menu = gtk_ui_manager_get_widget (ui, "/FolderPopupMenu");
 	window->priv->sidebar_folder_popup_menu = gtk_ui_manager_get_widget (ui, "/SidebarFolderPopupMenu");
@@ -5737,13 +5746,13 @@
         gtk_box_pack_start (GTK_BOX (statusbar_box), statusbar->label, TRUE, TRUE, 0);
 	g_object_unref (statusbar->label);
 	gtk_container_add (GTK_CONTAINER (statusbar->frame), statusbar_box);
-	
+
 	window->priv->progress_bar = gtk_progress_bar_new ();
 	gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (window->priv->progress_bar), ACTIVITY_PULSE_STEP);
 	gtk_widget_set_size_request (window->priv->progress_bar, -1, PROGRESS_BAR_HEIGHT);
         {
                 GtkWidget *vbox;
-                
+
                 vbox = gtk_vbox_new (FALSE, 0);
                 gtk_box_pack_start (GTK_BOX (statusbar_box), vbox, FALSE, FALSE, 0);
                 gtk_box_pack_start (GTK_BOX (vbox), window->priv->progress_bar, TRUE, TRUE, 1);
@@ -5751,7 +5760,7 @@
         }
         gtk_widget_show (statusbar_box);
         gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (window->priv->statusbar), TRUE);
-        
+
 	fr_window_attach (FR_WINDOW (window), window->priv->statusbar, FR_WINDOW_AREA_STATUSBAR);
 	if (eel_gconf_get_boolean (PREF_UI_STATUSBAR, TRUE))
 		gtk_widget_show (window->priv->statusbar);
@@ -5910,10 +5919,10 @@
 	fr_window_free_open_files (window);
 	fr_clipboard_data_unref (window->priv->copy_data);
 	window->priv->copy_data = NULL;
-	
+
 	fr_window_set_password (window, NULL);
 	fr_window_history_clear (window);
-	
+
 	window->priv->archive_new = FALSE;
 	window->priv->archive_present = FALSE;
 
@@ -5967,13 +5976,13 @@
 		  const char *password)
 {
 	SaveAsData *sdata;
-	
+
 	sdata = g_new0 (SaveAsData, 1);
 	if (uri != NULL)
 		sdata->uri = g_strdup (uri);
 	if (password != NULL)
 		sdata->password = g_strdup (password);
-	
+
 	return sdata;
 }
 
@@ -6005,7 +6014,7 @@
 
 	window->priv->convert_data.new_archive = fr_archive_new ();
 	if (! fr_archive_create (window->priv->convert_data.new_archive, uri)) {
-		GtkWidget *d;		
+		GtkWidget *d;
 		char      *utf8_name;
 		char      *message;
 
@@ -6309,7 +6318,7 @@
 				const char *password)
 {
 	ExtractData *edata;
-		
+
 	edata = extract_data_new (NULL,
 				  NULL,
 				  NULL,
@@ -6324,7 +6333,7 @@
 					    (GFreeFunc) extract_data_free);
 
 	window->priv->ask_to_open_destination_after_extraction = FALSE;
-			
+
 	fr_process_clear (window->archive->process);
 	if (fr_archive_extract_here (window->archive,
 			             edata->skip_older,
@@ -6406,7 +6415,7 @@
 						   _("Could not create the destination folder: %s."),
 						   error->message);
 			g_clear_error (&error);
-			fr_window_show_error_dialog (window, d, GTK_WINDOW (window));		
+			fr_window_show_error_dialog (window, d, GTK_WINDOW (window));
 			fr_window_stop_batch (window);
 
 			return;
@@ -6440,7 +6449,7 @@
 			    edata->skip_older,
 			    edata->overwrite,
 			    edata->junk_paths,
-			    edata->password);				    
+			    edata->password);
 	fr_process_start (window->archive->process);
 }
 
@@ -6452,7 +6461,7 @@
 					    FR_BATCH_ACTION_TEST,
 					    NULL,
 					    NULL);
-					    
+
 	fr_archive_test (window->archive, window->priv->password);
 }
 
@@ -6663,9 +6672,9 @@
 
 	if (window->priv->activity_ref > 0)
 		fr_archive_stop (window->archive);
-		
+
 	if (window->priv->convert_data.converting)
-		fr_window_convert_data_free (window, TRUE);		
+		fr_window_convert_data_free (window, TRUE);
 }
 
 
@@ -6904,7 +6913,7 @@
 	FrArchive  *archive = window->archive;
 	GList      *scan, *new_file_list = NULL;
 	RenameData *rdata;
-	
+
 	rdata = rename_data_new (path_to_rename,
 				 old_name,
 				 new_name,
@@ -6922,8 +6931,8 @@
 	if (is_dir)
 		file_list = get_dir_list_from_path (window, rdata->path_to_rename);
 	else
-		file_list = g_list_append (NULL, g_strdup (rdata->path_to_rename));	
-	
+		file_list = g_list_append (NULL, g_strdup (rdata->path_to_rename));
+
 	fr_archive_extract_to_local (archive,
 				     file_list,
 				     tmp_dir,
@@ -6962,7 +6971,7 @@
 		const char *filename = (char*) scan->data;
 		char       *old_path = NULL, *common = NULL, *new_path = NULL;
 		char       *new_filename;
-		
+
 		old_path = g_build_filename (tmp_dir, filename, NULL);
 
 		if (strlen (filename) > (strlen (rdata->current_dir) + strlen (rdata->old_name)))
@@ -6998,7 +7007,7 @@
 
 	path_list_free (new_file_list);
 	path_list_free (file_list);
-	
+
 	/* remove the tmp dir */
 
 	fr_process_begin_command (archive->process, "rm");
@@ -7059,7 +7068,7 @@
 
 	new_filename = g_build_filename (current_dir, new_name, NULL);
 	new_filename_l = strlen (new_filename);
-		
+
 	for (i = 0; i < window->archive->command->files->len; i++) {
 		FileData   *fdata = g_ptr_array_index (window->archive->command->files, i);
 		const char *filename = fdata->full_path;
@@ -7095,7 +7104,7 @@
 	gboolean  renaming_dir = FALSE;
 	char     *utf8_old_name;
 	char     *utf8_new_name;
-	
+
 
 	if (from_sidebar) {
 		path_to_rename = fr_window_get_selected_folder_in_tree_view (window);
@@ -7107,13 +7116,13 @@
 	}
 	else {
 		FileData *selected_item;
-		
+
 		selected_item = fr_window_get_selected_item_from_file_list (window);
 		if (selected_item == NULL)
 			return;
-		
+
 		renaming_dir = file_data_is_dir (selected_item);
-		
+
 		if (renaming_dir && ! selected_item->dir) {
 			parent_dir = g_strdup (fr_window_get_current_location (window));
 			old_name = g_strdup (selected_item->list_name);
@@ -7130,10 +7139,10 @@
 			}
 			old_name = g_strdup (selected_item->name);
 		}
-		
+
 		file_data_free (selected_item);
 	}
-	
+
  retry__rename_selection:
 	utf8_old_name = g_locale_to_utf8 (old_name, -1 ,0 ,0 ,0);
 	utf8_new_name = _gtk_request_dialog_run (GTK_WINDOW (window),
@@ -7150,7 +7159,7 @@
 	if (utf8_new_name != NULL) {
 		char *new_name;
 		char *reason = NULL;
-		
+
 		new_name = g_filename_from_utf8 (utf8_new_name, -1, 0, 0, 0);
 		g_free (utf8_new_name);
 
@@ -7210,15 +7219,15 @@
 {
 	FrWindow *window = user_data_or_owner;
 	char     *data;
-	
+
 	if (selection_data->target != FR_SPECIAL_URI_LIST)
 		return;
-	
+
 	data = get_selection_data_from_clipboard_data (window, window->priv->copy_data);
 	gtk_selection_data_set (selection_data,
-				selection_data->target, 
-				8, 
-				(guchar *) data, 
+				selection_data->target,
+				8,
+				(guchar *) data,
 				strlen (data));
 	g_free (data);
 }
@@ -7229,7 +7238,7 @@
                     gpointer      user_data_or_owner)
 {
 	FrWindow *window = user_data_or_owner;
-	
+
 	if (window->priv->copy_data != NULL) {
 		fr_clipboard_data_unref (window->priv->copy_data);
 		window->priv->copy_data = NULL;
@@ -7244,11 +7253,11 @@
 {
 	GList *files;
 	char  *base_dir;
-	
+
 	if (from_sidebar) {
 		char *selected_folder;
 		char *parent_folder;
-		
+
 		files = fr_window_get_folder_tree_selection (window, TRUE, NULL);
 		selected_folder = fr_window_get_selected_folder_in_tree_view (window);
 		parent_folder = remove_level_from_path (selected_folder);
@@ -7264,13 +7273,13 @@
 	else {
 		files = fr_window_get_file_list_selection (window, TRUE, NULL);
 		base_dir = g_strdup (fr_window_get_current_location (window));
-	} 	
-	
+	}
+
 	if (return_base_dir)
 		*return_base_dir = base_dir;
 	else
 		g_free (base_dir);
-		
+
 	return files;
 }
 
@@ -7285,14 +7294,14 @@
 	GtkClipboard *clipboard;
 
 	files = fr_window_get_selection (window, from_sidebar, &base_dir);
-	
+
 	if (window->priv->copy_data != NULL)
 		fr_clipboard_data_unref (window->priv->copy_data);
 	window->priv->copy_data = fr_clipboard_data_new ();
 	window->priv->copy_data->files = files;
 	window->priv->copy_data->op = op;
 	window->priv->copy_data->base_dir = base_dir;
-	
+
 	clipboard = gtk_clipboard_get (FR_CLIPBOARD);
 	gtk_clipboard_set_with_owner (clipboard,
 				      clipboard_targets,
@@ -7300,8 +7309,8 @@
 				      fr_clipboard_get,
 				      fr_clipboard_clear,
 				      G_OBJECT (window));
-	
-	fr_window_update_sensitivity (window);	
+
+	fr_window_update_sensitivity (window);
 }
 
 
@@ -7329,28 +7338,28 @@
 }
 
 
-static void 
+static void
 add_pasted_files (FrWindow        *window,
 		  FrClipboardData *data)
 {
 	const char *current_dir_relative = data->current_dir + 1;
 	GList      *scan;
 	GList      *new_file_list = NULL;
-	
+
 	if (window->priv->password_for_paste != NULL) {
 		g_free (window->priv->password_for_paste);
 		window->priv->password_for_paste = NULL;
 	}
-	
+
 	fr_process_clear (window->archive->process);
 	for (scan = data->files; scan; scan = scan->next) {
 		const char *old_name = (char*) scan->data;
 		char       *new_name = g_build_filename (current_dir_relative, old_name + strlen (data->base_dir) - 1, NULL);
-		
+
 		/* skip folders */
 
-		if ((strcmp (old_name, new_name) != 0) 
-		    && (old_name[strlen (old_name) - 1] != '/')) 
+		if ((strcmp (old_name, new_name) != 0)
+		    && (old_name[strlen (old_name) - 1] != '/'))
 		{
 			fr_process_begin_command (window->archive->process, "mv");
 			fr_process_set_working_dir (window->archive->process, data->tmp_dir);
@@ -7363,7 +7372,7 @@
 		new_file_list = g_list_prepend (new_file_list, g_uri_escape_string (new_name, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, TRUE));
 		g_free (new_name);
 	}
-  
+
 	fr_archive_add (window->archive,
 			new_file_list,
 			data->tmp_dir,
@@ -7383,7 +7392,7 @@
 	fr_process_add_arg (window->archive->process, "-rf");
 	fr_process_add_arg (window->archive->process, data->tmp_dir);
 	fr_process_end_command (window->archive->process);
-	
+
 	fr_process_start (window->archive->process);
 }
 
@@ -7396,7 +7405,7 @@
 {
 	FrWindow *window = data;
 	gboolean  continue_batch = FALSE;
-	
+
 #ifdef DEBUG
 	debug (DEBUG_INFO, "%s [DONE] (FR::Window)\n", action_names[action]);
 #endif
@@ -7417,10 +7426,10 @@
 		window->priv->clipboard_data = NULL;
 		return;
 	}
-	
+
 	switch (action) {
 	case FR_ACTION_LISTING_CONTENT:
-		fr_process_clear (window->priv->copy_from_archive->process); 
+		fr_process_clear (window->priv->copy_from_archive->process);
 		fr_archive_extract_to_local (window->priv->copy_from_archive,
 				    	     window->priv->clipboard_data->files,
 				    	     window->priv->clipboard_data->tmp_dir,
@@ -7431,23 +7440,23 @@
 				   	     window->priv->clipboard_data->archive_password);
 		fr_process_start (window->priv->copy_from_archive->process);
 		break;
-		
-	case FR_ACTION_EXTRACTING_FILES:			    
+
+	case FR_ACTION_EXTRACTING_FILES:
 		if (window->priv->clipboard_data->op == FR_CLIPBOARD_OP_CUT) {
 			fr_process_clear (window->priv->copy_from_archive->process);
 			fr_archive_remove (window->priv->copy_from_archive,
 					   window->priv->clipboard_data->files,
 					   window->priv->compression);
 			fr_process_start (window->priv->copy_from_archive->process);
-		} 
+		}
 		else
 			add_pasted_files (window, window->priv->clipboard_data);
 		break;
-		
+
 	case FR_ACTION_DELETING_FILES:
 		add_pasted_files (window, window->priv->clipboard_data);
 		break;
-		
+
 	default:
 		break;
 	}
@@ -7460,11 +7469,11 @@
 {
 	const char *current_dir_relative;
 	GHashTable *created_dirs;
-	GList      *scan;    
+	GList      *scan;
 
-	if (window->priv->password_for_paste != NULL) 
+	if (window->priv->password_for_paste != NULL)
 		fr_clipboard_data_set_password (data, window->priv->password_for_paste);
-	
+
 	if (window->priv->clipboard_data != data) {
 		fr_clipboard_data_unref (window->priv->clipboard_data);
 		window->priv->clipboard_data = data;
@@ -7473,10 +7482,10 @@
 	fr_window_set_current_batch_action (window,
 					    FR_BATCH_ACTION_PASTE,
 					    fr_clipboard_data_ref (data),
-					    (GFreeFunc) fr_clipboard_data_unref);	
-	
+					    (GFreeFunc) fr_clipboard_data_unref);
+
 	current_dir_relative = data->current_dir + 1;
-	
+
 	data->tmp_dir = get_temp_work_dir ();
 	created_dirs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
 	for (scan = data->files; scan; scan = scan->next) {
@@ -7486,11 +7495,11 @@
 
 		if ((dir != NULL) && (g_hash_table_lookup (created_dirs, dir) == NULL)) {
 			char *dir_path;
-			
+
 			dir_path = g_build_filename (data->tmp_dir, dir, NULL);
 			debug (DEBUG_INFO, "mktree %s\n", dir_path);
 			make_directory_tree_from_path (dir_path, 0700, NULL);
-			
+
 			g_free (dir_path);
 			g_hash_table_replace (created_dirs, g_strdup (dir), "1");
 		}
@@ -7529,7 +7538,7 @@
 
 	fr_archive_load_local (window->priv->copy_from_archive,
 		               data->archive_filename,
-			       data->archive_password);	
+			       data->archive_password);
 }
 
 
@@ -7538,9 +7547,9 @@
 			      const char *current_dir)
 {
 	GtkClipboard     *clipboard;
-	GtkSelectionData *selection_data;       
+	GtkSelectionData *selection_data;
 	FrClipboardData  *paste_data;
-	
+
 	clipboard = gtk_clipboard_get (FR_CLIPBOARD);
 	selection_data = gtk_clipboard_wait_for_contents (clipboard, FR_SPECIAL_URI_LIST);
 	if (selection_data == NULL)
@@ -7549,8 +7558,8 @@
 	paste_data = get_clipboard_data_from_selection_data (window, (char*) selection_data->data);
 	paste_data->current_dir = g_strdup (current_dir);
 	fr_window_paste_from_clipboard_data (window, paste_data);
-	
-	gtk_selection_data_free (selection_data);	
+
+	gtk_selection_data_free (selection_data);
 }
 
 
@@ -7617,12 +7626,12 @@
 	cdata->process->term_on_stop = FALSE;
 
 	fr_process_begin_command (cdata->process, command);
-	for (scan = file_list; scan; scan = scan->next) 
+	for (scan = file_list; scan; scan = scan->next)
 		fr_process_add_arg (cdata->process, scan->data);
 	fr_process_end_command (cdata->process);
 
 	CommandList = g_list_prepend (CommandList, cdata);
-	fr_process_start (cdata->process);	
+	fr_process_start (cdata->process);
 }
 
 
@@ -7650,7 +7659,7 @@
 		g_clear_error (&error);
 	}
 
-	path_list_free (uris);	
+	path_list_free (uris);
 }
 
 
@@ -7670,7 +7679,7 @@
 {
 	OpenFilesData *odata;
 	GList         *scan;
-	
+
 	odata = g_new0 (OpenFilesData, 1);
 	odata->window = window;
 	odata->file_list = path_list_dup (file_list);
@@ -7681,17 +7690,17 @@
 	for (scan = file_list; scan; scan = scan->next) {
 		char *file = scan->data;
 		char *filename;
-		
+
 		filename = g_strconcat (odata->cdata->temp_dir,
 					"/",
 					file,
 					NULL);
 		odata->cdata->file_list = g_list_prepend (odata->cdata->file_list, filename);
 	}
-	
+
 	/* Add to CommandList so the cdata is released on exit. */
 	CommandList = g_list_prepend (CommandList, odata->cdata);
-	
+
 	return odata;
 }
 
@@ -7707,7 +7716,7 @@
 
 
 void
-fr_window_update_dialog_closed (FrWindow *window) 
+fr_window_update_dialog_closed (FrWindow *window)
 {
 	window->priv->update_dialog = NULL;
 }
@@ -7724,13 +7733,13 @@
 
 	if (window->archive->read_only)
 		return FALSE;
-		
+
 	fr_process_clear (window->archive->process);
-	
+
 	for (scan = file_list; scan; scan = scan->next) {
 		OpenFile *file = scan->data;
 		GList    *file_list;
-		
+
 		file_list = g_list_append (NULL, g_uri_escape_string (file->path, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, TRUE));
 		fr_archive_add (window->archive,
 				file_list,
@@ -7742,9 +7751,9 @@
 				window->priv->compression);
 		path_list_free (file_list);
 	}
-	
+
 	fr_process_start (window->archive->process);
-	
+
 	return TRUE;
 }
 
@@ -7760,8 +7769,8 @@
 	char     *monitor_uri;
 	OpenFile *file;
 	GList    *scan;
-	
-	if ((event_type != G_FILE_MONITOR_EVENT_CHANGED) 
+
+	if ((event_type != G_FILE_MONITOR_EVENT_CHANGED)
 	    && (event_type != G_FILE_MONITOR_EVENT_CREATED))
 	{
 		return;
@@ -7787,15 +7796,15 @@
 
 
 static void
-fr_window_monitor_open_file (FrWindow *window, 
+fr_window_monitor_open_file (FrWindow *window,
 			     OpenFile *file)
-{	
+{
 	GFile *f;
-	
-	window->priv->open_files = g_list_prepend (window->priv->open_files, file);                              
-	f = g_file_new_for_uri (file->extracted_uri);  
+
+	window->priv->open_files = g_list_prepend (window->priv->open_files, file);
+	f = g_file_new_for_uri (file->extracted_uri);
 	file->monitor = g_file_monitor_file (f, 0, NULL, NULL);
-	g_signal_connect (file->monitor, 
+	g_signal_connect (file->monitor,
 			  "changed",
 			  G_CALLBACK (open_file_modified_cb),
 			  window);
@@ -7808,15 +7817,15 @@
 {
 	FrWindow *window = odata->window;
 	GList    *scan1, *scan2;
-	
-	for (scan1 = odata->file_list, scan2 = odata->cdata->file_list; 
-	     scan1 && scan2; 
-	     scan1 = scan1->next, scan2 = scan2->next) 
+
+	for (scan1 = odata->file_list, scan2 = odata->cdata->file_list;
+	     scan1 && scan2;
+	     scan1 = scan1->next, scan2 = scan2->next)
 	{
 		OpenFile   *ofile;
 		const char *file = scan1->data;
 		const char *extracted_path = scan2->data;
-		
+
 		ofile = open_file_new (file, extracted_path, odata->cdata->temp_dir);
 		if (ofile != NULL)
 			fr_window_monitor_open_file (window, ofile);
@@ -7840,28 +7849,28 @@
         first_file = (char*) file_list->data;
         if (first_file == NULL)
                 return FALSE;
-	
+
 	if (! odata->window->archive->read_only)
 		monitor_extracted_files (odata);
-	
+
 	if (odata->ask_application) {
         	dlg_open_with (odata->window, file_list);
         	return FALSE;
         }
-	
+
 	first_mime_type = get_file_mime_type_for_path (first_file, FALSE);
         app = g_app_info_get_default_for_type (first_mime_type, FALSE);
-        
+
         if (app == NULL) {
         	dlg_open_with (odata->window, file_list);
         	return FALSE;
         }
-        
+
         files_to_open = g_list_append (files_to_open, g_filename_to_uri (first_file, NULL, NULL));
-        
+
         if (g_app_info_supports_files (app)) {
         	GList *scan;
-        	
+
 		for (scan = file_list->next; scan; scan = scan->next) {
 			const char *path = scan->data;
 			const char *mime_type;
@@ -7875,7 +7884,7 @@
 			}
 			else {
 				GAppInfo *app2;
-				
+
 				app2 = g_app_info_get_default_for_type (mime_type, FALSE);
 				if (g_app_info_equal (app, app2))
 					files_to_open = g_list_append (files_to_open, g_filename_to_uri (path, NULL, NULL));
@@ -7889,10 +7898,10 @@
         	g_warning ("could not launch '%s': %s", g_app_info_get_executable  (app), error->message);
         	g_clear_error (&error);
         }
-        
+
         g_object_unref (app);
         path_list_free (files_to_open);
-        
+
 	return result;
 }
 
@@ -7912,7 +7921,7 @@
 					      0,
 					      odata);
 
-	if (error->type == FR_PROC_ERROR_NONE) 
+	if (error->type == FR_PROC_ERROR_NONE)
 		fr_window_open_extracted_files (odata);
 }
 
@@ -7923,16 +7932,16 @@
 		      gboolean  ask_application)
 {
 	OpenFilesData *odata;
-	
+
 	if (window->priv->activity_ref > 0)
 		return;
-	
+
 	odata = open_files_data_new (window, file_list, ask_application);
 	fr_window_set_current_batch_action (window,
 					    FR_BATCH_ACTION_OPEN_FILES,
 					    odata,
 					    (GFreeFunc) open_files_data_free);
-					    
+
 	g_signal_connect (G_OBJECT (window->archive),
 			  "done",
 			  G_CALLBACK (fr_window_open_files__extract_done_cb),
@@ -7955,7 +7964,7 @@
 
 
 static char*
-get_default_dir (const char *dir) 
+get_default_dir (const char *dir)
 {
 	if (! is_temp_dir (dir))
 		return g_strdup (dir);
@@ -8116,7 +8125,7 @@
 	window->priv->view_folders = value;
 	fr_window_update_dir_tree (window);
 
-	set_active (window, "ViewFolders", window->priv->view_folders);	
+	set_active (window, "ViewFolders", window->priv->view_folders);
 }
 
 
@@ -8188,7 +8197,7 @@
 		debug (DEBUG_INFO, "[BATCH] EXTRACT_INTERACT\n");
 
 		if (window->priv->extract_interact_use_default_dir
-		    && (window->priv->extract_default_dir != NULL)) 
+		    && (window->priv->extract_default_dir != NULL))
 		{
 			fr_window_archive_extract (window,
 						   NULL,
@@ -8223,7 +8232,7 @@
 
 		fr_window_paste_from_clipboard_data (window, (FrClipboardData*) action->data);
 		break;
-		
+
 	case FR_BATCH_ACTION_OPEN_FILES:
 		debug (DEBUG_INFO, "[BATCH] OPEN FILES\n");
 
@@ -8240,7 +8249,7 @@
 
 	case FR_BATCH_ACTION_TEST:
 		debug (DEBUG_INFO, "[BATCH] TEST\n");
-		
+
 		fr_window_archive_test (window);
 		break;
 
@@ -8426,7 +8435,7 @@
 	fr_window_append_batch_action (window,
 				       FR_BATCH_ACTION_CLOSE,
 				       NULL,
-				       NULL);			       
+				       NULL);
 }
 
 

Modified: trunk/src/gtk-utils.c
==============================================================================
--- trunk/src/gtk-utils.c	(original)
+++ trunk/src/gtk-utils.c	Sun Jun 29 07:31:08 2008
@@ -90,7 +90,7 @@
 
 	if (message != NULL) {
 		char *escaped_message;
-		
+
 		escaped_message = g_markup_escape_text (message, -1);
 		if (secondary_message != NULL) {
 			char *escaped_secondary_message = g_markup_escape_text (secondary_message, -1);
@@ -98,17 +98,17 @@
 						       escaped_message,
 						       escaped_secondary_message);
 			g_free (escaped_secondary_message);
-		} 
+		}
 		else
 			markup_text = g_strdup (escaped_message);
 		g_free (escaped_message);
 	}
-	else 
+	else
 		markup_text = g_markup_escape_text (secondary_message, -1);
-	 
+
 	gtk_label_set_markup (GTK_LABEL (label), markup_text);
 	g_free (markup_text);
-	
+
 	gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
 	gtk_label_set_selectable (GTK_LABEL (label), TRUE);
 
@@ -268,7 +268,7 @@
 
 	button = create_button (GTK_STOCK_CANCEL, no_button_text);
 	gtk_dialog_add_action_widget (GTK_DIALOG (dialog),
-				      button, 
+				      button,
 				      GTK_RESPONSE_CANCEL);
 
 	button = create_button (GTK_STOCK_OK, yes_button_text);
@@ -343,14 +343,14 @@
 
 	button = create_button (GTK_STOCK_CANCEL, no_button_text);
 	gtk_dialog_add_action_widget (GTK_DIALOG (d),
-				      button, 
+				      button,
 				      GTK_RESPONSE_CANCEL);
 
 	/**/
 
 	button = create_button (GTK_STOCK_OK, yes_button_text);
 	gtk_dialog_add_action_widget (GTK_DIALOG (d),
-				      button, 
+				      button,
 				      GTK_RESPONSE_YES);
 
 	/**/
@@ -398,7 +398,7 @@
 	stock_id = GTK_STOCK_DIALOG_ERROR;
 
 	dialog = gtk_dialog_new_with_buttons ("",
-					      parent, 
+					      parent,
 					      flags,
 					      GTK_STOCK_OK, GTK_RESPONSE_OK,
 					      NULL);
@@ -507,9 +507,9 @@
 				    FALSE, FALSE, 0);
 
 		g_signal_connect_swapped (G_OBJECT (button),
-					  "clicked", 
-					  G_CALLBACK (toggle_visibility), 
-					  scrolled);				    
+					  "clicked",
+					  G_CALLBACK (toggle_visibility),
+					  scrolled);
 	}
 
 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
@@ -741,7 +741,7 @@
 		retval = g_strdup (gtk_icon_info_get_filename (icon_info));
 		gtk_icon_info_free (icon_info);
 	}
-	
+
 	g_free (icon_no_extension);
 
 	return retval;
@@ -796,35 +796,35 @@
 GdkPixbuf *
 get_icon_pixbuf (GtkIconTheme *icon_theme,
 		 GThemedIcon  *icon,
-		 int           size) 
+		 int           size)
 {
 	char        **icon_names;
 	GtkIconInfo  *icon_info;
 	GdkPixbuf    *pixbuf;
 	GError       *error = NULL;
-	
+
 	g_object_get (icon, "names", &icon_names, NULL);
-	
+
 	icon_info = gtk_icon_theme_choose_icon (icon_theme, (const char **)icon_names, size, 0);
 	if (icon_info == NULL) {
 		GIcon *default_icon;
-		
+
 		default_icon = g_content_type_get_icon ("gnome-fs-regular");
 		pixbuf = get_icon_pixbuf (icon_theme, G_THEMED_ICON (default_icon), size);
 		g_object_unref (default_icon);
-		
+
 		return pixbuf;
 	}
-		
+
 	pixbuf = gtk_icon_info_load_icon (icon_info, &error);
 	if (pixbuf == NULL) {
 		g_warning ("could not load icon pixbuf: %s\n", error->message);
 		g_clear_error (&error);
 	}
-	
+
 	gtk_icon_info_free (icon_info);
 	g_strfreev (icon_names);
-	
+
 	return pixbuf;
 }
 
@@ -836,14 +836,14 @@
 {
 	GdkPixbuf *pixbuf = NULL;
 	GIcon     *icon;
-	
-	if (icon_theme == NULL) 
+
+	if (icon_theme == NULL)
 		icon_theme = gtk_icon_theme_get_default ();
-	
+
 	icon = g_content_type_get_icon (mime_type);
 	pixbuf = get_icon_pixbuf (icon_theme, G_THEMED_ICON (icon), icon_size);
 	g_object_unref (icon);
-	
+
 	return pixbuf;
 }
 
@@ -864,18 +864,23 @@
 show_help_dialog (GtkWindow  *parent,
 		  const char *section)
 {
-	
+#ifdef GTK_2_13
 	GdkAppLaunchContext *app_context;
 	char                *uri;
 	GError              *error = NULL;
-	
-	uri = g_strconcat ("ghelp:file-roller", section ? "?" : NULL, section, NULL);	
-	app_context = gdk_app_launch_context_new ();
+#else
+	GAppLaunchContext *app_context;
+	char              *uri;
+	GError            *error = NULL;
+#endif
+
+	uri = g_strconcat ("ghelp:file-roller", section ? "?" : NULL, section, NULL);
+	app_context = g_app_launch_context_new ();
 	if (! g_app_info_launch_default_for_uri (uri, G_APP_LAUNCH_CONTEXT (app_context), &error)) {
   		GtkWidget *dialog;
 
 		dialog = _gtk_message_dialog_new (parent,
-						  GTK_DIALOG_DESTROY_WITH_PARENT, 
+						  GTK_DIALOG_DESTROY_WITH_PARENT,
 						  GTK_STOCK_DIALOG_ERROR,
 						  _("Could not display help"),
 						  error->message,

Modified: trunk/src/main.c
==============================================================================
--- trunk/src/main.c	(original)
+++ trunk/src/main.c	Sun Jun 29 07:31:08 2008
@@ -101,7 +101,7 @@
 	{ "application/x-ear",                  ".ear",      N_("Ear (.ear)"), TRUE, TRUE },
 	{ "application/x-executable",           ".exe",      N_("Self-extracting zip (.exe)"), TRUE, TRUE },
 	{ "application/x-gzip",                 ".gz",       NULL, FALSE, FALSE },
-	{ "application/x-jar",                  ".jar",      N_("Jar (.jar)"), TRUE, TRUE },
+	{ "application/x-java-archive",         ".jar",      N_("Jar (.jar)"), TRUE, TRUE },
 	{ "application/x-lha",                  ".lzh",      N_("Lha (.lzh)"), FALSE, TRUE },
 	{ "application/x-lzma",                 ".lzma",     NULL, FALSE, FALSE },
 	{ "application/x-lzma-compressed-tar",  ".tar.lzma", N_("Tar compressed with lzma (.tar.lzma)"), FALSE, TRUE },
@@ -137,7 +137,7 @@
 	{ ".exe", "application/x-executable" },
 	{ ".gz", "application/x-gzip" },
 	{ ".iso", "application/x-cd-image" },
-	{ ".jar", "application/x-jar" },
+	{ ".jar", "application/x-java-archive" },
 	{ ".lha", "application/x-lha" },
 	{ ".lzh", "application/x-lha" },
 	{ ".lzma", "application/x-lzma" },
@@ -241,9 +241,9 @@
 	context = g_option_context_new (N_("- Create and modify an archive"));
 	g_option_context_set_translation_domain (context, GETTEXT_PACKAGE);
 	g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE);
-	
+
 	program = gnome_program_init ("file-roller", VERSION,
-				      LIBGNOMEUI_MODULE, 
+				      LIBGNOMEUI_MODULE,
 				      argc, argv,
 				      GNOME_PARAM_GOPTION_CONTEXT, context,
 				      GNOME_PARAM_HUMAN_READABLE_NAME, _("Archive Manager"),
@@ -293,7 +293,7 @@
 {
 	if (cdata == NULL)
 		return;
-		
+
 	if ((cdata->temp_dir != NULL) && path_is_dir (cdata->temp_dir)) {
 		char *argv[4];
 
@@ -418,27 +418,27 @@
 	FrCommand            *command;
 	const char          **mime_types;
 	int                   i;
-	
+
 	reg_com = g_new0 (FrRegisteredCommand, 1);
 	reg_com->ref = 1;
 	reg_com->type = command_type;
 	reg_com->caps = g_ptr_array_new ();
-	
+
 	command = (FrCommand*) g_object_new (reg_com->type, NULL);
 	mime_types = fr_command_get_mime_types (command);
 	for (i = 0; mime_types[i] != NULL; i++) {
 		const char    *mime_type;
 		FrMimeTypeCap *cap;
-	
+
 		mime_type = get_static_string (mime_types[i]);
-	
+
 		cap = g_new0 (FrMimeTypeCap, 1);
 		cap->mime_type = mime_type;
 		cap->capabilities = fr_command_get_capabilities (command, mime_type);
 		g_ptr_array_add (reg_com->caps, cap);
 	}
-	g_object_unref (command);	
-	
+	g_object_unref (command);
+
 	return reg_com;
 }
 
@@ -455,34 +455,34 @@
 {
 	if (--(reg_com->ref) != 0)
 		return;
-	
+
 	g_ptr_array_foreach (reg_com->caps, (GFunc) g_free, NULL);
 	g_ptr_array_free (reg_com->caps, TRUE);
-	g_free (reg_com); 
+	g_free (reg_com);
 }
 
 
-FrCommandCaps  
+FrCommandCaps
 fr_registered_command_get_capabilities (FrRegisteredCommand *reg_com,
 				        const char          *mime_type)
 {
 	int i;
-		
+
 	for (i = 0; i < reg_com->caps->len; i++) {
 		FrMimeTypeCap *cap;
-		
+
 		cap = g_ptr_array_index (reg_com->caps, i);
-		if (strcmp (mime_type, cap->mime_type) == 0) 
+		if (strcmp (mime_type, cap->mime_type) == 0)
 			return cap->capabilities;
 	}
-	
+
 	return FR_COMMAND_CAP_NONE;
 }
 
 
 void
 register_command (GType command_type)
-{	
+{
 	if (Registered_Commands == NULL)
 		Registered_Commands = g_ptr_array_sized_new (5);
 	g_ptr_array_add (Registered_Commands, fr_registered_command_new (command_type));
@@ -493,10 +493,10 @@
 unregister_command (GType command_type)
 {
 	int i;
-	
+
 	for (i = 0; i < Registered_Commands->len; i++) {
 		FrRegisteredCommand *command;
-		
+
 		command = g_ptr_array_index (Registered_Commands, i);
 		if (command->type == command_type) {
 			g_ptr_array_remove_index (Registered_Commands, i);
@@ -504,7 +504,7 @@
 			return TRUE;
 		}
 	}
-	
+
 	return FALSE;
 }
 
@@ -513,17 +513,17 @@
 register_commands (void)
 {
 	/* The order here is important. Commands registered earlier have higher
-	 * priority; for example zip archives will be opened using 7Z instead 
+	 * priority; for example zip archives will be opened using 7Z instead
 	 * of ZIP.  However commands that can read and write a file format
-	 * have higher priority over commands that can only read the same 
+	 * have higher priority over commands that can only read the same
 	 * format, regardless of the registration order; for example rar
-	 * archives will be opened with 7Z only if the rar utility is not 
+	 * archives will be opened with 7Z only if the rar utility is not
 	 * installed because 7z cannot modify rar archives. */
-	 
+
 	register_command (FR_TYPE_COMMAND_TAR);
 	register_command (FR_TYPE_COMMAND_CFILE);
 	register_command (FR_TYPE_COMMAND_7Z);
-	
+
 	register_command (FR_TYPE_COMMAND_ACE);
 	register_command (FR_TYPE_COMMAND_ALZ);
 	register_command (FR_TYPE_COMMAND_AR);
@@ -535,7 +535,7 @@
 	register_command (FR_TYPE_COMMAND_RAR);
 	register_command (FR_TYPE_COMMAND_RPM);
 	register_command (FR_TYPE_COMMAND_UNSTUFF);
-	register_command (FR_TYPE_COMMAND_ZIP);	
+	register_command (FR_TYPE_COMMAND_ZIP);
 	register_command (FR_TYPE_COMMAND_ZOO);
 }
 
@@ -545,22 +545,22 @@
 				 FrCommandCaps  requested_capabilities)
 {
 	int i;
-	
+
 	if (mime_type == NULL)
 		return 0;
-	
+
 	for (i = 0; i < Registered_Commands->len; i++) {
 		FrRegisteredCommand *command;
 		FrCommandCaps        capabilities;
-		
+
 		command = g_ptr_array_index (Registered_Commands, i);
 		capabilities = fr_registered_command_get_capabilities (command, mime_type);
-			
+
 		/* the command must support all the requested capabilities */
 		if (((capabilities ^ requested_capabilities) & requested_capabilities) == 0)
 			return command->type;
 	}
-	
+
 	return 0;
 }
 
@@ -569,12 +569,12 @@
 get_mime_type_from_extension (const char *ext)
 {
 	int i;
-	
+
 	if (ext == NULL)
 		return NULL;
-	
-	for (i = G_N_ELEMENTS (file_ext_type) - 1; i >= 0; i--) 
-		if (strcasecmp (ext, file_ext_type[i].ext) == 0) 
+
+	for (i = G_N_ELEMENTS (file_ext_type) - 1; i >= 0; i--)
+		if (strcasecmp (ext, file_ext_type[i].ext) == 0)
 			return get_static_string (file_ext_type[i].mime_type);
 
 	return NULL;
@@ -586,15 +586,15 @@
 {
 	const char *ext;
 	int         i;
-		
+
 	if (filename == NULL)
 		return NULL;
 
 	ext = get_file_extension (filename);
 	if (ext == NULL)
 		return NULL;
-		
-	for (i = G_N_ELEMENTS (file_ext_type) - 1; i >= 0; i--) 
+
+	for (i = G_N_ELEMENTS (file_ext_type) - 1; i >= 0; i--)
 		if (strcasecmp (ext, file_ext_type[i].ext) == 0)
 			return ext;
 	return NULL;
@@ -605,8 +605,8 @@
 get_mime_type_index (const char *mime_type)
 {
 	int i;
-	
-	for (i = 0; mime_type_desc[i].mime_type != NULL; i++) 
+
+	for (i = 0; mime_type_desc[i].mime_type != NULL; i++)
 		if (strcmp (mime_type_desc[i].mime_type, mime_type) == 0)
 			return i;
 	return -1;
@@ -614,12 +614,12 @@
 
 
 static void
-add_if_non_present (int *a, 
+add_if_non_present (int *a,
 	            int *n,
 	            int  o)
 {
 	int i;
-	
+
 	for (i = 0; i < *n; i++) {
 		if (a[i] == o)
 			return;
@@ -643,8 +643,8 @@
 		for (j = 0; j < reg_com->caps->len; j++) {
 			FrMimeTypeCap *cap;
 			int            idx;
-			
-			cap = g_ptr_array_index (reg_com->caps, j);			
+
+			cap = g_ptr_array_index (reg_com->caps, j);
 			idx = get_mime_type_index (cap->mime_type);
 			if (idx < 0) {
 				g_warning ("mime type not recognized: %s", cap->mime_type);
@@ -660,9 +660,9 @@
 				}
 				add_if_non_present (single_file_save_type, &sf_i, idx);
 			}
-		}	
+		}
 	}
-	
+
 	open_type[o_i] = -1;
 	save_type[s_i] = -1;
 	single_file_save_type[sf_i] = -1;
@@ -683,7 +683,7 @@
 		full_path = g_strdup (path);
 	else {
 		char *current_dir;
-		
+
 		current_dir = g_get_current_dir ();
 		full_path = g_build_filename (current_dir,
 					      path,
@@ -708,10 +708,10 @@
 	/* create the config dir if necessary. */
 
 	uri = get_home_relative_uri (RC_DIR);
-	
+
 	if (uri_is_file (uri)) { /* before the gconf port this was a file, now it's folder. */
 		GFile *file;
-		
+
 		file = g_file_new_for_uri (uri);
 		g_file_delete (file, NULL, NULL);
 		g_object_unref (file);
@@ -789,13 +789,13 @@
 				fr_window_set_batch__extract (FR_WINDOW (window),
 							      archive_uri,
 							      extract_to_path);
-			g_free (archive_uri); 
+			g_free (archive_uri);
 		}
 		fr_window_append_batch_action (FR_WINDOW (window),
 					       FR_BATCH_ACTION_QUIT,
 					       NULL,
 					       NULL);
-					       
+
 		fr_window_start_batch (FR_WINDOW (window));
 	}
 	else { /* Open each archive in a window */
@@ -806,10 +806,10 @@
 			GtkWidget *window;
 			GFile     *file;
 			char      *uri;
-			
+
 			window = fr_window_new ();
 			gtk_widget_show (window);
-			
+
 			file = g_file_new_for_commandline_arg (filename);
 			uri = g_file_get_uri (file);
 			fr_window_archive_open (FR_WINDOW (window), uri, GTK_WINDOW (window));
@@ -848,7 +848,7 @@
 	int       i;
 	char     *path;
 	GFile    *file;
-	
+
 	key_file = g_key_file_new ();
 	i = 0;
 	for (scan = WindowList; scan; scan = scan->next) {
@@ -861,7 +861,7 @@
 		}
 		else {
 			char *uri;
-			
+
 			uri = g_file_get_uri (window->archive->file);
 			g_key_file_set_string (key_file, "Sessione", key, uri);
 			g_free (uri);
@@ -870,12 +870,12 @@
 
 		i++;
 	}
-	g_key_file_set_integer (key_file, "Sessione", "archives", i); 
-	
+	g_key_file_set_integer (key_file, "Sessione", "archives", i);
+
 	path = get_real_path_for_prefix (gnome_client_get_config_prefix (client));
 	file = g_file_new_for_path (path);
 	g_key_file_save (key_file, file);
-	
+
 	g_object_unref (file);
 	g_free (path);
 	g_key_file_free (key_file);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]