[file-roller: 47/123] fixed creation of archives from the nautilus context menu



commit e0833fb7f12b5a917875d4e75a191cb4623e0e8f
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sat Jul 21 11:20:16 2012 +0200

    fixed creation of archives from the nautilus context menu

 src/dlg-batch-add.c |    2 +-
 src/fr-archive.c    |    5 +++--
 src/fr-window.c     |   50 +++++++++++++++++++++++++++++++++-----------------
 src/fr-window.h     |    3 +++
 4 files changed, 40 insertions(+), 20 deletions(-)
---
diff --git a/src/dlg-batch-add.c b/src/dlg-batch-add.c
index 87650e5..bc9aa72 100644
--- a/src/dlg-batch-add.c
+++ b/src/dlg-batch-add.c
@@ -335,7 +335,7 @@ add_clicked_cb (GtkWidget  *widget,
 	set_archive_options (data);
 	gtk_widget_destroy (GET_WIDGET ("dialog"));
 
-	fr_window_archive_new (window, archive_file);
+	fr_window_create_archive_and_continue (window, archive_file, NULL);
 
 	g_free (archive_name);
 	g_free (archive_dir);
diff --git a/src/fr-archive.c b/src/fr-archive.c
index c2b0356..941c4d7 100644
--- a/src/fr-archive.c
+++ b/src/fr-archive.c
@@ -1060,6 +1060,8 @@ add_directory__step2 (GList    *file_list,
 					    fr_archive_add_directory);
 
 	if (error != NULL) {
+		_g_string_list_free (dir_list);
+
 		g_simple_async_result_set_from_error (result, error);
 		g_simple_async_result_complete_in_idle (result);
 	}
@@ -1087,9 +1089,8 @@ add_directory__step2 (GList    *file_list,
 					      ad_data->user_data);
 	}
 
-	g_object_unref (result);
 	_g_string_list_free (file_list);
-	_g_string_list_free (dir_list);
+	g_object_unref (result);
 	add_directory_data_free (ad_data);
 }
 
diff --git a/src/fr-window.c b/src/fr-window.c
index 2fed8c0..4a067d6 100644
--- a/src/fr-window.c
+++ b/src/fr-window.c
@@ -3921,6 +3921,36 @@ get_clipboard_data_from_selection_data (FrWindow   *window,
 }
 
 
+gboolean
+fr_window_create_archive_and_continue (FrWindow   *window,
+			  	       const char *uri,
+			  	       GtkWindow  *error_dialog_parent)
+{
+	gboolean result = FALSE;
+
+	if (fr_window_archive_new (FR_WINDOW (window), uri)) {
+		if (! fr_window_is_batch_mode (FR_WINDOW (window)))
+			gtk_window_present (GTK_WINDOW (window));
+		_archive_operation_completed (window, FR_ACTION_CREATING_NEW_ARCHIVE, NULL);
+
+		result = TRUE;
+	}
+	else {
+		GError *error;
+
+		error = g_error_new_literal (FR_ERROR, FR_ERROR_GENERIC, _("Archive type not supported."));
+		window->priv->load_error_parent_window = error_dialog_parent;
+		_archive_operation_completed (window, FR_ACTION_CREATING_NEW_ARCHIVE, error);
+
+		g_error_free (error);
+
+		result = FALSE;
+	}
+
+	return result;
+}
+
+
 static void
 new_archive_dialog_response_cb (GtkDialog *dialog,
 				int        response,
@@ -3958,24 +3988,10 @@ new_archive_dialog_response_cb (GtkDialog *dialog,
 	fr_window_set_encrypt_header (FR_WINDOW (archive_window), encrypt_header);
 	fr_window_set_volume_size (FR_WINDOW (archive_window), volume_size);
 
-	if (fr_window_archive_new (FR_WINDOW (archive_window), uri)) {
+	if (fr_window_create_archive_and_continue (FR_WINDOW (archive_window), uri, GTK_WINDOW (dialog)))
 		gtk_widget_destroy (GTK_WIDGET (dialog));
-		if (! fr_window_is_batch_mode (FR_WINDOW (archive_window)))
-			gtk_window_present (GTK_WINDOW (archive_window));
-		_archive_operation_completed (window, FR_ACTION_CREATING_NEW_ARCHIVE, NULL);
-	}
-	else {
-		GError *error;
-
-		if (new_window)
-			gtk_widget_destroy (archive_window);
-
-		error = g_error_new_literal (FR_ERROR, FR_ERROR_GENERIC, _("Archive type not supported."));
-		window->priv->load_error_parent_window = GTK_WINDOW (dialog);
-		_handle_archive_operation_error (window, NULL, FR_ACTION_CREATING_ARCHIVE, error, NULL, NULL);
-
-		g_error_free (error);
-	}
+	else if (new_window)
+		gtk_widget_destroy (archive_window);
 
 	g_free (uri);
 }
diff --git a/src/fr-window.h b/src/fr-window.h
index 7e1bcf1..6e24a18 100644
--- a/src/fr-window.h
+++ b/src/fr-window.h
@@ -232,6 +232,9 @@ void            fr_window_stop                         (FrWindow    *window);
 /**/
 
 void            fr_window_action_new_archive           (FrWindow   *window);
+gboolean        fr_window_create_archive_and_continue  (FrWindow   *window,
+							const char *uri,
+							GtkWindow  *error_dialog_parent);
 void            fr_window_action_save_as               (FrWindow   *window);
 void            fr_window_view_last_output             (FrWindow   *window,
 						        const char *title);



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