file-roller r2301 - in trunk: . data src



Author: paobac
Date: Thu Jun  5 11:42:07 2008
New Revision: 2301
URL: http://svn.gnome.org/viewvc/file-roller?rev=2301&view=rev

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

	* src/main.c: 
	
	do not view the folder after the extraction when in batch mode.
	
	* src/fr-window.c: 	
	
	Display the progress dialog if the operation lasts more than 5 seconds.
	Display the progress dialog without delay if extracting or converting
	an archive.  After the extraction add to the progress dialog the button
	to open the destination folder and after the conversion add the button to
	open the newly created archive.

	* src/fr-archive.c: 
	
	Compute the number of files even when extracting all the files and
	the archive command supports the operation natively.
	
	* src/preferences.h: 
	* src/fr-window.h: 
	* src/dlg-extract.c: 
	* data/file-roller.schemas: 
	
	Removed the 'view folder after extraction' ption from the 
	extraction dialog.
	
	* src/fr-command-ace.h: 
	* src/fr-command-ace.c: Added support for the ace-nonfree output format.


Modified:
   trunk/ChangeLog
   trunk/data/file-roller.schemas
   trunk/src/dlg-extract.c
   trunk/src/fr-archive.c
   trunk/src/fr-command-ace.c
   trunk/src/fr-command-ace.h
   trunk/src/fr-window.c
   trunk/src/fr-window.h
   trunk/src/main.c
   trunk/src/preferences.h

Modified: trunk/data/file-roller.schemas
==============================================================================
--- trunk/data/file-roller.schemas	(original)
+++ trunk/data/file-roller.schemas	Thu Jun  5 11:42:07 2008
@@ -243,19 +243,6 @@
       </schema>
 
       <schema>
-        <key>/schemas/apps/file-roller/dialogs/extract/view_destination_folder</key>
-	<applyto>/apps/file-roller/dialogs/extract/view_destination_folder</applyto>
-        <owner>file-roller</owner>
-        <type>bool</type>
-        <default>false</default>
-        <locale name="C">
-          <short>View destination folder after extraction</short>
-          <long>Whether to display (with Nautilus) the destination folder 
-	    after an extraction operation.</long>
-        </locale>
-      </schema>
-
-      <schema>
         <key>/schemas/apps/file-roller/dialogs/extract/overwrite</key>
 	<applyto>/apps/file-roller/dialogs/extract/overwrite</applyto>
         <owner>file-roller</owner>

Modified: trunk/src/dlg-extract.c
==============================================================================
--- trunk/src/dlg-extract.c	(original)
+++ trunk/src/dlg-extract.c	Thu Jun  5 11:42:07 2008
@@ -53,8 +53,6 @@
 	GtkWidget    *e_password_entry;
 	GtkWidget    *e_password_hbox;
 
-	GtkWidget    *e_view_folder_checkbutton;
-
 	gboolean      extract_clicked;
 } DialogData;
 
@@ -218,8 +216,6 @@
 	else
 		password = NULL;
 
-	eel_gconf_set_boolean (PREF_EXTRACT_VIEW_FOLDER, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->e_view_folder_checkbutton)));
-
 	/* create the file list. */
 
 	file_list = NULL;
@@ -254,9 +250,7 @@
 
 	/* extract ! */
 
-	fr_window_view_folder_after_extract (window, eel_gconf_get_boolean (PREF_EXTRACT_VIEW_FOLDER, FALSE));
 	fr_window_set_password (window, password);
-
 	fr_window_archive_extract (window,
 				   file_list,
 				   extract_to_dir,
@@ -443,10 +437,6 @@
 	gtk_box_pack_start (GTK_BOX (data->e_password_hbox), data->e_password_entry, TRUE, TRUE, 0);
 	gtk_entry_set_activates_default (GTK_ENTRY (data->e_password_entry), TRUE);
 	gtk_entry_set_visibility (GTK_ENTRY (data->e_password_entry), FALSE);
-
-	data->e_view_folder_checkbutton = gtk_check_button_new_with_mnemonic (_("_Open destination folder after extraction"));
-	gtk_box_pack_start (GTK_BOX (vbox1), data->e_view_folder_checkbutton, FALSE, FALSE, 0);
-
 	gtk_label_set_mnemonic_widget (GTK_LABEL (label31), data->e_password_entry);
 
 	gtk_widget_show_all (vbox1);
@@ -505,8 +495,6 @@
 	else
 		gtk_widget_set_sensitive (data->e_password_hbox, FALSE);
 
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_view_folder_checkbutton), eel_gconf_get_boolean (PREF_EXTRACT_VIEW_FOLDER, FALSE));
-
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_overwrite_checkbutton), eel_gconf_get_boolean (PREF_EXTRACT_OVERWRITE, FALSE));
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_not_newer_checkbutton), eel_gconf_get_boolean (PREF_EXTRACT_SKIP_NEWER, FALSE));
 	if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->e_overwrite_checkbutton))) {

Modified: trunk/src/fr-archive.c
==============================================================================
--- trunk/src/fr-archive.c	(original)
+++ trunk/src/fr-archive.c	Thu Jun  5 11:42:07 2008
@@ -2593,7 +2593,10 @@
 		file_list_created = TRUE;
 	}
 
-	fr_command_set_n_files (archive->command, g_list_length (file_list));
+	if (extract_all && (file_list == NULL))
+		fr_command_set_n_files (archive->command, archive->command->files->len);
+	else 
+		fr_command_set_n_files (archive->command, g_list_length (file_list));
 
 	use_base_dir = ! ((base_dir == NULL)
 			  || (strcmp (base_dir, "") == 0)

Modified: trunk/src/fr-command-ace.c
==============================================================================
--- trunk/src/fr-command-ace.c	(original)
+++ trunk/src/fr-command-ace.c	Thu Jun  5 11:42:07 2008
@@ -94,35 +94,57 @@
 	FrCommandAce  *ace_comm = FR_COMMAND_ACE (data);
 	FrCommand     *comm = FR_COMMAND (data);
 	char         **fields;
-	char          *field_name;
+	const char    *field_name;
 
 	g_return_if_fail (line != NULL);
 
-	fdata = file_data_new ();
-
-	fields = g_strsplit (line, "|", 6);
-
-	if ((fields == NULL) || (fields[0] == NULL))
-		return;
+	if (ace_comm->command_type == FR_ACE_COMMAND_UNKNOWN) {
+		if (g_str_has_prefix (line, "UNACE")) {
+			if (strstr (line, "public version") != NULL)
+				ace_comm->command_type = FR_ACE_COMMAND_PUBLIC;
+			else
+				ace_comm->command_type = FR_ACE_COMMAND_NONFREE;
+		}
+		return;		
+	}
 
-	if (! ace_comm->list_started && (strncmp(fields[0], "Date", 4) == 0)) {
-		ace_comm->list_started = TRUE;
+	if (! ace_comm->list_started) {
+		if (ace_comm->command_type == FR_ACE_COMMAND_PUBLIC) {
+			if (g_str_has_prefix (line, "Date"))
+				ace_comm->list_started = TRUE;
+		}
+		else if (ace_comm->command_type == FR_ACE_COMMAND_NONFREE) {
+			if (g_str_has_prefix (line, "  Date"))
+				ace_comm->list_started = TRUE;
+		}
 		return;
 	}
 
-	if (n_fields (fields) != 6) {
-		ace_comm->list_started = FALSE;
+	fdata = file_data_new ();
+
+	if (ace_comm->command_type == FR_ACE_COMMAND_PUBLIC)
+		fields = g_strsplit (line, "|", 6);
+	else if (ace_comm->command_type == FR_ACE_COMMAND_NONFREE)
+		fields = split_line (line, 5);
+
+	if ((fields == NULL) || (fields[0] == NULL) || (n_fields (fields) < 5))
 		return;
-	}
 
 	fdata->size = g_ascii_strtoull (fields[3], NULL, 10);
 	fdata->modified = mktime_from_string (fields[0], fields[1]);
 
-	field_name = fields[5] + 1;
+	if (ace_comm->command_type == FR_ACE_COMMAND_PUBLIC) {
+		field_name = fields[5];
+		field_name = field_name + 1;
+	}
+	else if (ace_comm->command_type == FR_ACE_COMMAND_NONFREE)
+		field_name = get_last_field (line, 6);
+
 	if (field_name[0] != '/') {
 		fdata->full_path = g_strconcat ("/", field_name, NULL);
 		fdata->original_path = fdata->full_path + 1;
-	} else {
+	} 
+	else {
 		fdata->full_path = g_strdup (field_name);
 		fdata->original_path = fdata->full_path;
 	}
@@ -144,6 +166,7 @@
 		    const char *password)
 {
 	FR_COMMAND_ACE (comm)->list_started = FALSE;
+	FR_COMMAND_ACE (comm)->command_type = FR_ACE_COMMAND_UNKNOWN;
 
 	fr_process_set_out_line_func (FR_COMMAND (comm)->process, 
 				      process_line,
@@ -151,6 +174,7 @@
 
 	fr_process_begin_command (comm->process, "unace");
 	fr_process_add_arg (comm->process, "v");
+	fr_process_add_arg (comm->process, "-y");
 	fr_process_add_arg (comm->process, comm->e_filename);
 	fr_process_end_command (comm->process);
 	fr_process_start (comm->process);
@@ -177,6 +201,7 @@
 		fr_process_add_arg (comm->process, "e");
 	else
 		fr_process_add_arg (comm->process, "x");
+	fr_process_add_arg (comm->process, "-y");
 	fr_process_add_arg (comm->process, comm->e_filename);
 
 	for (scan = file_list; scan; scan = scan->next)
@@ -192,6 +217,7 @@
 {
         fr_process_begin_command (comm->process, "unace");
         fr_process_add_arg (comm->process, "t");
+	fr_process_add_arg (comm->process, "-y");
 	fr_process_add_arg (comm->process, comm->e_filename);
         fr_process_end_command (comm->process);
 }

Modified: trunk/src/fr-command-ace.h
==============================================================================
--- trunk/src/fr-command-ace.h	(original)
+++ trunk/src/fr-command-ace.h	Thu Jun  5 11:42:07 2008
@@ -35,13 +35,21 @@
 #define FR_IS_COMMAND_ACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), FR_TYPE_COMMAND_ACE))
 #define FR_COMMAND_ACE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), FR_TYPE_COMMAND_ACE, FrCommandAceClass))
 
+typedef enum {
+	FR_ACE_COMMAND_UNKNOWN = 0,
+	FR_ACE_COMMAND_PUBLIC,
+	FR_ACE_COMMAND_NONFREE
+} FrAceCommand;
+
 typedef struct _FrCommandAce       FrCommandAce;
 typedef struct _FrCommandAceClass  FrCommandAceClass;
 
 struct _FrCommandAce
 {
 	FrCommand  __parent;
-	gboolean   list_started;
+
+	gboolean     list_started;
+	FrAceCommand command_type;
 };
 
 struct _FrCommandAceClass

Modified: trunk/src/fr-window.c
==============================================================================
--- trunk/src/fr-window.c	(original)
+++ trunk/src/fr-window.c	Thu Jun  5 11:42:07 2008
@@ -62,8 +62,8 @@
 #define MAX_MESSAGE_LENGTH 50
 #define CHECK_CLIPBOARD_TIMEOUT 500
 
-#define PROGRESS_DIALOG_WIDTH 300
-#define PROGRESS_TIMEOUT_MSECS 1000     /* FIXME */
+#define PROGRESS_DIALOG_DEFAULT_WIDTH 400
+#define PROGRESS_TIMEOUT_MSECS 5000     /* FIXME */
 #define PROGRESS_BAR_HEIGHT 10
 
 #define HIDE_PROGRESS_TIMEOUT_MSECS 500 /* FIXME */
@@ -110,24 +110,29 @@
 	{ "XdndDirectSave0", 0, 2 }
 };
 
+
 typedef struct {
 	FrBatchActionType type;
 	void *            data;
 	GFreeFunc         free_func;
 } FRBatchAction;
 
+
 typedef struct {
 	guint      converting : 1;
 	char      *temp_dir;
 	FrArchive *new_archive;
 	char      *password;
+	char      *new_file;
 } FRConvertData;
 
+
 typedef enum {
 	FR_CLIPBOARD_OP_CUT,
 	FR_CLIPBOARD_OP_COPY
 } FRClipboardOp;
 
+
 typedef struct {
 	GList    *file_list;
 	char     *extract_to_dir;
@@ -150,6 +155,13 @@
 } FrWindowArea;
 
 
+typedef enum {
+	DIALOG_RESPONSE_NONE = 1,
+	DIALOG_RESPONSE_OPEN_ARCHIVE,
+	DIALOG_RESPONSE_OPEN_DESTINATION_FOLDER
+} DialogResponse;
+
+
 /* -- FrClipboardData -- */
 
 
@@ -252,6 +264,7 @@
 	guint            help_message_cid;
 	guint            list_info_cid;
 	guint            progress_cid;
+	char *           last_status_message;
 
 	GtkWidget *      up_arrows[5];
 	GtkWidget *      down_arrows[5];
@@ -275,8 +288,6 @@
 	gboolean         freeze_default_dir;
 	gboolean         asked_for_password;
 
-	gboolean         view_folder_after_extraction;
-
 	FRBatchAction    current_batch_action;
 
 	gboolean         give_focus_to_the_list;
@@ -339,41 +350,47 @@
 
 	/* progress dialog data */
 
-	GtkWidget *progress_dialog;
-	GtkWidget *pd_action;
-	GtkWidget *pd_archive;
-	GtkWidget *pd_message;
-	GtkWidget *pd_progress_bar;
-	gboolean   progress_pulse;
-	guint      progress_timeout;  /* Timeout to display the progress dialog. */
-	guint      hide_progress_timeout;  /* Timeout to hide the progress dialog. */
-	FrAction   pd_last_action;
-	char      *pd_last_archive;
+	GtkWidget        *progress_dialog;
+	GtkWidget        *pd_action;
+	GtkWidget        *pd_archive;
+	GtkWidget        *pd_message;
+	GtkWidget        *pd_progress_bar;
+	GtkWidget        *pd_cancel_button;
+	GtkWidget        *pd_close_button;
+	GtkWidget        *pd_open_archive_button;
+	GtkWidget        *pd_open_destination_button;
+	gboolean          progress_pulse;
+	guint             progress_timeout;  /* Timeout to display the progress dialog. */
+	guint             hide_progress_timeout;  /* Timeout to hide the progress dialog. */
+	FrAction          pd_last_action;
+	char             *pd_last_archive;
 
 	/* update dialog data */
 	
-	gpointer   update_dialog;
-	GList     *open_files;
+	gpointer          update_dialog;
+	GList            *open_files;
 
 	/* batch mode data */
 
-	gboolean   batch_mode;          /* whether we are in a non interactive
+	gboolean          batch_mode;          /* whether we are in a non interactive
 					 * mode. */
-	GList     *batch_action_list;   /* FRBatchAction * elements */
-	GList     *batch_action;        /* current action. */
+	GList            *batch_action_list;   /* FRBatchAction * elements */
+	GList            *batch_action;        /* current action. */
+
+	/* misc */
 
-	guint      cnxn_id[GCONF_NOTIFICATIONS];
+	guint             cnxn_id[GCONF_NOTIFICATIONS];
 
-	gulong     theme_changed_handler_id;
-	gboolean   non_interactive;
-	char      *extract_here_dir;
-	gboolean   extract_interact_use_default_dir;
-	gboolean   update_dropped_files;
-	gboolean   batch_adding_one_file;
-
-	GtkWindow *load_error_parent_window;
-	gboolean   showing_error_dialog;
-	GtkWindow *error_dialog_parent;
+	gulong            theme_changed_handler_id;
+	gboolean          non_interactive;
+	char             *extract_here_dir;
+	gboolean          extract_interact_use_default_dir;
+	gboolean          update_dropped_files;
+	gboolean          batch_adding_one_file;
+
+	GtkWindow        *load_error_parent_window;
+	gboolean          showing_error_dialog;
+	GtkWindow        *error_dialog_parent;
 };
 
 
@@ -490,6 +507,34 @@
 
 
 static void
+fr_window_convert_data_free (FrWindow   *window,
+			     gboolean    all)
+{
+	if (all) {
+		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;
+	}
+}
+
+
+static void
 fr_window_free_private_data (FrWindow *window)
 {
 	FrWindowPrivateData *priv = window->priv;
@@ -558,6 +603,8 @@
 	
 	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;
@@ -584,6 +631,7 @@
 
 	g_free (priv->pd_last_archive);
 	g_free (priv->extract_here_dir);
+	g_free (priv->last_status_message);
 
 	preferences_set_sort_method (priv->sort_method);
 	preferences_set_sort_type (priv->sort_type);
@@ -2079,7 +2127,8 @@
 
 
 static void
-close_progress_dialog (FrWindow *window)
+close_progress_dialog (FrWindow *window,
+		       gboolean  close_now)
 {
 	if (window->priv->progress_timeout != 0) {
 		g_source_remove (window->priv->progress_timeout);
@@ -2088,14 +2137,24 @@
 
 	if (! window->priv->batch_mode && GTK_WIDGET_MAPPED (window))
 		gtk_widget_hide (window->priv->progress_bar);
-
-	if (window->priv->hide_progress_timeout != 0)
+		
+	if (window->priv->progress_dialog == NULL)
 		return;
 
-	if (window->priv->progress_dialog != NULL)
+	if (close_now) {
+		if (window->priv->hide_progress_timeout != 0) {
+			g_source_remove (window->priv->hide_progress_timeout);
+			window->priv->hide_progress_timeout = 0;
+		}
+		real_close_progress_dialog (window);
+	}
+	else {
+		if (window->priv->hide_progress_timeout != 0)
+			return;
 		window->priv->hide_progress_timeout = g_timeout_add (HIDE_PROGRESS_TIMEOUT_MSECS,
 								     real_close_progress_dialog,
 								     window);
+	}
 }
 
 
@@ -2106,7 +2165,7 @@
 {
 	if (window->priv->stoppable) {
 		activate_action_stop (NULL, window);
-		close_progress_dialog (window);
+		close_progress_dialog (window, TRUE);
 	}
 
 	return TRUE;
@@ -2114,13 +2173,76 @@
 
 
 static void
+open_folder (GtkWindow  *parent,
+	     const char *folder)
+{
+	GdkAppLaunchContext *app_context;
+	GError              *error = NULL;
+	
+	if (folder == NULL)
+		return;
+
+	app_context = gdk_app_launch_context_new ();
+	if (! g_app_info_launch_default_for_uri (folder, G_APP_LAUNCH_CONTEXT (app_context), &error)) {
+		GtkWidget *d;
+		char      *utf8_name;
+		char      *message;
+
+		utf8_name = g_filename_display_name (folder);
+		message = g_strdup_printf (_("Could not display the folder \"%s\""), utf8_name);
+		g_free (utf8_name);
+
+		d = _gtk_error_dialog_new (parent,
+					   GTK_DIALOG_MODAL,
+					   NULL,
+					   message,
+					   error->message);
+		gtk_dialog_run (GTK_DIALOG (d));
+		gtk_widget_destroy (d);
+
+		g_free (message);
+		g_clear_error (&error);
+	}
+	g_object_unref (app_context);
+}
+
+
+static void
+fr_window_view_extraction_destination_folder (FrWindow *window)
+{
+	open_folder (GTK_WINDOW (window), fr_archive_get_last_extraction_destination (window->archive));
+}
+
+
+static void
 progress_dialog_response (GtkDialog *dialog,
 			  int        response_id,
 			  FrWindow  *window)
 {
-	if ((response_id == GTK_RESPONSE_CANCEL) && window->priv->stoppable) {
-		activate_action_stop (NULL, window);
-		close_progress_dialog (window);
+	GtkWidget *new_window;
+	
+	switch (response_id) {
+	case GTK_RESPONSE_CANCEL:
+		if (window->priv->stoppable) {
+			activate_action_stop (NULL, window);
+			close_progress_dialog (window, TRUE);
+		}
+		break;
+	case GTK_RESPONSE_CLOSE:
+		close_progress_dialog (window, TRUE);
+		break;
+	case DIALOG_RESPONSE_OPEN_ARCHIVE:		
+		new_window = fr_window_new ();
+		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;
+	case DIALOG_RESPONSE_OPEN_DESTINATION_FOLDER:
+		fr_window_view_extraction_destination_folder (window);
+		close_progress_dialog (window, TRUE);
+		break;
+	default:
+		break;
 	}
 }
 
@@ -2197,6 +2319,8 @@
 		      const char *msg,
 		      FrWindow   *window)
 {
+	char *current_archive;
+	
 	if (window->priv->progress_dialog == NULL)
 		return TRUE;
 
@@ -2232,18 +2356,23 @@
 	else if (window->priv->pd_last_action != window->priv->action)
 		progress_dialog__set_last_action (window, window->priv->action);
 
-	if (strcmp_null_tolerant (window->priv->pd_last_archive, window->priv->archive_uri) != 0) {
+	if (window->priv->convert_data.converting)
+		current_archive = window->priv->convert_data.new_file;
+	else
+		current_archive = window->priv->archive_uri;
+
+	if (strcmp_null_tolerant (window->priv->pd_last_archive, current_archive) != 0) {
 		g_free (window->priv->pd_last_archive);
-		if (window->priv->archive_uri == NULL) {
+		if (current_archive == NULL) {
 			window->priv->pd_last_archive = NULL;
 			gtk_label_set_text (GTK_LABEL (window->priv->pd_archive), "");
 		}
 		else {
 			char *name;
 			
-			window->priv->pd_last_archive = g_strdup (window->priv->archive_uri);
+			window->priv->pd_last_archive = g_strdup (current_archive);
 
-			name = g_filename_display_basename (window->priv->archive_uri);
+			name = g_filename_display_basename (window->priv->pd_last_archive);
 			gtk_label_set_text (GTK_LABEL (window->priv->pd_archive), name);
 			g_free (name);
 		}
@@ -2253,6 +2382,139 @@
 }
 
 
+static void
+create_the_progress_dialog (FrWindow *window)
+{
+	GtkWindow     *parent;
+	GtkDialog     *d;
+	GtkWidget     *vbox;
+	GtkWidget     *align;
+	GtkWidget     *progress_vbox;
+	GtkWidget     *lbl;
+	const char    *title;
+	char          *markup;
+	PangoAttrList *attr_list;
+	
+	if (window->priv->progress_dialog != NULL) 
+		return;
+	
+	if (window->priv->batch_mode)
+		parent = NULL;
+	else
+		parent = GTK_WINDOW (window);
+
+	window->priv->pd_last_action = window->priv->action;
+	title = get_message_from_action (window->priv->pd_last_action);
+	window->priv->progress_dialog = gtk_dialog_new_with_buttons (title,
+					       			     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);
+
+	/* action label */
+
+	lbl = window->priv->pd_action = gtk_label_new ("");
+
+	markup = g_markup_printf_escaped ("<span weight=\"bold\" size=\"larger\">%s</span>", title);
+	gtk_label_set_markup (GTK_LABEL (lbl), markup);
+	g_free (markup);
+
+	align = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
+	gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 12, 0, 0);
+
+	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);
+
+	/* archive name */
+
+	g_free (window->priv->pd_last_archive);
+	window->priv->pd_last_archive = NULL;
+	if (window->priv->archive_uri != NULL) {
+		GtkWidget *hbox;
+		char      *name;
+
+		hbox = gtk_hbox_new (FALSE, 6);
+		gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
+
+		lbl = gtk_label_new ("");
+		markup = g_markup_printf_escaped ("<b>%s</b>", _("Archive:"));
+		gtk_label_set_markup (GTK_LABEL (lbl), markup);
+		g_free (markup);
+		gtk_box_pack_start (GTK_BOX (hbox), lbl, FALSE, FALSE, 0);
+
+		window->priv->pd_last_archive = g_strdup (window->priv->archive_uri);
+		name = g_filename_display_basename (window->priv->pd_last_archive);
+		lbl = window->priv->pd_archive = gtk_label_new (name);
+		g_free (name);
+
+		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 (hbox), lbl, TRUE, TRUE, 0);
+	}
+
+	/* progress and details */
+
+	align = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
+	gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 6, 0, 0);
+
+	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 ();
+	gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (window->priv->pd_progress_bar), ACTIVITY_PULSE_STEP);
+	gtk_box_pack_start (GTK_BOX (progress_vbox), window->priv->pd_progress_bar, TRUE, TRUE, 0);
+
+	/* details label */
+
+	lbl = window->priv->pd_message = gtk_label_new ("");
+
+	attr_list = pango_attr_list_new ();
+	pango_attr_list_insert (attr_list, pango_attr_style_new (PANGO_STYLE_ITALIC));
+	gtk_label_set_attributes (GTK_LABEL (lbl), attr_list);
+	pango_attr_list_unref (attr_list);
+
+	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 */
+
+	g_signal_connect (G_OBJECT (window->priv->progress_dialog),
+			  "response",
+			  G_CALLBACK (progress_dialog_response),
+			  window);
+	g_signal_connect (G_OBJECT (window->priv->progress_dialog),
+			  "delete_event",
+			  G_CALLBACK (progress_dialog_delete_event),
+			  window);
+}
+
+
 static gboolean
 display_progress_dialog (gpointer data)
 {
@@ -2267,9 +2529,9 @@
 						   window->priv->stoppable);
 		if (! window->priv->non_interactive)
 			gtk_widget_show (GTK_WIDGET (window));
-
+		gtk_widget_hide (window->priv->progress_bar);
 		gtk_widget_show (window->priv->progress_dialog);
-		fr_window_message_cb (NULL, NULL, window);
+		fr_window_message_cb (NULL, window->priv->last_status_message, window);
 	}
 
 	window->priv->progress_timeout = 0;
@@ -2279,133 +2541,100 @@
 
 
 static void
-open_progress_dialog (FrWindow *window)
+open_progress_dialog (FrWindow *window,
+		      gboolean  open_now)
 {
-	/* FIXME: decide whether to use the progress bar or the dialog when
-	 * not in batch mode.
-	if (! window->priv->batch_mode) {
-		gtk_widget_show (window->priv->progress_bar);
-		return;
-	}*/
-
 	if (window->priv->hide_progress_timeout != 0) {
 		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)
+	if (window->priv->progress_timeout != 0) 
 		return;
 
-	if (window->priv->progress_dialog == NULL) {
-		GtkWindow     *parent;
-		GtkDialog     *d;
-		GtkWidget     *vbox;
-		GtkWidget     *lbl;
-		const char    *title;
-		char          *markup;
-		PangoAttrList *attr_list;
-
-		if (window->priv->batch_mode)
-			parent = NULL;
-		else
-			parent = GTK_WINDOW (window);
-
-		window->priv->pd_last_action = window->priv->action;
-		title = get_message_from_action (window->priv->pd_last_action);
-		window->priv->progress_dialog = gtk_dialog_new_with_buttons (
-						       title,
-						       parent,
-						       GTK_DIALOG_DESTROY_WITH_PARENT,
-						       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-						       NULL);
-		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);
-
-		/* 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);
-
-		/* action label */
-
-		lbl = window->priv->pd_action = gtk_label_new ("");
-
-		markup = g_markup_printf_escaped ("<span weight=\"bold\" size=\"larger\">%s</span>", title);
-		gtk_label_set_markup (GTK_LABEL (lbl), markup);
-		g_free (markup);
-
-		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 (vbox), lbl, TRUE, TRUE, 0);
-
-		/* archive name */
-
-		g_free (window->priv->pd_last_archive);
-		window->priv->pd_last_archive = NULL;
-		if (window->priv->archive_uri != NULL) {
-			GtkWidget *hbox;
-			char      *name;
-
-			hbox = gtk_hbox_new (FALSE, 6);
-			gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 6);
-
-			lbl = gtk_label_new ("");
-			markup = g_markup_printf_escaped ("<b>%s</b>", _("Archive:"));
-			gtk_label_set_markup (GTK_LABEL (lbl), markup);
-			g_free (markup);
-			gtk_box_pack_start (GTK_BOX (hbox), lbl, FALSE, FALSE, 0);
-
-			window->priv->pd_last_archive = g_strdup (window->priv->archive_uri);
-			name = g_filename_display_basename (window->priv->pd_last_archive);
-			lbl = window->priv->pd_archive = gtk_label_new (name);
-			g_free (name);
-
-			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 (hbox), lbl, TRUE, TRUE, 0);
-		}
-
-		/* progress bar */
-
-		window->priv->pd_progress_bar = gtk_progress_bar_new ();
-		gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (window->priv->pd_progress_bar), ACTIVITY_PULSE_STEP);
-
-		gtk_widget_set_size_request (window->priv->pd_progress_bar, PROGRESS_DIALOG_WIDTH, -1);
-		gtk_box_pack_start (GTK_BOX (vbox), window->priv->pd_progress_bar, TRUE, TRUE, 0);
+	if (! window->priv->batch_mode) 
+		gtk_widget_show (window->priv->progress_bar);
 
-		/* details label */
+	create_the_progress_dialog (window);
+	gtk_widget_show (window->priv->pd_cancel_button);
+	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
+		window->priv->progress_timeout = g_timeout_add (PROGRESS_TIMEOUT_MSECS,
+							        display_progress_dialog,
+							        window);
+}
 
-		lbl = window->priv->pd_message = gtk_label_new ("");
 
-		attr_list = pango_attr_list_new ();
-		pango_attr_list_insert (attr_list, pango_attr_style_new (PANGO_STYLE_ITALIC));
-		gtk_label_set_attributes (GTK_LABEL (lbl), attr_list);
-		pango_attr_list_unref (attr_list);
+static gboolean
+fr_window_progress_cb (FrCommand  *command,
+		       double      fraction,
+		       FrWindow   *window)
+{
+	window->priv->progress_pulse = (fraction < 0.0);
+	if (! window->priv->progress_pulse) {
+		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);
+	}
+	return TRUE;
+}
 
-		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 (vbox), lbl, TRUE, TRUE, 0);
 
-		/**/
+static void
+open_progress_dialog_with_open_destination (FrWindow *window)
+{
+	if (window->priv->hide_progress_timeout != 0) {
+		g_source_remove (window->priv->hide_progress_timeout);
+		window->priv->hide_progress_timeout = 0;
+	}
+	if (window->priv->progress_timeout != 0) {
+		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);
+	gtk_widget_show (window->priv->pd_open_destination_button);
+	gtk_widget_show (window->priv->pd_close_button);
+	display_progress_dialog (window);
+	fr_window_progress_cb (NULL, 1.0, window);
+	fr_window_message_cb (NULL, _("Extraction completed successfully"), window);
+}
 
-		g_signal_connect (G_OBJECT (window->priv->progress_dialog),
-				  "response",
-				  G_CALLBACK (progress_dialog_response),
-				  window);
-		g_signal_connect (G_OBJECT (window->priv->progress_dialog),
-				  "delete_event",
-				  G_CALLBACK (progress_dialog_delete_event),
-				  window);
 
-		gtk_widget_show_all (vbox);
+static void
+open_progress_dialog_with_open_archive (FrWindow *window)
+{
+	if (window->priv->hide_progress_timeout != 0) {
+		g_source_remove (window->priv->hide_progress_timeout);
+		window->priv->hide_progress_timeout = 0;
 	}
-
-	window->priv->progress_timeout = g_timeout_add (PROGRESS_TIMEOUT_MSECS,
-						        display_progress_dialog,
-						        window);
+	if (window->priv->progress_timeout != 0) {
+		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);
+	gtk_widget_show (window->priv->pd_open_archive_button);
+	gtk_widget_show (window->priv->pd_close_button);
+	display_progress_dialog (window);
+	fr_window_progress_cb (NULL, 1.0, window);
+	fr_window_message_cb (NULL, _("Archive created successfully"), window);
 }
 
 
@@ -2413,16 +2642,24 @@
 fr_window_push_message (FrWindow   *window,
 			const char *msg)
 {
-	if (GTK_WIDGET_MAPPED (window))
-		gtk_statusbar_push (GTK_STATUSBAR (window->priv->statusbar), window->priv->progress_cid, msg);
+	if (! GTK_WIDGET_MAPPED (window))
+		return;
+
+	g_free (window->priv->last_status_message);
+	window->priv->last_status_message = g_strdup (msg);
+
+	gtk_statusbar_push (GTK_STATUSBAR (window->priv->statusbar), window->priv->progress_cid, window->priv->last_status_message);
+	if (window->priv->progress_dialog != NULL)
+		gtk_label_set_text (GTK_LABEL (window->priv->pd_message), window->priv->last_status_message);
 }
 
 
 void
 fr_window_pop_message (FrWindow *window)
 {
-	if (GTK_WIDGET_MAPPED (window))
-		gtk_statusbar_pop (GTK_STATUSBAR (window->priv->statusbar), window->priv->progress_cid);
+	if (! GTK_WIDGET_MAPPED (window))
+		return;
+	gtk_statusbar_pop (GTK_STATUSBAR (window->priv->statusbar), window->priv->progress_cid);
 	if (window->priv->progress_dialog != NULL)
 		gtk_label_set_text (GTK_LABEL (window->priv->pd_message), "");
 }
@@ -2447,7 +2684,16 @@
 	message = get_message_from_action (action);
 	full_msg = g_strdup_printf ("%s, %s", message, _("wait please..."));
 	fr_window_push_message (window, full_msg);
-	open_progress_dialog (window);
+	
+	switch (action) {
+	case FR_ACTION_EXTRACTING_FILES:
+		open_progress_dialog (window, TRUE);
+		break;
+	default:
+		open_progress_dialog (window, FALSE);
+		break;
+	}
+		
 	if (archive->command != NULL) {
 		fr_command_progress (archive->command, -1.0);
 		fr_command_message (archive->command, message);
@@ -2493,57 +2739,6 @@
 
 
 static void
-open_folder (GtkWindow  *parent,
-	     const char *folder)
-{
-	GdkAppLaunchContext *app_context;
-	GError              *error = NULL;
-	
-	if (folder == NULL)
-		return;
-
-	app_context = gdk_app_launch_context_new ();
-	if (! g_app_info_launch_default_for_uri (folder, G_APP_LAUNCH_CONTEXT (app_context), &error)) {
-		GtkWidget *d;
-		char      *utf8_name;
-		char      *message;
-
-		utf8_name = g_filename_display_name (folder);
-		message = g_strdup_printf (_("Could not display the folder \"%s\""), utf8_name);
-		g_free (utf8_name);
-
-		d = _gtk_error_dialog_new (parent,
-					   GTK_DIALOG_MODAL,
-					   NULL,
-					   message,
-					   error->message);
-		gtk_dialog_run (GTK_DIALOG (d));
-		gtk_widget_destroy (d);
-
-		g_free (message);
-		g_clear_error (&error);
-	}
-	g_object_unref (app_context);
-}
-
-
-void
-fr_window_convert_data_free (FrWindow *window)
-{
-	window->priv->convert_data.converting = FALSE;
-
-	g_free (window->priv->convert_data.temp_dir);
-	window->priv->convert_data.temp_dir = NULL;
-
-	g_object_unref (window->priv->convert_data.new_archive);
-	g_free (window->priv->convert_data.password);
-	
-	window->priv->convert_data.new_archive = NULL;
-	window->priv->convert_data.password = NULL;
-}
-
-
-static void
 error_dialog_response_cb (GtkDialog *dialog,
 			  gint       arg1,
 			  gpointer   user_data)
@@ -2565,6 +2760,8 @@
 			     GtkWidget *dialog,
 			     GtkWindow *dialog_parent)
 {
+	close_progress_dialog (window, TRUE);
+	
 	if (dialog_parent != NULL)
 		gtk_window_set_modal (dialog_parent, FALSE);
 	g_signal_connect (dialog,
@@ -2586,6 +2783,7 @@
 	       FrProcError *error)
 {
 	if (error->type == FR_PROC_ERROR_ASK_PASSWORD) {
+		close_progress_dialog (window, TRUE);
 		dlg_ask_password (window);
 		return FALSE;
 	}
@@ -2707,7 +2905,7 @@
 	if ((action == FR_ACTION_GETTING_FILE_LIST) || (action == FR_ACTION_ADDING_FILES)) {
 		fr_window_stop_activity_mode (window);
 		fr_window_pop_message (window);
-		close_progress_dialog (window);
+		close_progress_dialog (window, FALSE);
 	}
 
 	if (action != FR_ACTION_ADDING_FILES)
@@ -2716,12 +2914,15 @@
 	handle_errors (window, archive, action, error);
 
 	if (error->type == FR_PROC_ERROR_NONE) {
-		GtkWidget *d;
+		/*GtkWidget *d;
 		char      *filename;
 		char      *basename;	
 		char      *msg;
-		int        result;
+		int        result;*/
+				
+		open_progress_dialog_with_open_archive (window);
 		
+		/*
 		filename = g_file_get_basename (window->priv->convert_data.new_archive->file);
 		basename = g_filename_display_basename (filename);
 		msg = g_strdup_printf (_("The archive \"%s\" has been created successfully"), basename);
@@ -2749,28 +2950,17 @@
 			fr_window_archive_open (FR_WINDOW (new_window), uri, GTK_WINDOW (new_window));
 			g_free (uri);
 		}
+		*/
 	}
 
 	remove_local_directory (window->priv->convert_data.temp_dir);
-	fr_window_convert_data_free (window);
+	fr_window_convert_data_free (window, FALSE);
 
 	fr_window_update_sensitivity (window);
 	fr_window_update_statusbar_list_info (window);
 }
 
 
-static gboolean
-view_extraction_destination_folder (gpointer data)
-{
-	FrWindow *window = data;
-	
-	open_folder (GTK_WINDOW (window), fr_archive_get_last_extraction_destination (window->archive));
-	window->priv->view_folder_after_extraction = FALSE;
-	
-	return FALSE;
-}
-
-
 static void fr_window_exec_next_batch_action (FrWindow *window);
 
 
@@ -2791,7 +2981,6 @@
 
 	fr_window_stop_activity_mode (window);
 	fr_window_pop_message (window);
-	close_progress_dialog (window);
 
 	continue_batch = handle_errors (window, archive, action, error);
 
@@ -2801,6 +2990,7 @@
 	switch (action) {
 	case FR_ACTION_CREATING_NEW_ARCHIVE:
 	case FR_ACTION_CREATING_ARCHIVE:
+		close_progress_dialog (window, FALSE);
 		if (error->type != FR_PROC_ERROR_STOPPED) {
 			fr_window_history_clear (window);
 			fr_window_go_to_location (window, "/", TRUE);
@@ -2811,6 +3001,7 @@
 		break;
 
 	case FR_ACTION_LOADING_ARCHIVE:
+		close_progress_dialog (window, FALSE);
 		if (error->type != FR_PROC_ERROR_NONE) {
 			fr_window_remove_from_recent_list (window, window->priv->archive_uri);
 			if (window->priv->non_interactive) {
@@ -2824,7 +3015,7 @@
 				gtk_window_present (GTK_WINDOW (window));
 		}
 		continue_batch = FALSE;
-
+		
 		g_signal_emit (G_OBJECT (window),
 			       fr_window_signals[ARCHIVE_LOADED],
 			       0,
@@ -2832,6 +3023,7 @@
 		break;
 
 	case FR_ACTION_LISTING_CONTENT:
+		close_progress_dialog (window, FALSE);
 		if (error->type != FR_PROC_ERROR_NONE) {
 			fr_window_remove_from_recent_list (window, window->priv->archive_uri);
 			fr_window_archive_close (window);
@@ -2868,10 +3060,12 @@
 		break;
 
 	case FR_ACTION_DELETING_FILES:
+		close_progress_dialog (window, FALSE);
 		fr_window_archive_reload (window);
 		return;
 
 	case FR_ACTION_ADDING_FILES:
+		close_progress_dialog (window, FALSE);
 		if (error->type != FR_PROC_ERROR_NONE) {
 			fr_window_archive_reload (window);
 			return;
@@ -2886,6 +3080,7 @@
 		break;
 
 	case FR_ACTION_TESTING_ARCHIVE:
+		close_progress_dialog (window, FALSE);
 		if (error->type == FR_PROC_ERROR_NONE)
 			fr_window_view_last_output (window, _("Test Result"));
 		return;
@@ -2894,9 +3089,8 @@
 		if (error->type != FR_PROC_ERROR_NONE) {
 			if (window->priv->convert_data.converting) {
 				remove_local_directory (window->priv->convert_data.temp_dir);
-				fr_window_convert_data_free (window);
+				fr_window_convert_data_free (window, TRUE);
 			}
-			window->priv->view_folder_after_extraction = FALSE;
 			break;
 		}
 
@@ -2918,6 +3112,9 @@
 				  window->priv->compression);
 			g_free (source_dir);
 		}
+		else 
+			open_progress_dialog_with_open_destination (window);
+		/*
 		else if (window->priv->view_folder_after_extraction) {
 			if (window->priv->batch_mode) {
 				g_usleep (G_USEC_PER_SEC);
@@ -2925,10 +3122,11 @@
 			}
 			else
 				g_timeout_add (500, view_extraction_destination_folder, window);
-		}
+		}*/
 		break;
 
 	default:
+		close_progress_dialog (window, FALSE);
 		continue_batch = FALSE;
 		break;
 	}
@@ -4731,27 +4929,6 @@
 
 
 static gboolean
-fr_window_progress_cb (FrCommand  *command,
-		       double      fraction,
-		       FrWindow   *window)
-{
-	if (fraction < 0.0)
-		window->priv->progress_pulse = TRUE;
-
-	else {
-		window->priv->progress_pulse = FALSE;
-		if (window->priv->progress_dialog != NULL)
-			gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (window->priv->pd_progress_bar), CLAMP (fraction, 0.0, 1.0));
-		gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (window->priv->progress_bar), CLAMP (fraction, 0.0, 1.0));
-	}
-
-	return TRUE;
-}
-
-
-
-
-static gboolean
 fr_window_stoppable_cb (FrCommand  *command,
 			gboolean    stoppable,
 			FrWindow   *window)
@@ -5188,7 +5365,6 @@
 	window->priv->open_default_dir = g_strdup (get_home_uri ());
 	window->priv->add_default_dir = g_strdup (get_home_uri ());
 	window->priv->extract_default_dir = g_strdup (get_home_uri ());
-	window->priv->view_folder_after_extraction = FALSE;
 
 	window->priv->give_focus_to_the_list = FALSE;
 
@@ -5863,20 +6039,8 @@
 	g_return_if_fail (uri != NULL);
 	g_return_if_fail (window->archive != NULL);
 
-	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;
-	}
+	fr_window_convert_data_free (window, TRUE);
+	window->priv->convert_data.new_file = g_strdup (uri);
 
 	/* create the new archive */
 
@@ -6383,14 +6547,6 @@
 
 
 void
-fr_window_view_folder_after_extract (FrWindow *window,
-				     gboolean  view)
-{
-	window->priv->view_folder_after_extraction = view;
-}
-
-
-void
 fr_window_go_to_location (FrWindow   *window,
 			  const char *path,
 			  gboolean    force_update)
@@ -6552,7 +6708,7 @@
 		fr_archive_stop (window->archive);
 		
 	if (window->priv->convert_data.converting)
-		fr_window_convert_data_free (window);		
+		fr_window_convert_data_free (window, TRUE);		
 }
 
 
@@ -7309,7 +7465,7 @@
 
 	fr_window_stop_activity_mode (window);
 	fr_window_pop_message (window);
-	close_progress_dialog (window);
+	close_progress_dialog (window, FALSE);
 
 	if (error->type == FR_PROC_ERROR_ASK_PASSWORD) {
 		dlg_ask_password_for_paste_operation (window);

Modified: trunk/src/fr-window.h
==============================================================================
--- trunk/src/fr-window.h	(original)
+++ trunk/src/fr-window.h	Thu Jun  5 11:42:07 2008
@@ -171,8 +171,6 @@
 					         const char    *password);						 
 const char *fr_window_get_password              (FrWindow      *window);
 FrCompression fr_window_get_compression 	(FrWindow      *window);
-void        fr_window_view_folder_after_extract (FrWindow      *window,
-					 	 gboolean       view);
 
 /**/
 
@@ -300,7 +298,6 @@
 
 /**/
 
-void       fr_window_convert_data_free       (FrWindow         *window);
 gboolean   fr_window_file_list_drag_data_get (FrWindow         *window,
 					      GdkDragContext   *context,
 					      GtkSelectionData *selection_data,

Modified: trunk/src/main.c
==============================================================================
--- trunk/src/main.c	(original)
+++ trunk/src/main.c	Thu Jun  5 11:42:07 2008
@@ -857,11 +857,6 @@
 					       FR_BATCH_ACTION_QUIT,
 					       NULL,
 					       NULL);
-
-		if (eel_gconf_get_boolean (PREF_EXTRACT_VIEW_FOLDER, FALSE))
-			/* open the destination folder only if we are 
-			 * extracting a single archive. */					       
-			fr_window_view_folder_after_extract (FR_WINDOW (window), (i - 1 == 1));
 					       
 		fr_window_start_batch (FR_WINDOW (window));
 	}

Modified: trunk/src/preferences.h
==============================================================================
--- trunk/src/preferences.h	(original)
+++ trunk/src/preferences.h	Thu Jun  5 11:42:07 2008
@@ -50,7 +50,6 @@
 #define PREF_ADD_COMPRESSION_LEVEL "/apps/file-roller/general/compression_level"
 #define PREF_MIGRATE_DIRECTORIES   "/apps/file-roller/general/migrate_directories"
 
-#define PREF_EXTRACT_VIEW_FOLDER      "/apps/file-roller/dialogs/extract/view_destination_folder"
 #define PREF_EXTRACT_OVERWRITE        "/apps/file-roller/dialogs/extract/overwrite"
 #define PREF_EXTRACT_SKIP_NEWER       "/apps/file-roller/dialogs/extract/skip_newer"
 #define PREF_EXTRACT_RECREATE_FOLDERS "/apps/file-roller/dialogs/extract/recreate_folders"



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