diff --git a/file-roller-fix-crash-after-extracting.patch b/file-roller-fix-crash-after-extracting.patch new file mode 100644 index 0000000..ef87aa6 --- /dev/null +++ b/file-roller-fix-crash-after-extracting.patch @@ -0,0 +1,92 @@ +From a9d765035f5b0786834fa6311e3780788484411a Mon Sep 17 00:00:00 2001 +From: Paolo Bacchilega +Date: Sat, 18 Feb 2017 08:54:53 +0100 +Subject: fixed crash after extracting a file + +[bug #778846] +--- + src/fr-window.c | 33 ++++++++++++++++++++++++++++----- + 1 file changed, 28 insertions(+), 5 deletions(-) + +diff --git a/src/fr-window.c b/src/fr-window.c +index 3d63fe0..1fd803b 100644 +--- a/src/fr-window.c ++++ b/src/fr-window.c +@@ -6432,7 +6432,7 @@ extract_data_new (FrWindow *window, + ExtractData *edata; + + edata = g_new0 (ExtractData, 1); +- edata->window = window; ++ edata->window = _g_object_ref (window); + edata->file_list = _g_string_list_dup (file_list); + edata->destination = _g_object_ref (destination); + edata->skip_older = skip_older; +@@ -6454,6 +6454,7 @@ extract_data_free (ExtractData *edata) + + _g_string_list_free (edata->file_list); + _g_object_unref (edata->destination); ++ _g_object_unref (edata->window); + g_free (edata->base_dir); + + g_free (edata); +@@ -6597,6 +6598,29 @@ _fr_window_archive_extract_from_edata (FrWindow *window, + static void _fr_window_ask_overwrite_dialog (OverwriteData *odata); + + ++static OverwriteData * ++overwrite_data_new (FrWindow *window) ++{ ++ OverwriteData *odata; ++ ++ odata = g_new0 (OverwriteData, 1); ++ odata->window = _g_object_ref (window); ++ odata->edata = NULL; ++ odata->current_file = NULL; ++ odata->extract_all = FALSE; ++ ++ return odata; ++} ++ ++ ++static void ++overwrite_data_free (OverwriteData *odata) ++{ ++ _g_object_unref (odata->window); ++ g_free (odata); ++} ++ ++ + /* remove the file from the list to extract */ + static void + overwrite_data_skip_current (OverwriteData *odata) +@@ -6644,7 +6668,7 @@ overwrite_dialog_response_cb (GtkDialog *dialog, + + if (do_not_extract) { + fr_window_batch_stop (odata->window); +- g_free (odata); ++ overwrite_data_free (odata); + return; + } + +@@ -6775,7 +6799,7 @@ _fr_window_ask_overwrite_dialog (OverwriteData *odata) + fr_window_dnd_extraction_finished (odata->window, TRUE); + } + +- g_free (odata); ++ overwrite_data_free (odata); + } + + +@@ -6903,8 +6927,7 @@ _fr_window_archive_extract_from_edata_maybe (FrWindow *window, + if (edata->overwrite == FR_OVERWRITE_ASK) { + OverwriteData *odata; + +- odata = g_new0 (OverwriteData, 1); +- odata->window = window; ++ odata = overwrite_data_new (window); + odata->edata = edata; + odata->extract_all = (edata->file_list == NULL) || (g_list_length (edata->file_list) == window->archive->files->len); + if (edata->file_list == NULL) +-- +cgit v0.12 + diff --git a/file-roller-libarchive-dont-convert-null-strings.patch b/file-roller-libarchive-dont-convert-null-strings.patch new file mode 100644 index 0000000..edfefc4 --- /dev/null +++ b/file-roller-libarchive-dont-convert-null-strings.patch @@ -0,0 +1,25 @@ +From 78a608ae8d0058fdf202da5b561c1cbdd937ad99 Mon Sep 17 00:00:00 2001 +From: Paolo Bacchilega +Date: Sat, 18 Feb 2017 08:52:54 +0100 +Subject: libarchive: don't convert null strings to utf8 + +--- + src/fr-archive-libarchive.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/fr-archive-libarchive.c b/src/fr-archive-libarchive.c +index 3ac1004..70c07e2 100644 +--- a/src/fr-archive-libarchive.c ++++ b/src/fr-archive-libarchive.c +@@ -321,7 +321,7 @@ _g_error_new_from_archive_error (const char *s) + char *msg; + GError *error; + +- msg = g_locale_to_utf8 (s, -1, NULL, NULL, NULL); ++ msg = (s != NULL) ? g_locale_to_utf8 (s, -1, NULL, NULL, NULL) : NULL; + if (msg == NULL) + msg = g_strdup ("Fatal error"); + error = g_error_new_literal (FR_ERROR, FR_ERROR_COMMAND_ERROR, msg); +-- +cgit v0.12 + diff --git a/file-roller-open-dest-dialog-only-when-using-notify.patch b/file-roller-open-dest-dialog-only-when-using-notify.patch new file mode 100644 index 0000000..55fc7fa --- /dev/null +++ b/file-roller-open-dest-dialog-only-when-using-notify.patch @@ -0,0 +1,119 @@ +From 347a917c0504a9c5ccfd0b8041e40d56ec9bd74a Mon Sep 17 00:00:00 2001 +From: Paolo Bacchilega +Date: Sat, 18 Feb 2017 09:24:18 +0100 +Subject: show the 'open destination' dialog only when using --notify + +and only for the last extracted archive +--- + src/fr-application.c | 13 ++++++++----- + src/fr-window.c | 10 ++++++---- + src/fr-window.h | 8 +++++--- + 3 files changed, 19 insertions(+), 12 deletions(-) + +diff --git a/src/fr-application.c b/src/fr-application.c +index 98aac18..025c775 100644 +--- a/src/fr-application.c ++++ b/src/fr-application.c +@@ -296,7 +296,7 @@ handle_method_call (GDBusConnection *connection, + g_signal_connect (window, "ready", G_CALLBACK (window_ready_cb), invocation); + + fr_window_batch_new (FR_WINDOW (window), C_("Window title", "Extract archive")); +- fr_window_batch__extract (FR_WINDOW (window), archive, destination); ++ fr_window_batch__extract (FR_WINDOW (window), archive, destination, use_progress_dialog); + fr_window_batch_append_action (FR_WINDOW (window), FR_BATCH_ACTION_QUIT, NULL, NULL); + fr_window_batch_start (FR_WINDOW (window)); + +@@ -322,7 +322,7 @@ handle_method_call (GDBusConnection *connection, + g_signal_connect (window, "ready", G_CALLBACK (window_ready_cb), invocation); + + fr_window_batch_new (FR_WINDOW (window), C_("Window title", "Extract archive")); +- fr_window_batch__extract_here (FR_WINDOW (window), archive); ++ fr_window_batch__extract_here (FR_WINDOW (window), archive, use_progress_dialog); + fr_window_batch_append_action (FR_WINDOW (window), FR_BATCH_ACTION_QUIT, NULL, NULL); + fr_window_batch_start (FR_WINDOW (window)); + +@@ -604,13 +604,16 @@ fr_application_command_line (GApplication *application, + + fr_window_batch_new (FR_WINDOW (window), C_("Window title", "Extract archive")); + while ((archive = remaining_args[i++]) != NULL) { +- GFile *file; ++ GFile *file; ++ gboolean last_archive; + + file = g_application_command_line_create_file_for_arg (command_line, archive); ++ last_archive = (remaining_args[i] == NULL); ++ + if (arg_extract_here == 1) +- fr_window_batch__extract_here (FR_WINDOW (window), file); ++ fr_window_batch__extract_here (FR_WINDOW (window), file, arg_notify && last_archive); + else +- fr_window_batch__extract (FR_WINDOW (window), file, extraction_destination); ++ fr_window_batch__extract (FR_WINDOW (window), file, extraction_destination, arg_notify && last_archive); + + g_object_unref (file); + } +diff --git a/src/fr-window.c b/src/fr-window.c +index 1fd803b..bbddde7 100644 +--- a/src/fr-window.c ++++ b/src/fr-window.c +@@ -9819,7 +9819,8 @@ fr_window_batch_get_title (FrWindow *window) + + void + fr_window_batch__extract_here (FrWindow *window, +- GFile *archive) ++ GFile *archive, ++ gboolean ask_to_open_destination) + { + g_return_if_fail (window != NULL); + g_return_if_fail (archive != NULL); +@@ -9837,7 +9838,7 @@ fr_window_batch__extract_here (FrWindow *window, + FALSE, + FR_OVERWRITE_ASK, + FALSE, +- _fr_window_get_ask_to_open_destination (window), ++ ask_to_open_destination, + TRUE), + (GFreeFunc) extract_data_free); + fr_window_batch_append_action (window, +@@ -9850,7 +9851,8 @@ fr_window_batch__extract_here (FrWindow *window, + void + fr_window_batch__extract (FrWindow *window, + GFile *archive, +- GFile *destination) ++ GFile *destination, ++ gboolean ask_to_open_destination) + { + g_return_if_fail (window != NULL); + g_return_if_fail (archive != NULL); +@@ -9869,7 +9871,7 @@ fr_window_batch__extract (FrWindow *window, + FALSE, + FR_OVERWRITE_ASK, + FALSE, +- _fr_window_get_ask_to_open_destination (window), ++ ask_to_open_destination, + FALSE), + (GFreeFunc) extract_data_free); + else +diff --git a/src/fr-window.h b/src/fr-window.h +index 4ea0f4e..7bbffec 100644 +--- a/src/fr-window.h ++++ b/src/fr-window.h +@@ -306,10 +306,12 @@ void fr_window_batch_resume (FrWindow *window); + gboolean fr_window_is_batch_mode (FrWindow *window); + void fr_window_batch__extract (FrWindow *window, + GFile *archive, +- GFile *destination); ++ GFile *destination, ++ gboolean ask_to_open_destination); + void fr_window_batch__extract_here (FrWindow *window, +- GFile *archive); +-void fr_window_batch__add_files (FrWindow *window, ++ GFile *archive, ++ gboolean ask_to_open_destination); ++void fr_window_batch__add_files (FrWindow *window, + GFile *archive, + GList *file_list); + void fr_window_destroy_with_error_dialog (FrWindow *window); +-- +cgit v0.12 + diff --git a/file-roller.changes b/file-roller.changes index 4caecfa..50a318e 100644 --- a/file-roller.changes +++ b/file-roller.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Sun Feb 19 10:59:10 UTC 2017 - zaitor@opensuse.org + +- Add file-roller-open-dest-dialog-only-when-using-notify.patch: + Show the 'open destination' dialog only when using --notify and + only for the last extracted archive. +- Add file-roller-libarchive-dont-convert-null-strings.patch: Don't + convert null strings to utf8. +- Add file-roller-fix-crash-after-extracting.patch: Fix a crash + after extracting a file (bgo#778846, boo#1022082). + ------------------------------------------------------------------- Fri Nov 11 10:19:11 UTC 2016 - dimstar@opensuse.org diff --git a/file-roller.spec b/file-roller.spec index 3d9ca42..63c1e21 100644 --- a/file-roller.spec +++ b/file-roller.spec @@ -1,7 +1,7 @@ # # spec file for package file-roller # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -28,6 +28,13 @@ Source: http://download.gnome.org/sources/file-roller/3.22/%{name}-%{ver Patch0: file-roller-3.4-change-archiver-priority.patch # PATCH-FEATURE-OPENSUSE file-roller-pkg-match.patch bnc#696530 dimstar@opensuse.org -- List package match names for automatic installation using PK. Patch1: file-roller-pkg-match.patch +# PATCH-FIX-UPSTREAM file-roller-libarchive-dont-convert-null-strings.patch zaitor@opensuse.org -- Don't convert null strings to utf8 +Patch2: file-roller-libarchive-dont-convert-null-strings.patch +# PATCH-FIX-UPSTREAM file-roller-fix-crash-after-extracting.patch bgo#778846 boo#1022082 zaitor@opensuse.org -- Fix a crash after extracting a file +Patch3: file-roller-fix-crash-after-extracting.patch +# PATCH-FIX-UPSTREAM file-roller-open-dest-dialog-only-when-using-notify.patch zaitor@opensuse.org -- show the 'open destination' dialog only when using --notify +Patch4: file-roller-open-dest-dialog-only-when-using-notify.patch + # Needed for directory ownership BuildRequires: dbus-1 BuildRequires: fdupes @@ -87,6 +94,9 @@ contained in the archive, and extract files from the archive. %setup -q %patch0 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 %if !0%{?is_opensuse} translation-update-upstream %endif