commit 09d7cc776710fb112740698e369c48aecb50ee9c Author: CentOS Sources Date: Tue May 16 06:21:37 2023 +0000 import nautilus-3.28.1-23.el8 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fa89c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/nautilus-3.28.1.tar.xz diff --git a/.nautilus.metadata b/.nautilus.metadata new file mode 100644 index 0000000..57a13a4 --- /dev/null +++ b/.nautilus.metadata @@ -0,0 +1 @@ +f5fb5185ad922f906a22bc0aeae4cc76a243200d SOURCES/nautilus-3.28.1.tar.xz diff --git a/SOURCES/0001-dbus-manager-Implement-trashing-files.patch b/SOURCES/0001-dbus-manager-Implement-trashing-files.patch new file mode 100644 index 0000000..7d64a59 --- /dev/null +++ b/SOURCES/0001-dbus-manager-Implement-trashing-files.patch @@ -0,0 +1,69 @@ +From db2b7aea67c994ba8a6e5a9ffec245b1daebcdfb Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Mon, 6 Aug 2018 17:32:00 +0200 +Subject: [PATCH 01/11] dbus-manager: Implement trashing files + +So desktop icons extension can use it. +--- + data/dbus-interfaces.xml | 3 +++ + src/nautilus-dbus-manager.c | 24 ++++++++++++++++++++++++ + 2 files changed, 27 insertions(+) + +diff --git a/data/dbus-interfaces.xml b/data/dbus-interfaces.xml +index 35fb9945b..4588762a9 100644 +--- a/data/dbus-interfaces.xml ++++ b/data/dbus-interfaces.xml +@@ -35,5 +35,8 @@ + + + ++ ++ ++ + + +diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c +index 3611a2358..4da1c727b 100644 +--- a/src/nautilus-dbus-manager.c ++++ b/src/nautilus-dbus-manager.c +@@ -131,6 +131,26 @@ handle_empty_trash (NautilusDBusFileOperations *object, + return TRUE; /* invocation was handled */ + } + ++static gboolean ++handle_trash_files (NautilusDBusFileOperations *object, ++ GDBusMethodInvocation *invocation, ++ const gchar **sources) ++{ ++ g_autolist (GFile) source_files = NULL; ++ gint idx; ++ ++ for (idx = 0; sources[idx] != NULL; idx++) ++ { ++ source_files = g_list_prepend (source_files, ++ g_file_new_for_uri (sources[idx])); ++ } ++ ++ nautilus_file_operations_trash_or_delete (source_files, NULL, NULL, NULL); ++ ++ nautilus_dbus_file_operations_complete_trash_files (object, invocation); ++ return TRUE; /* invocation was handled */ ++} ++ + static void + nautilus_dbus_manager_init (NautilusDBusManager *self) + { +@@ -148,6 +168,10 @@ nautilus_dbus_manager_init (NautilusDBusManager *self) + "handle-empty-trash", + G_CALLBACK (handle_empty_trash), + self); ++ g_signal_connect (self->file_operations, ++ "handle-trash-files", ++ G_CALLBACK (handle_trash_files), ++ self); + } + + static void +-- +2.17.1 + diff --git a/SOURCES/0002-dbus-manager-Implement-creation-of-new-folders.patch b/SOURCES/0002-dbus-manager-Implement-creation-of-new-folders.patch new file mode 100644 index 0000000..d2cba70 --- /dev/null +++ b/SOURCES/0002-dbus-manager-Implement-creation-of-new-folders.patch @@ -0,0 +1,71 @@ +From d2be99e4528759d28985246a55c9d4513e78f918 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Mon, 6 Aug 2018 20:11:31 +0200 +Subject: [PATCH 02/11] dbus-manager: Implement creation of new folders + +For the integration with the desktop icons extension. +--- + data/dbus-interfaces.xml | 3 +++ + src/nautilus-dbus-manager.c | 26 ++++++++++++++++++++++++++ + 2 files changed, 29 insertions(+) + +diff --git a/data/dbus-interfaces.xml b/data/dbus-interfaces.xml +index 4588762a9..4e67f1393 100644 +--- a/data/dbus-interfaces.xml ++++ b/data/dbus-interfaces.xml +@@ -38,5 +38,8 @@ + + + ++ ++ ++ + + +diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c +index 4da1c727b..337a73262 100644 +--- a/src/nautilus-dbus-manager.c ++++ b/src/nautilus-dbus-manager.c +@@ -94,6 +94,28 @@ handle_copy_file (NautilusDBusFileOperations *object, + return TRUE; /* invocation was handled */ + } + ++static gboolean ++handle_create_folder (NautilusDBusFileOperations *object, ++ GDBusMethodInvocation *invocation, ++ const gchar *uri) ++{ ++ g_autoptr (GFile) file = NULL; ++ g_autoptr (GFile) parent_file = NULL; ++ g_autofree gchar *basename = NULL; ++ g_autofree gchar *parent_file_uri = NULL; ++ ++ file = g_file_new_for_uri (uri); ++ basename = g_file_get_basename (file); ++ parent_file = g_file_get_parent (file); ++ parent_file_uri = g_file_get_uri (parent_file); ++ ++ nautilus_file_operations_new_folder (NULL, parent_file_uri, basename, ++ NULL, NULL); ++ ++ nautilus_dbus_file_operations_complete_create_folder (object, invocation); ++ return TRUE; /* invocation was handled */ ++} ++ + static gboolean + handle_copy_uris (NautilusDBusFileOperations *object, + GDBusMethodInvocation *invocation, +@@ -172,6 +194,10 @@ nautilus_dbus_manager_init (NautilusDBusManager *self) + "handle-trash-files", + G_CALLBACK (handle_trash_files), + self); ++ g_signal_connect (self->file_operations, ++ "handle-create-folder", ++ G_CALLBACK (handle_create_folder), ++ self); + } + + static void +-- +2.17.1 + diff --git a/SOURCES/0003-dbus-manager-Implement-undo-redo.patch b/SOURCES/0003-dbus-manager-Implement-undo-redo.patch new file mode 100644 index 0000000..5e7edcf --- /dev/null +++ b/SOURCES/0003-dbus-manager-Implement-undo-redo.patch @@ -0,0 +1,88 @@ +From 42ea37f93c134d55cd622e3e346726babaf56139 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Mon, 6 Aug 2018 20:12:00 +0200 +Subject: [PATCH 03/11] dbus-manager: Implement undo/redo + +For the integration with the desktop icons extension. +--- + data/dbus-interfaces.xml | 4 ++++ + src/nautilus-dbus-manager.c | 35 +++++++++++++++++++++++++++++++++++ + 2 files changed, 39 insertions(+) + +diff --git a/data/dbus-interfaces.xml b/data/dbus-interfaces.xml +index 4e67f1393..2133bb99c 100644 +--- a/data/dbus-interfaces.xml ++++ b/data/dbus-interfaces.xml +@@ -41,5 +41,9 @@ + + + ++ ++ ++ ++ + + +diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c +index 337a73262..bce6b5c4d 100644 +--- a/src/nautilus-dbus-manager.c ++++ b/src/nautilus-dbus-manager.c +@@ -26,6 +26,7 @@ + #include "nautilus-generated.h" + + #include "nautilus-file-operations.h" ++#include "nautilus-file-undo-manager.h" + + #define DEBUG_FLAG NAUTILUS_DEBUG_DBUS + #include "nautilus-debug.h" +@@ -94,6 +95,32 @@ handle_copy_file (NautilusDBusFileOperations *object, + return TRUE; /* invocation was handled */ + } + ++static gboolean ++handle_redo (NautilusDBusFileOperations *object, ++ GDBusMethodInvocation *invocation) ++{ ++ g_autoptr (NautilusFileUndoManager) undo_manager = NULL; ++ ++ undo_manager = nautilus_file_undo_manager_get (); ++ nautilus_file_undo_manager_redo (NULL); ++ ++ nautilus_dbus_file_operations_complete_redo (object, invocation); ++ return TRUE; /* invocation was handled */ ++} ++ ++static gboolean ++handle_undo (NautilusDBusFileOperations *object, ++ GDBusMethodInvocation *invocation) ++{ ++ g_autoptr (NautilusFileUndoManager) undo_manager = NULL; ++ ++ undo_manager = nautilus_file_undo_manager_get (); ++ nautilus_file_undo_manager_undo (NULL); ++ ++ nautilus_dbus_file_operations_complete_undo (object, invocation); ++ return TRUE; /* invocation was handled */ ++} ++ + static gboolean + handle_create_folder (NautilusDBusFileOperations *object, + GDBusMethodInvocation *invocation, +@@ -198,6 +225,14 @@ nautilus_dbus_manager_init (NautilusDBusManager *self) + "handle-create-folder", + G_CALLBACK (handle_create_folder), + self); ++ g_signal_connect (self->file_operations, ++ "handle-undo", ++ G_CALLBACK (handle_undo), ++ self); ++ g_signal_connect (self->file_operations, ++ "handle-redo", ++ G_CALLBACK (handle_redo), ++ self); + } + + static void +-- +2.17.1 + diff --git a/SOURCES/0004-dbus-manager-Use-a-more-robust-copy-operation.patch b/SOURCES/0004-dbus-manager-Use-a-more-robust-copy-operation.patch new file mode 100644 index 0000000..325a0bb --- /dev/null +++ b/SOURCES/0004-dbus-manager-Use-a-more-robust-copy-operation.patch @@ -0,0 +1,46 @@ +From ef022816e3fe321d9ee9b5a2deab96ca718f7215 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Tue, 7 Aug 2018 10:47:28 +0200 +Subject: [PATCH 04/11] dbus-manager: Use a more robust copy operation + +We were using the copy_file operation which seems to be quite buggy, +Nautilus should probably drop that one soon, specially since no other +part of Nautilus uses it. +--- + src/nautilus-dbus-manager.c | 13 ++++--------- + 1 file changed, 4 insertions(+), 9 deletions(-) + +diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c +index bce6b5c4d..8135c9650 100644 +--- a/src/nautilus-dbus-manager.c ++++ b/src/nautilus-dbus-manager.c +@@ -150,22 +150,17 @@ handle_copy_uris (NautilusDBusFileOperations *object, + const gchar *destination) + { + GList *source_files = NULL; +- GFile *dest_dir; + gint idx; + +- dest_dir = g_file_new_for_uri (destination); +- + for (idx = 0; sources[idx] != NULL; idx++) + { +- source_files = g_list_prepend (source_files, +- g_file_new_for_uri (sources[idx])); ++ source_files = g_list_prepend (source_files, g_strdup (sources[idx])); + } + +- nautilus_file_operations_copy (source_files, dest_dir, NULL, NULL, NULL); +- +- g_list_free_full (source_files, g_object_unref); +- g_object_unref (dest_dir); ++ nautilus_file_operations_copy_move (source_files, destination, ++ GDK_ACTION_COPY, NULL, NULL, NULL); + ++ g_list_free_full (source_files, g_free); + nautilus_dbus_file_operations_complete_copy_uris (object, invocation); + return TRUE; /* invocation was handled */ + } +-- +2.17.1 + diff --git a/SOURCES/0005-file-operations-Don-t-crash-if-source-file-not-prese.patch b/SOURCES/0005-file-operations-Don-t-crash-if-source-file-not-prese.patch new file mode 100644 index 0000000..0b72e41 --- /dev/null +++ b/SOURCES/0005-file-operations-Don-t-crash-if-source-file-not-prese.patch @@ -0,0 +1,88 @@ +From 32f347bd83495edf2bda746d17e613c868a7c379 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Tue, 7 Aug 2018 11:51:54 +0200 +Subject: [PATCH 05/11] file-operations: Don't crash if source file not present + on creation + +When creating a file it was checking if the file already exists, and if +so it tried to give a new name based on the original file that was being +duplicated from which is the case for the regular copy/paste and the +template creation. + +However, creating a file is not only about duplicating from another one, +it also can come from creating a folder, that although in the UI it +prevents doing so, it can still be done through the dbus operation. + +Fix that by checking whether there is an actual source file, and if not, +use the name provided as base name. +--- + src/nautilus-file-operations.c | 36 ++++++++++++++++------------------ + 1 file changed, 17 insertions(+), 19 deletions(-) + +diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c +index 4d84b98be..cf5e7f46b 100644 +--- a/src/nautilus-file-operations.c ++++ b/src/nautilus-file-operations.c +@@ -7324,20 +7324,18 @@ retry: + { + g_autofree char *filename2 = NULL; + g_autofree char *suffix = NULL; +- NautilusFile *file; + +- file = nautilus_file_get (job->src); +- if (nautilus_file_is_directory (file)) +- { +- filename_base = filename; +- } +- else ++ filename_base = filename; ++ if (job->src != NULL) + { +- filename_base = eel_filename_strip_extension (filename); ++ g_autoptr (NautilusFile) file = NULL; ++ file = nautilus_file_get (job->src); ++ if (!nautilus_file_is_directory (file)) ++ { ++ filename_base = eel_filename_strip_extension (filename); ++ } + } + +- nautilus_file_unref (file); +- + offset = strlen (filename_base); + suffix = g_strdup (filename + offset); + +@@ -7377,21 +7375,21 @@ retry: + { + g_autofree char *suffix = NULL; + g_autofree gchar *filename2 = NULL; +- NautilusFile *file; + + g_clear_object (&dest); + +- file = nautilus_file_get (job->src); +- if (nautilus_file_is_directory (file)) +- { +- filename_base = filename; +- } +- else ++ filename_base = filename; ++ if (job->src != NULL) + { +- filename_base = eel_filename_strip_extension (filename); ++ g_autoptr (NautilusFile) file = NULL; ++ ++ file = nautilus_file_get (job->src); ++ if (!nautilus_file_is_directory (file)) ++ { ++ filename_base = eel_filename_strip_extension (filename); ++ } + } + +- nautilus_file_unref (file); + + offset = strlen (filename_base); + suffix = g_strdup (filename + offset); +-- +2.17.1 + diff --git a/SOURCES/0006-properties-window-Keep-alive-properties-window-if-ca.patch b/SOURCES/0006-properties-window-Keep-alive-properties-window-if-ca.patch new file mode 100644 index 0000000..fc32c8a --- /dev/null +++ b/SOURCES/0006-properties-window-Keep-alive-properties-window-if-ca.patch @@ -0,0 +1,359 @@ +From 965a1fb9dcd468b9fc0b87279f3a4a33b6bd635c Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Tue, 7 Aug 2018 12:40:42 +0200 +Subject: [PATCH 06/11] properties-window: Keep alive properties window if + called through DBus + +The properties window can be used from within Nautilus, and therefore a +dialog window makes sense, or from outside Nautilus, such as the +FileManager dbus free desktop standard. + +In the later, used for integration with things like desktop icons +extensions, we need to keep the application alive since GApplication +would close the application if no application window is alive after a +timeout. + +To fix this, this work makes the window hint a regular window if used +from those cases. +--- + src/nautilus-files-view.c | 6 +- + src/nautilus-freedesktop-dbus.c | 10 ++- + src/nautilus-pathbar.c | 3 +- + src/nautilus-properties-window.c | 106 ++++++++++++++++++++++--------- + src/nautilus-properties-window.h | 10 ++- + src/nautilus-window.c | 3 +- + 6 files changed, 101 insertions(+), 37 deletions(-) + +diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c +index 8aff33e25..5395390e7 100644 +--- a/src/nautilus-files-view.c ++++ b/src/nautilus-files-view.c +@@ -2435,14 +2435,16 @@ action_properties (GSimpleAction *action, + { + files = g_list_append (NULL, nautilus_file_ref (priv->directory_as_file)); + +- nautilus_properties_window_present (files, GTK_WIDGET (view), NULL); ++ nautilus_properties_window_present (files, GTK_WIDGET (view), NULL, ++ NULL, NULL); + + nautilus_file_list_free (files); + } + } + else + { +- nautilus_properties_window_present (selection, GTK_WIDGET (view), NULL); ++ nautilus_properties_window_present (selection, GTK_WIDGET (view), NULL, ++ NULL, NULL); + } + } + +diff --git a/src/nautilus-freedesktop-dbus.c b/src/nautilus-freedesktop-dbus.c +index c4657aba3..b88809908 100644 +--- a/src/nautilus-freedesktop-dbus.c ++++ b/src/nautilus-freedesktop-dbus.c +@@ -114,6 +114,12 @@ skeleton_handle_show_folders_cb (NautilusFreedesktopFileManager1 *object, + return TRUE; + } + ++static void ++properties_window_on_finished (gpointer user_data) ++{ ++ g_application_release (g_application_get_default ()); ++} ++ + static gboolean + skeleton_handle_show_item_properties_cb (NautilusFreedesktopFileManager1 *object, + GDBusMethodInvocation *invocation, +@@ -133,7 +139,9 @@ skeleton_handle_show_item_properties_cb (NautilusFreedesktopFileManager1 *object + + files = g_list_reverse (files); + +- nautilus_properties_window_present (files, NULL, startup_id); ++ g_application_hold (g_application_get_default ()); ++ nautilus_properties_window_present (files, NULL, startup_id, ++ properties_window_on_finished, NULL); + + nautilus_file_list_free (files); + +diff --git a/src/nautilus-pathbar.c b/src/nautilus-pathbar.c +index 630b8ed33..ea3d2b53f 100644 +--- a/src/nautilus-pathbar.c ++++ b/src/nautilus-pathbar.c +@@ -211,7 +211,8 @@ action_pathbar_properties (GSimpleAction *action, + + files = g_list_append (NULL, nautilus_file_ref (priv->context_menu_file)); + +- nautilus_properties_window_present (files, GTK_WIDGET (self), NULL); ++ nautilus_properties_window_present (files, GTK_WIDGET (self), NULL, NULL, ++ NULL); + + nautilus_file_list_free (files); + } +diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c +index 8bd335a07..5405435cd 100644 +--- a/src/nautilus-properties-window.c ++++ b/src/nautilus-properties-window.c +@@ -152,6 +152,9 @@ typedef struct + char *startup_id; + char *pending_key; + GHashTable *pending_files; ++ NautilusPropertiesWindowCallback callback; ++ gpointer callback_data; ++ NautilusPropertiesWindow *window; + } StartupData; + + /* drag and drop definitions */ +@@ -197,8 +200,6 @@ static void is_directory_ready_callback (NautilusFile *file, + gpointer data); + static void cancel_group_change_callback (GroupChange *change); + static void cancel_owner_change_callback (OwnerChange *change); +-static void parent_widget_destroyed_callback (GtkWidget *widget, +- gpointer callback_data); + static void select_image_button_callback (GtkWidget *widget, + NautilusPropertiesWindow *properties_window); + static void set_icon (const char *icon_path, +@@ -4811,12 +4812,15 @@ get_pending_key (GList *file_list) + } + + static StartupData * +-startup_data_new (GList *original_files, +- GList *target_files, +- const char *pending_key, +- GtkWidget *parent_widget, +- GtkWindow *parent_window, +- const char *startup_id) ++startup_data_new (GList *original_files, ++ GList *target_files, ++ const char *pending_key, ++ GtkWidget *parent_widget, ++ GtkWindow *parent_window, ++ const char *startup_id, ++ NautilusPropertiesWindowCallback callback, ++ gpointer callback_data, ++ NautilusPropertiesWindow *window) + { + StartupData *data; + GList *l; +@@ -4830,6 +4834,9 @@ startup_data_new (GList *original_files, + data->pending_key = g_strdup (pending_key); + data->pending_files = g_hash_table_new (g_direct_hash, + g_direct_equal); ++ data->callback = callback; ++ data->callback_data = callback_data; ++ data->window = window; + + for (l = data->target_files; l != NULL; l = l->next) + { +@@ -5149,7 +5156,7 @@ remove_window (NautilusPropertiesWindow *window) + } + } + +-static GtkWindow * ++static NautilusPropertiesWindow * + get_existing_window (GList *file_list) + { + if (!file_list->next) +@@ -5160,10 +5167,28 @@ get_existing_window (GList *file_list) + return NULL; + } + ++static void ++properties_window_finish (StartupData *data) ++{ ++ if (data->parent_widget != NULL) ++ { ++ g_signal_handlers_disconnect_by_data (data->parent_widget, ++ data); ++ } ++ if (data->window != NULL) ++ { ++ g_signal_handlers_disconnect_by_data (data->window, ++ data); ++ } ++ ++ remove_pending (data, TRUE, TRUE, FALSE); ++ startup_data_free (data); ++} ++ + static void + cancel_create_properties_window_callback (gpointer callback_data) + { +- remove_pending ((StartupData *) callback_data, TRUE, FALSE, TRUE); ++ properties_window_finish ((StartupData *) callback_data); + } + + static void +@@ -5172,7 +5197,7 @@ parent_widget_destroyed_callback (GtkWidget *widget, + { + g_assert (widget == ((StartupData *) callback_data)->parent_widget); + +- remove_pending ((StartupData *) callback_data, TRUE, TRUE, FALSE); ++ properties_window_finish ((StartupData *) callback_data); + } + + static void +@@ -5203,16 +5228,24 @@ remove_pending (StartupData *startup_data, + eel_timed_wait_stop + (cancel_create_properties_window_callback, startup_data); + } +- if (cancel_destroy_handler && startup_data->parent_widget) ++ g_hash_table_remove (pending_lists, startup_data->pending_key); ++} ++ ++static gboolean ++widget_on_destroy (GtkWidget *widget, ++ gpointer user_data) ++{ ++ StartupData *data = (StartupData *) user_data; ++ ++ ++ if (data->callback != NULL) + { +- g_signal_handlers_disconnect_by_func (startup_data->parent_widget, +- G_CALLBACK (parent_widget_destroyed_callback), +- startup_data); ++ data->callback (data->callback_data); + } + +- g_hash_table_remove (pending_lists, startup_data->pending_key); ++ properties_window_finish (data); + +- startup_data_free (startup_data); ++ return GDK_EVENT_PROPAGATE; + } + + static void +@@ -5232,29 +5265,34 @@ is_directory_ready_callback (NautilusFile *file, + new_window = create_properties_window (startup_data); + + add_window (new_window); ++ startup_data->window = new_window; + + remove_pending (startup_data, FALSE, TRUE, TRUE); + + gtk_window_present (GTK_WINDOW (new_window)); ++ g_signal_connect(GTK_WIDGET (new_window), "destroy", ++ G_CALLBACK (widget_on_destroy), startup_data); + } + } + +- + void +-nautilus_properties_window_present (GList *original_files, +- GtkWidget *parent_widget, +- const gchar *startup_id) ++nautilus_properties_window_present (GList *original_files, ++ GtkWidget *parent_widget, ++ const gchar *startup_id, ++ NautilusPropertiesWindowCallback callback, ++ gpointer callback_data) + { + GList *l, *next; +- GtkWidget *parent_window; ++ GtkWindow *parent_window; + StartupData *startup_data; + GList *target_files; +- GtkWindow *existing_window; ++ NautilusPropertiesWindow *existing_window; + char *pending_key; + + g_return_if_fail (original_files != NULL); + g_return_if_fail (parent_widget == NULL || GTK_IS_WIDGET (parent_widget)); + ++ + /* Create the hash tables first time through. */ + if (windows == NULL) + { +@@ -5272,15 +5310,19 @@ nautilus_properties_window_present (GList *original_files, + { + if (parent_widget) + { +- gtk_window_set_screen (existing_window, ++ gtk_window_set_screen (GTK_WINDOW (existing_window), + gtk_widget_get_screen (parent_widget)); + } + else if (startup_id) + { +- gtk_window_set_startup_id (existing_window, startup_id); ++ gtk_window_set_startup_id (GTK_WINDOW (existing_window), startup_id); + } + +- gtk_window_present (existing_window); ++ gtk_window_present (GTK_WINDOW (existing_window)); ++ startup_data = startup_data_new (NULL, NULL, NULL, NULL, NULL, NULL, ++ callback, callback_data, existing_window); ++ g_signal_connect(GTK_WIDGET (existing_window), "destroy", ++ G_CALLBACK (widget_on_destroy), startup_data); + return; + } + +@@ -5290,6 +5332,9 @@ nautilus_properties_window_present (GList *original_files, + /* Look to see if we're already waiting for a window for this file. */ + if (g_hash_table_lookup (pending_lists, pending_key) != NULL) + { ++ /* FIXME: No callback is done if this happen. In practice, it's a quite ++ * corner case ++ */ + return; + } + +@@ -5297,7 +5342,7 @@ nautilus_properties_window_present (GList *original_files, + + if (parent_widget) + { +- parent_window = gtk_widget_get_ancestor (parent_widget, GTK_TYPE_WINDOW); ++ parent_window = GTK_WINDOW (gtk_widget_get_ancestor (parent_widget, GTK_TYPE_WINDOW)); + } + else + { +@@ -5308,8 +5353,11 @@ nautilus_properties_window_present (GList *original_files, + target_files, + pending_key, + parent_widget, +- GTK_WINDOW (parent_window), +- startup_id); ++ parent_window, ++ startup_id, ++ callback, ++ callback_data, ++ NULL); + + nautilus_file_list_free (target_files); + g_free (pending_key); +diff --git a/src/nautilus-properties-window.h b/src/nautilus-properties-window.h +index 9eff54c4e..e8d6a90e9 100644 +--- a/src/nautilus-properties-window.h ++++ b/src/nautilus-properties-window.h +@@ -59,8 +59,12 @@ typedef struct NautilusPropertiesWindowClass NautilusPropertiesWindowClass; + + GType nautilus_properties_window_get_type (void); + +-void nautilus_properties_window_present (GList *files, +- GtkWidget *parent_widget, +- const gchar *startup_id); ++typedef void (* NautilusPropertiesWindowCallback) (gpointer callback_data); ++ ++void nautilus_properties_window_present (GList *files, ++ GtkWidget *parent_widget, ++ const gchar *startup_id, ++ NautilusPropertiesWindowCallback callback, ++ gpointer callback_data); + + #endif /* NAUTILUS_PROPERTIES_WINDOW_H */ +diff --git a/src/nautilus-window.c b/src/nautilus-window.c +index 41c4623be..a6ee4d489 100644 +--- a/src/nautilus-window.c ++++ b/src/nautilus-window.c +@@ -1309,7 +1309,8 @@ action_properties (GSimpleAction *action, + file = nautilus_file_get (priv->selected_file); + + list = g_list_append (NULL, file); +- nautilus_properties_window_present (list, GTK_WIDGET (window), NULL); ++ nautilus_properties_window_present (list, GTK_WIDGET (window), NULL, NULL, ++ NULL); + nautilus_file_list_free (list); + + g_clear_object (&priv->selected_file); +-- +2.17.1 + diff --git a/SOURCES/0007-dbus-manager-Keep-application-alive-for-operations.patch b/SOURCES/0007-dbus-manager-Keep-application-alive-for-operations.patch new file mode 100644 index 0000000..f17a70e --- /dev/null +++ b/SOURCES/0007-dbus-manager-Keep-application-alive-for-operations.patch @@ -0,0 +1,149 @@ +From 80b807d9e52fdc3e5e0af5a2d4dd61fdb0a39bc8 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Tue, 7 Aug 2018 21:08:21 +0200 +Subject: [PATCH 07/11] dbus-manager: Keep application alive for operations + +Operations started from Nautilus windows have the persistence handler, +however, when not using windows like when invoked through DBus the +application could die after a timeout. + +This would stop the operation in the middle of its process, with +possible data loss. + +Make sure we keep the application alive while this is happening. +--- + src/nautilus-dbus-manager.c | 55 +++++++++++++++++++++++++++++++++++-- + 1 file changed, 52 insertions(+), 3 deletions(-) + +diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c +index 8135c9650..0d5137292 100644 +--- a/src/nautilus-dbus-manager.c ++++ b/src/nautilus-dbus-manager.c +@@ -95,13 +95,29 @@ handle_copy_file (NautilusDBusFileOperations *object, + return TRUE; /* invocation was handled */ + } + ++static void ++undo_redo_on_finished (gpointer user_data) ++{ ++ g_autoptr (NautilusFileUndoManager) undo_manager = NULL; ++ int *handler_id = (int *) user_data; ++ ++ undo_manager = nautilus_file_undo_manager_get (); ++ g_signal_handler_disconnect (undo_manager, *handler_id); ++ g_application_release (g_application_get_default ()); ++ g_free (handler_id); ++} ++ + static gboolean + handle_redo (NautilusDBusFileOperations *object, + GDBusMethodInvocation *invocation) + { + g_autoptr (NautilusFileUndoManager) undo_manager = NULL; ++ gint *handler_id = g_new0(int, 1); + + undo_manager = nautilus_file_undo_manager_get (); ++ *handler_id = g_signal_connect_swapped (undo_manager, "undo-changed", ++ G_CALLBACK (undo_redo_on_finished), ++ handler_id); + nautilus_file_undo_manager_redo (NULL); + + nautilus_dbus_file_operations_complete_redo (object, invocation); +@@ -113,14 +129,26 @@ handle_undo (NautilusDBusFileOperations *object, + GDBusMethodInvocation *invocation) + { + g_autoptr (NautilusFileUndoManager) undo_manager = NULL; ++ gint *handler_id = g_new0(int, 1); + + undo_manager = nautilus_file_undo_manager_get (); ++ *handler_id = g_signal_connect_swapped (undo_manager, "undo-changed", ++ G_CALLBACK (undo_redo_on_finished), ++ handler_id); + nautilus_file_undo_manager_undo (NULL); + + nautilus_dbus_file_operations_complete_undo (object, invocation); + return TRUE; /* invocation was handled */ + } + ++static void ++create_folder_on_finished (GFile *new_file, ++ gboolean success, ++ gpointer callback_data) ++{ ++ g_application_release (g_application_get_default ()); ++} ++ + static gboolean + handle_create_folder (NautilusDBusFileOperations *object, + GDBusMethodInvocation *invocation, +@@ -136,13 +164,22 @@ handle_create_folder (NautilusDBusFileOperations *object, + parent_file = g_file_get_parent (file); + parent_file_uri = g_file_get_uri (parent_file); + ++ g_application_hold (g_application_get_default ()); + nautilus_file_operations_new_folder (NULL, parent_file_uri, basename, +- NULL, NULL); ++ create_folder_on_finished, NULL); + + nautilus_dbus_file_operations_complete_create_folder (object, invocation); + return TRUE; /* invocation was handled */ + } + ++static void ++copy_on_finished (GHashTable *debutting_uris, ++ gboolean success, ++ gpointer callback_data) ++{ ++ g_application_release (g_application_get_default ()); ++} ++ + static gboolean + handle_copy_uris (NautilusDBusFileOperations *object, + GDBusMethodInvocation *invocation, +@@ -157,14 +194,16 @@ handle_copy_uris (NautilusDBusFileOperations *object, + source_files = g_list_prepend (source_files, g_strdup (sources[idx])); + } + ++ g_application_hold (g_application_get_default ()); + nautilus_file_operations_copy_move (source_files, destination, +- GDK_ACTION_COPY, NULL, NULL, NULL); ++ GDK_ACTION_COPY, NULL, copy_on_finished, NULL); + + g_list_free_full (source_files, g_free); + nautilus_dbus_file_operations_complete_copy_uris (object, invocation); + return TRUE; /* invocation was handled */ + } + ++/* FIXME: Needs a callback for maintaining alive the application */ + static gboolean + handle_empty_trash (NautilusDBusFileOperations *object, + GDBusMethodInvocation *invocation) +@@ -175,6 +214,14 @@ handle_empty_trash (NautilusDBusFileOperations *object, + return TRUE; /* invocation was handled */ + } + ++static void ++trash_on_finished (GHashTable *debutting_uris, ++ gboolean user_cancel, ++ gpointer callback_data) ++{ ++ g_application_release (g_application_get_default ()); ++} ++ + static gboolean + handle_trash_files (NautilusDBusFileOperations *object, + GDBusMethodInvocation *invocation, +@@ -189,7 +236,9 @@ handle_trash_files (NautilusDBusFileOperations *object, + g_file_new_for_uri (sources[idx])); + } + +- nautilus_file_operations_trash_or_delete (source_files, NULL, NULL, NULL); ++ g_application_hold (g_application_get_default ()); ++ nautilus_file_operations_trash_or_delete (source_files, NULL, ++ trash_on_finished, NULL); + + nautilus_dbus_file_operations_complete_trash_files (object, invocation); + return TRUE; /* invocation was handled */ +-- +2.17.1 + diff --git a/SOURCES/0008-dbus-manager-Drop-copy-file-operation.patch b/SOURCES/0008-dbus-manager-Drop-copy-file-operation.patch new file mode 100644 index 0000000..bfb598a --- /dev/null +++ b/SOURCES/0008-dbus-manager-Drop-copy-file-operation.patch @@ -0,0 +1,209 @@ +From 474ed07f64df1381440b8692d7d500d26014c618 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Tue, 7 Aug 2018 21:25:01 +0200 +Subject: [PATCH 08/11] dbus-manager: Drop copy file operation + +It was truly unreliable and not working clearly. We have a more powerful +and simpler API with CopyURIs, so there is no point to have this one. + +This commits drops the DBus API. Note that the DBus version is not +bumped, I believe this DBus API is not used by any external service +given how broken was it. +--- + data/dbus-interfaces.xml | 6 --- + src/nautilus-dbus-manager.c | 69 ++++++++++++++-------------------- + src/nautilus-file-operations.c | 41 -------------------- + src/nautilus-file-operations.h | 7 ---- + 4 files changed, 29 insertions(+), 94 deletions(-) + +diff --git a/data/dbus-interfaces.xml b/data/dbus-interfaces.xml +index 2133bb99c..20ffadde1 100644 +--- a/data/dbus-interfaces.xml ++++ b/data/dbus-interfaces.xml +@@ -29,12 +29,6 @@ + + + " +- +- +- +- +- +- + + + +diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c +index 0d5137292..1ac6e12c2 100644 +--- a/src/nautilus-dbus-manager.c ++++ b/src/nautilus-dbus-manager.c +@@ -61,40 +61,6 @@ nautilus_dbus_manager_dispose (GObject *object) + G_OBJECT_CLASS (nautilus_dbus_manager_parent_class)->dispose (object); + } + +-static gboolean +-handle_copy_file (NautilusDBusFileOperations *object, +- GDBusMethodInvocation *invocation, +- const gchar *source_uri, +- const gchar *source_display_name, +- const gchar *dest_dir_uri, +- const gchar *dest_name) +-{ +- GFile *source_file, *target_dir; +- const gchar *target_name = NULL, *source_name = NULL; +- +- source_file = g_file_new_for_uri (source_uri); +- target_dir = g_file_new_for_uri (dest_dir_uri); +- +- if (dest_name != NULL && dest_name[0] != '\0') +- { +- target_name = dest_name; +- } +- +- if (source_display_name != NULL && source_display_name[0] != '\0') +- { +- source_name = source_display_name; +- } +- +- nautilus_file_operations_copy_file (source_file, target_dir, source_name, target_name, +- NULL, NULL, NULL); +- +- g_object_unref (source_file); +- g_object_unref (target_dir); +- +- nautilus_dbus_file_operations_complete_copy_file (object, invocation); +- return TRUE; /* invocation was handled */ +-} +- + static void + undo_redo_on_finished (gpointer user_data) + { +@@ -173,9 +139,9 @@ handle_create_folder (NautilusDBusFileOperations *object, + } + + static void +-copy_on_finished (GHashTable *debutting_uris, +- gboolean success, +- gpointer callback_data) ++copy_move_on_finished (GHashTable *debutting_uris, ++ gboolean success, ++ gpointer callback_data) + { + g_application_release (g_application_get_default ()); + } +@@ -196,7 +162,30 @@ handle_copy_uris (NautilusDBusFileOperations *object, + + g_application_hold (g_application_get_default ()); + nautilus_file_operations_copy_move (source_files, destination, +- GDK_ACTION_COPY, NULL, copy_on_finished, NULL); ++ GDK_ACTION_COPY, NULL, copy_move_on_finished, NULL); ++ ++ g_list_free_full (source_files, g_free); ++ nautilus_dbus_file_operations_complete_copy_uris (object, invocation); ++ return TRUE; /* invocation was handled */ ++} ++ ++static gboolean ++handle_move_uris (NautilusDBusFileOperations *object, ++ GDBusMethodInvocation *invocation, ++ const gchar **sources, ++ const gchar *destination) ++{ ++ GList *source_files = NULL; ++ gint idx; ++ ++ for (idx = 0; sources[idx] != NULL; idx++) ++ { ++ source_files = g_list_prepend (source_files, g_strdup (sources[idx])); ++ } ++ ++ g_application_hold (g_application_get_default ()); ++ nautilus_file_operations_copy_move (source_files, destination, ++ GDK_ACTION_MOVE, NULL, copy_move_on_finished, NULL); + + g_list_free_full (source_files, g_free); + nautilus_dbus_file_operations_complete_copy_uris (object, invocation); +@@ -254,8 +243,8 @@ nautilus_dbus_manager_init (NautilusDBusManager *self) + G_CALLBACK (handle_copy_uris), + self); + g_signal_connect (self->file_operations, +- "handle-copy-file", +- G_CALLBACK (handle_copy_file), ++ "handle-move-uris", ++ G_CALLBACK (handle_move_uris), + self); + g_signal_connect (self->file_operations, + "handle-empty-trash", +diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c +index cf5e7f46b..e306e7eff 100644 +--- a/src/nautilus-file-operations.c ++++ b/src/nautilus-file-operations.c +@@ -5705,47 +5705,6 @@ copy_task_thread_func (GTask *task, + &source_info, &transfer_info); + } + +-void +-nautilus_file_operations_copy_file (GFile *source_file, +- GFile *target_dir, +- const gchar *source_display_name, +- const gchar *new_name, +- GtkWindow *parent_window, +- NautilusCopyCallback done_callback, +- gpointer done_callback_data) +-{ +- GTask *task; +- CopyMoveJob *job; +- +- job = op_job_new (CopyMoveJob, parent_window); +- job->done_callback = done_callback; +- job->done_callback_data = done_callback_data; +- job->files = g_list_append (NULL, g_object_ref (source_file)); +- job->destination = g_object_ref (target_dir); +- /* Need to indicate the destination for the operation notification open +- * button. */ +- nautilus_progress_info_set_destination (((CommonJob *) job)->progress, target_dir); +- job->target_name = g_strdup (new_name); +- job->debuting_files = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal, g_object_unref, NULL); +- +- if (source_display_name != NULL) +- { +- gchar *path; +- +- path = g_build_filename ("/", source_display_name, NULL); +- job->fake_display_source = g_file_new_for_path (path); +- +- g_free (path); +- } +- +- inhibit_power_manager ((CommonJob *) job, _("Copying Files")); +- +- task = g_task_new (NULL, job->common.cancellable, copy_task_done, job); +- g_task_set_task_data (task, job, NULL); +- g_task_run_in_thread (task, copy_task_thread_func); +- g_object_unref (task); +-} +- + void + nautilus_file_operations_copy (GList *files, + GFile *target_dir, +diff --git a/src/nautilus-file-operations.h b/src/nautilus-file-operations.h +index e8c6ed393..2a9c6a6a0 100644 +--- a/src/nautilus-file-operations.h ++++ b/src/nautilus-file-operations.h +@@ -57,13 +57,6 @@ void nautilus_file_operations_copy_move (const GList *item_uris, + GtkWidget *parent_view, + NautilusCopyCallback done_callback, + gpointer done_callback_data); +-void nautilus_file_operations_copy_file (GFile *source_file, +- GFile *target_dir, +- const gchar *source_display_name, +- const gchar *new_name, +- GtkWindow *parent_window, +- NautilusCopyCallback done_callback, +- gpointer done_callback_data); + void nautilus_file_operations_empty_trash (GtkWidget *parent_view); + void nautilus_file_operations_new_folder (GtkWidget *parent_view, + const char *parent_dir_uri, +-- +2.17.1 + diff --git a/SOURCES/0009-dbus-Implement-move-operation.patch b/SOURCES/0009-dbus-Implement-move-operation.patch new file mode 100644 index 0000000..66359f5 --- /dev/null +++ b/SOURCES/0009-dbus-Implement-move-operation.patch @@ -0,0 +1,28 @@ +From 60ba10283b631f08bd7e763a63a1a8e048b66379 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Wed, 8 Aug 2018 14:07:48 +0200 +Subject: [PATCH 09/11] dbus: Implement move operation + +Analog to the copy operation. +--- + data/dbus-interfaces.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/data/dbus-interfaces.xml b/data/dbus-interfaces.xml +index 20ffadde1..64176225c 100644 +--- a/data/dbus-interfaces.xml ++++ b/data/dbus-interfaces.xml +@@ -27,6 +27,10 @@ + + + ++ ++ ++ ++ + + " + +-- +2.17.1 + diff --git a/SOURCES/0010-dbus-manager-Fix-double-free.patch b/SOURCES/0010-dbus-manager-Fix-double-free.patch new file mode 100644 index 0000000..672c6e6 --- /dev/null +++ b/SOURCES/0010-dbus-manager-Fix-double-free.patch @@ -0,0 +1,45 @@ +From 7cea30b7357cf246cbab67e895c90ebb5cc6a772 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Wed, 8 Aug 2018 14:32:00 +0200 +Subject: [PATCH 10/11] dbus-manager: Fix double free + +nautilus_undo_manager_get doesn't return a new reference, so we +shouldn't use g_autoptr. +--- + src/nautilus-dbus-manager.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c +index 1ac6e12c2..728b1dea2 100644 +--- a/src/nautilus-dbus-manager.c ++++ b/src/nautilus-dbus-manager.c +@@ -64,7 +64,7 @@ nautilus_dbus_manager_dispose (GObject *object) + static void + undo_redo_on_finished (gpointer user_data) + { +- g_autoptr (NautilusFileUndoManager) undo_manager = NULL; ++ NautilusFileUndoManager *undo_manager = NULL; + int *handler_id = (int *) user_data; + + undo_manager = nautilus_file_undo_manager_get (); +@@ -77,7 +77,7 @@ static gboolean + handle_redo (NautilusDBusFileOperations *object, + GDBusMethodInvocation *invocation) + { +- g_autoptr (NautilusFileUndoManager) undo_manager = NULL; ++ NautilusFileUndoManager *undo_manager = NULL; + gint *handler_id = g_new0(int, 1); + + undo_manager = nautilus_file_undo_manager_get (); +@@ -94,7 +94,7 @@ static gboolean + handle_undo (NautilusDBusFileOperations *object, + GDBusMethodInvocation *invocation) + { +- g_autoptr (NautilusFileUndoManager) undo_manager = NULL; ++ NautilusFileUndoManager *undo_manager = NULL; + gint *handler_id = g_new0(int, 1); + + undo_manager = nautilus_file_undo_manager_get (); +-- +2.17.1 + diff --git a/SOURCES/0011-dbus-manager-Fix-not-holding-application.patch b/SOURCES/0011-dbus-manager-Fix-not-holding-application.patch new file mode 100644 index 0000000..a87488c --- /dev/null +++ b/SOURCES/0011-dbus-manager-Fix-not-holding-application.patch @@ -0,0 +1,36 @@ +From 12fa036ee7689774cfdf941ae7fda04d18d34ae8 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Wed, 8 Aug 2018 14:32:56 +0200 +Subject: [PATCH 11/11] dbus-manager: Fix not holding application + +The code was releasing it on the callback but forgot to put the hold +on the initial call. +--- + src/nautilus-dbus-manager.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c +index 728b1dea2..f11ede0ad 100644 +--- a/src/nautilus-dbus-manager.c ++++ b/src/nautilus-dbus-manager.c +@@ -80,6 +80,8 @@ handle_redo (NautilusDBusFileOperations *object, + NautilusFileUndoManager *undo_manager = NULL; + gint *handler_id = g_new0(int, 1); + ++ g_application_hold (g_application_get_default ()); ++ + undo_manager = nautilus_file_undo_manager_get (); + *handler_id = g_signal_connect_swapped (undo_manager, "undo-changed", + G_CALLBACK (undo_redo_on_finished), +@@ -97,6 +99,8 @@ handle_undo (NautilusDBusFileOperations *object, + NautilusFileUndoManager *undo_manager = NULL; + gint *handler_id = g_new0(int, 1); + ++ g_application_hold (g_application_get_default ()); ++ + undo_manager = nautilus_file_undo_manager_get (); + *handler_id = g_signal_connect_swapped (undo_manager, "undo-changed", + G_CALLBACK (undo_redo_on_finished), +-- +2.17.1 + diff --git a/SOURCES/0012-clipboard-Use-text-based-clipboard-only.patch b/SOURCES/0012-clipboard-Use-text-based-clipboard-only.patch new file mode 100644 index 0000000..f943a51 --- /dev/null +++ b/SOURCES/0012-clipboard-Use-text-based-clipboard-only.patch @@ -0,0 +1,552 @@ +From 228971be31f92625f641531e1b78b8c8e63677b0 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Tue, 31 Jul 2018 22:10:03 +0200 +Subject: [PATCH] clipboard: Use text based clipboard only + +--- + src/nautilus-canvas-view.c | 13 ++++++------- + src/nautilus-clipboard.c | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------- + src/nautilus-clipboard.h | 5 +++-- + src/nautilus-files-view.c | 112 +++++++++++++++++++++++++++++++++------------------------------------------------------------------------------- + src/nautilus-list-view.c | 13 ++++++------- + 5 files changed, 102 insertions(+), 154 deletions(-) + +diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c +index f99ddd9..7de0808 100644 +--- a/src/nautilus-canvas-view.c ++++ b/src/nautilus-canvas-view.c +@@ -549,9 +549,9 @@ nautilus_canvas_view_begin_loading (NautilusFilesView *view) + } + + static void +-on_clipboard_contents_received (GtkClipboard *clipboard, +- GtkSelectionData *selection_data, +- gpointer user_data) ++on_clipboard_contents_received (GtkClipboard *clipboard, ++ const gchar *selection_data, ++ gpointer user_data) + { + NautilusCanvasView *canvas_view; + +@@ -590,10 +590,9 @@ static void + update_clipboard_status (NautilusCanvasView *view) + { + g_object_ref (view); /* Need to keep the object alive until we get the reply */ +- gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)), +- nautilus_clipboard_get_atom (), +- on_clipboard_contents_received, +- view); ++ gtk_clipboard_request_text (nautilus_clipboard_get (GTK_WIDGET (view)), ++ on_clipboard_contents_received, ++ view); + } + + static void +diff --git a/src/nautilus-clipboard.c b/src/nautilus-clipboard.c +index 267d7a3..752ff13 100644 +--- a/src/nautilus-clipboard.c ++++ b/src/nautilus-clipboard.c +@@ -33,30 +33,32 @@ + #include + #include + +-static GdkAtom copied_files_atom; +- + typedef struct + { + gboolean cut; + GList *files; + } ClipboardInfo; + + static GList * +-convert_lines_to_str_list (char **lines) ++convert_selection_data_to_str_list (const gchar *data) + { + int i; + GList *result; ++ size_t number_of_lines; ++ gchar **lines; + +- if (lines[0] == NULL) +- { +- return NULL; +- } +- ++ lines = g_strsplit (data, "\n", 0); + result = NULL; +- for (i = 0; lines[i] != NULL; i++) ++ number_of_lines = g_strv_length (lines); ++ /* Also, this skips the last line, since it would be an ++ * empty string from the split */ ++ for (i = 0; i < number_of_lines - 1; i++) + { + result = g_list_prepend (result, g_strdup (lines[i])); + } ++ ++ g_strfreev (lines); ++ + return g_list_reverse (result); + } + +@@ -77,7 +79,8 @@ convert_file_list_to_string (ClipboardInfo *info, + } + else + { +- uris = g_string_new (info->cut ? "cut" : "copy"); ++ uris = g_string_new ("x-special/nautilus-clipboard\n"); ++ g_string_append (uris, info->cut ? "cut\n" : "copy\n"); + } + + for (i = 0, l = info->files; l != NULL; l = l->next, i++) +@@ -100,16 +103,12 @@ convert_file_list_to_string (ClipboardInfo *info, + g_string_append (uris, uri); + } + +- /* skip newline for last element */ +- if (i + 1 < g_list_length (info->files)) +- { +- g_string_append_c (uris, '\n'); +- } ++ g_string_append_c (uris, '\n'); + } + else + { +- g_string_append_c (uris, '\n'); + g_string_append (uris, uri); ++ g_string_append_c (uris, '\n'); + } + + g_free (uri); +@@ -120,43 +119,60 @@ convert_file_list_to_string (ClipboardInfo *info, + } + + static GList * +-get_item_list_from_selection_data (GtkSelectionData *selection_data) ++get_item_list_from_selection_data (const gchar *selection_data) + { +- GList *items; +- char **lines; ++ GList *items = NULL; + +- if (gtk_selection_data_get_data_type (selection_data) != copied_files_atom +- || gtk_selection_data_get_length (selection_data) <= 0) ++ if (selection_data != NULL) + { +- items = NULL; +- } +- else +- { +- gchar *data; ++ gboolean valid_data = TRUE; + /* Not sure why it's legal to assume there's an extra byte + * past the end of the selection data that it's safe to write + * to. But gtk_editable_selection_received does this, so I + * think it is OK. + */ +- data = (gchar *) gtk_selection_data_get_data (selection_data); +- data[gtk_selection_data_get_length (selection_data)] = '\0'; +- lines = g_strsplit (data, "\n", 0); +- items = convert_lines_to_str_list (lines); +- g_strfreev (lines); ++ items = convert_selection_data_to_str_list (selection_data); ++ if (items == NULL || g_strcmp0 (items->data, "x-special/nautilus-clipboard") != 0) ++ { ++ valid_data = FALSE; ++ } ++ else if (items->next == NULL) ++ { ++ valid_data = FALSE; ++ } ++ else if (g_strcmp0 (items->next->data, "cut") != 0 && ++ g_strcmp0 (items->next->data, "copy") != 0) ++ { ++ valid_data = FALSE; ++ } ++ ++ if (!valid_data) ++ { ++ g_list_free_full (items, g_free); ++ items = NULL; ++ } + } + + return items; + } + ++gboolean ++nautilus_clipboard_is_data_valid_from_selection_data (const gchar *selection_data) ++{ ++ return nautilus_clipboard_get_uri_list_from_selection_data (selection_data) != NULL; ++} ++ + GList * +-nautilus_clipboard_get_uri_list_from_selection_data (GtkSelectionData *selection_data) ++nautilus_clipboard_get_uri_list_from_selection_data (const gchar *selection_data) + { + GList *items; + + items = get_item_list_from_selection_data (selection_data); + if (items) + { +- /* Line 0 is "cut" or "copy", so uris start at line 1. */ ++ /* Line 0 is x-special/nautilus-clipboard. */ ++ items = g_list_remove (items, items->data); ++ /* Line 1 is "cut" or "copy", so uris start at line 2. */ + items = g_list_remove (items, items->data); + } + +@@ -174,13 +190,12 @@ void + nautilus_clipboard_clear_if_colliding_uris (GtkWidget *widget, + const GList *item_uris) + { +- GtkSelectionData *data; ++ g_autofree gchar *data = NULL; + GList *clipboard_item_uris, *l; + gboolean collision; + + collision = FALSE; +- data = gtk_clipboard_wait_for_contents (nautilus_clipboard_get (widget), +- copied_files_atom); ++ data = gtk_clipboard_wait_for_text (nautilus_clipboard_get (widget)); + if (data == NULL) + { + return; +@@ -210,14 +225,14 @@ nautilus_clipboard_clear_if_colliding_uris (GtkWidget *widget, + } + + gboolean +-nautilus_clipboard_is_cut_from_selection_data (GtkSelectionData *selection_data) ++nautilus_clipboard_is_cut_from_selection_data (const gchar *selection_data) + { + GList *items; + gboolean is_cut_from_selection_data; + + items = get_item_list_from_selection_data (selection_data); + is_cut_from_selection_data = items != NULL && +- g_strcmp0 ((gchar *) items->data, "cut") == 0; ++ g_strcmp0 ((gchar *) items->next->data, "cut") == 0; + + g_list_free_full (items, g_free); + +@@ -262,17 +277,8 @@ on_get_clipboard (GtkClipboard *clipboard, + char *str; + gsize len; + +- str = convert_file_list_to_string (clipboard_info, TRUE, &len); +- gtk_selection_data_set_text (selection_data, str, len); +- g_free (str); +- } +- else if (target == copied_files_atom) +- { +- char *str; +- gsize len; +- + str = convert_file_list_to_string (clipboard_info, FALSE, &len); +- gtk_selection_data_set (selection_data, copied_files_atom, 8, (guchar *) str, len); ++ gtk_selection_data_set_text (selection_data, str, len); + g_free (str); + } + } +@@ -303,7 +309,6 @@ nautilus_clipboard_prepare_for_files (GtkClipboard *clipboard, + clipboard_info->files = nautilus_file_list_copy (files); + + target_list = gtk_target_list_new (NULL, 0); +- gtk_target_list_add (target_list, copied_files_atom, 0, 0); + gtk_target_list_add_uri_targets (target_list, 0); + gtk_target_list_add_text_targets (target_list, 0); + +@@ -317,13 +322,3 @@ nautilus_clipboard_prepare_for_files (GtkClipboard *clipboard, + gtk_target_table_free (targets, n_targets); + } + +-GdkAtom +-nautilus_clipboard_get_atom (void) +-{ +- if (!copied_files_atom) +- { +- copied_files_atom = gdk_atom_intern_static_string ("x-special/gnome-copied-files"); +- } +- +- return copied_files_atom; +-} +diff --git a/src/nautilus-clipboard.h b/src/nautilus-clipboard.h +index 613e983..3be19c9 100644 +--- a/src/nautilus-clipboard.h ++++ b/src/nautilus-clipboard.h +@@ -28,11 +28,12 @@ + void nautilus_clipboard_clear_if_colliding_uris (GtkWidget *widget, + const GList *item_uris); + GtkClipboard* nautilus_clipboard_get (GtkWidget *widget); +-GList* nautilus_clipboard_get_uri_list_from_selection_data (GtkSelectionData *selection_data); +-gboolean nautilus_clipboard_is_cut_from_selection_data (GtkSelectionData *selection_data); ++GList* nautilus_clipboard_get_uri_list_from_selection_data (const gchar *selection_data); ++gboolean nautilus_clipboard_is_cut_from_selection_data (const gchar *selection_data); + void nautilus_clipboard_prepare_for_files (GtkClipboard *clipboard, + GList *files, + gboolean cut); + GdkAtom nautilus_clipboard_get_atom (void); ++gboolean nautilus_clipboard_is_data_valid_from_selection_data (const gchar *selection_data); + + #endif /* NAUTILUS_CLIPBOARD_H */ +diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c +index 8aff33e..a74b691 100644 +--- a/src/nautilus-files-view.c ++++ b/src/nautilus-files-view.c +@@ -2551,7 +2551,7 @@ action_open_item_new_window (GSimpleAction *action, + + static void + handle_clipboard_data (NautilusFilesView *view, +- GtkSelectionData *selection_data, ++ const gchar *selection_data, + char *destination_uri, + GdkDragAction action) + { +@@ -2576,7 +2576,7 @@ handle_clipboard_data (NautilusFilesView *view, + + static void + paste_clipboard_data (NautilusFilesView *view, +- GtkSelectionData *selection_data, ++ const gchar *selection_data, + char *destination_uri) + { + GdkDragAction action; +@@ -2594,9 +2594,9 @@ paste_clipboard_data (NautilusFilesView *view, + } + + static void +-paste_clipboard_received_callback (GtkClipboard *clipboard, +- GtkSelectionData *selection_data, +- gpointer data) ++paste_clipboard_text_received_callback (GtkClipboard *clipboard, ++ const gchar *selection_data, ++ gpointer data) + { + NautilusFilesView *view; + NautilusFilesViewPrivate *priv; +@@ -2629,16 +2629,15 @@ action_paste_files (GSimpleAction *action, + view = NAUTILUS_FILES_VIEW (user_data); + + g_object_ref (view); +- gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)), +- nautilus_clipboard_get_atom (), +- paste_clipboard_received_callback, +- view); ++ gtk_clipboard_request_text (nautilus_clipboard_get (GTK_WIDGET (view)), ++ paste_clipboard_text_received_callback, ++ view); + } + + static void +-create_links_clipboard_received_callback (GtkClipboard *clipboard, +- GtkSelectionData *selection_data, +- gpointer data) ++create_links_clipboard_received_callback (GtkClipboard *clipboard, ++ const gchar *selection_data, ++ gpointer data) + { + NautilusFilesView *view; + NautilusFilesViewPrivate *priv; +@@ -2671,10 +2670,9 @@ action_create_links (GSimpleAction *action, + view = NAUTILUS_FILES_VIEW (user_data); + + g_object_ref (view); +- gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)), +- nautilus_clipboard_get_atom (), +- create_links_clipboard_received_callback, +- view); ++ gtk_clipboard_request_text (nautilus_clipboard_get (GTK_WIDGET (view)), ++ create_links_clipboard_received_callback, ++ view); + } + + static void +@@ -6016,9 +6014,9 @@ typedef struct + } PasteIntoData; + + static void +-paste_into_clipboard_received_callback (GtkClipboard *clipboard, +- GtkSelectionData *selection_data, +- gpointer callback_data) ++paste_into_clipboard_received_callback (GtkClipboard *clipboard, ++ const gchar *selection_data, ++ gpointer callback_data) + { + NautilusFilesViewPrivate *priv; + PasteIntoData *data; +@@ -6058,10 +6056,9 @@ paste_into (NautilusFilesView *view, + data->view = g_object_ref (view); + data->target = nautilus_file_ref (target); + +- gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)), +- nautilus_clipboard_get_atom (), +- paste_into_clipboard_received_callback, +- data); ++ gtk_clipboard_request_text (nautilus_clipboard_get (GTK_WIDGET (view)), ++ paste_into_clipboard_received_callback, ++ data); + } + + static void +@@ -6925,18 +6922,19 @@ can_paste_into_file (NautilusFile *file) + } + + static void +-on_clipboard_contents_received (GtkClipboard *clipboard, +- GtkSelectionData *selection_data, +- gpointer user_data) ++on_clipboard_contents_received (GtkClipboard *clipboard, ++ const gchar *selection_data, ++ gpointer user_data) + { + NautilusFilesViewPrivate *priv; + NautilusFilesView *view; + gboolean can_link_from_copied_files; + gboolean settings_show_create_link; + gboolean is_read_only; + gboolean selection_contains_recent; + gboolean selection_contains_starred; + GAction *action; ++ gboolean is_data_valid; + + view = NAUTILUS_FILES_VIEW (user_data); + priv = nautilus_files_view_get_instance_private (view); +@@ -6949,77 +6947,41 @@ on_clipboard_contents_received (GtkClipboard *clipboard, + return; + } + ++ is_data_valid = nautilus_clipboard_is_data_valid_from_selection_data (selection_data); + settings_show_create_link = g_settings_get_boolean (nautilus_preferences, + NAUTILUS_PREFERENCES_SHOW_CREATE_LINK); + is_read_only = nautilus_files_view_is_read_only (view); + selection_contains_recent = showing_recent_directory (view); + selection_contains_starred = showing_starred_directory (view); + can_link_from_copied_files = !nautilus_clipboard_is_cut_from_selection_data (selection_data) && + !selection_contains_recent && !selection_contains_starred && +- !is_read_only && gtk_selection_data_get_length (selection_data) > 0; ++ !is_read_only && selection_data != NULL; + + action = g_action_map_lookup_action (G_ACTION_MAP (priv->view_action_group), + "create-link"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), + can_link_from_copied_files && + settings_show_create_link); + +- g_object_unref (view); +-} +- +-static void +-on_clipboard_targets_received (GtkClipboard *clipboard, +- GdkAtom *targets, +- int n_targets, +- gpointer user_data) +-{ +- NautilusFilesViewPrivate *priv; +- NautilusFilesView *view; +- gboolean is_data_copied; +- int i; +- GAction *action; +- +- view = NAUTILUS_FILES_VIEW (user_data); +- priv = nautilus_files_view_get_instance_private (view); +- is_data_copied = FALSE; +- +- if (priv->slot == NULL || +- !priv->active) +- { +- /* We've been destroyed or became inactive since call */ +- g_object_unref (view); +- return; +- } +- +- if (targets) +- { +- for (i = 0; i < n_targets; i++) +- { +- if (targets[i] == nautilus_clipboard_get_atom ()) +- { +- is_data_copied = TRUE; +- } +- } +- } +- + action = g_action_map_lookup_action (G_ACTION_MAP (priv->view_action_group), + "paste"); + /* Take into account if the action was previously disabled for other reasons, + * like the directory not being writabble */ + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), +- is_data_copied && g_action_get_enabled (action)); ++ is_data_valid && g_action_get_enabled (action)); + + action = g_action_map_lookup_action (G_ACTION_MAP (priv->view_action_group), + "paste-into"); + + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), +- is_data_copied && g_action_get_enabled (action)); ++ is_data_valid && g_action_get_enabled (action)); + + action = g_action_map_lookup_action (G_ACTION_MAP (priv->view_action_group), + "create-link"); + + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), +- is_data_copied && g_action_get_enabled (action)); ++ is_data_valid && g_action_get_enabled (action)); ++ + + g_object_unref (view); + } +@@ -7565,18 +7527,10 @@ real_update_actions_state (NautilusFilesView *view) + !selection_contains_starred && + priv->templates_present); + +- /* Actions that are related to the clipboard need request, request the data +- * and update them once we have the data */ +- g_object_ref (view); /* Need to keep the object alive until we get the reply */ +- gtk_clipboard_request_targets (nautilus_clipboard_get (GTK_WIDGET (view)), +- on_clipboard_targets_received, +- view); +- + g_object_ref (view); /* Need to keep the object alive until we get the reply */ +- gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)), +- nautilus_clipboard_get_atom (), +- on_clipboard_contents_received, +- view); ++ gtk_clipboard_request_text (nautilus_clipboard_get (GTK_WIDGET (view)), ++ on_clipboard_contents_received, ++ view); + + action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), + "select-all"); +diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c +index d2ba388..4f65080 100644 +--- a/src/nautilus-list-view.c ++++ b/src/nautilus-list-view.c +@@ -3628,9 +3628,9 @@ list_view_scroll_to_file (NautilusFilesView *view, + } + + static void +-on_clipboard_contents_received (GtkClipboard *clipboard, +- GtkSelectionData *selection_data, +- gpointer user_data) ++on_clipboard_contents_received (GtkClipboard *clipboard, ++ const gchar *selection_data, ++ gpointer user_data) + { + NautilusListView *view = NAUTILUS_LIST_VIEW (user_data); + +@@ -3665,10 +3665,9 @@ static void + update_clipboard_status (NautilusListView *view) + { + g_object_ref (view); /* Need to keep the object alive until we get the reply */ +- gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)), +- nautilus_clipboard_get_atom (), +- on_clipboard_contents_received, +- view); ++ gtk_clipboard_request_text (nautilus_clipboard_get (GTK_WIDGET (view)), ++ on_clipboard_contents_received, ++ view); + } + + static void +-- +libgit2 0.26.0 + diff --git a/SOURCES/0013-dbus-manager-Provide-undo-status.patch b/SOURCES/0013-dbus-manager-Provide-undo-status.patch new file mode 100644 index 0000000..42e7bfd --- /dev/null +++ b/SOURCES/0013-dbus-manager-Provide-undo-status.patch @@ -0,0 +1,78 @@ +From 90229bd32fde57feb4dd37bc018d47c7a29e7e93 Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Sat, 18 Aug 2018 20:31:36 +0200 +Subject: [PATCH] dbus-manager: Provide undo status + +This is interesting for the desktop icons integration, so it can hide +the undo/redo menu items appropriately. +--- + data/dbus-interfaces.xml | 1 + + src/nautilus-dbus-manager.c | 31 +++++++++++++++++++++++++++++-- + 2 files changed, 30 insertions(+), 2 deletions(-) + +diff --git a/data/dbus-interfaces.xml b/data/dbus-interfaces.xml +index 64176225c..078cf24a2 100644 +--- a/data/dbus-interfaces.xml ++++ b/data/dbus-interfaces.xml +@@ -43,5 +43,6 @@ + + + ++ + + +diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c +index f11ede0ad..64f004d88 100644 +--- a/src/nautilus-dbus-manager.c ++++ b/src/nautilus-dbus-manager.c +@@ -237,6 +237,17 @@ handle_trash_files (NautilusDBusFileOperations *object, + return TRUE; /* invocation was handled */ + } + ++ ++static void ++undo_manager_changed (NautilusDBusManager *self) ++{ ++ NautilusFileUndoManagerState undo_state; ++ ++ undo_state = nautilus_file_undo_manager_get_state (); ++ nautilus_dbus_file_operations_set_undo_status (self->file_operations, ++ undo_state); ++} ++ + static void + nautilus_dbus_manager_init (NautilusDBusManager *self) + { +@@ -292,12 +303,28 @@ nautilus_dbus_manager_register (NautilusDBusManager *self, + GDBusConnection *connection, + GError **error) + { +- return g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->file_operations), +- connection, "/org/gnome/Nautilus" PROFILE, error); ++ gboolean succes; ++ ++ succes = g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->file_operations), ++ connection, "/org/gnome/Nautilus" PROFILE, error); ++ if (succes) ++ { ++ g_signal_connect_object (nautilus_file_undo_manager_get (), ++ "undo-changed", ++ G_CALLBACK (undo_manager_changed), ++ self, ++ G_CONNECT_SWAPPED); ++ ++ undo_manager_changed (self); ++ } ++ ++ return succes; + } + + void + nautilus_dbus_manager_unregister (NautilusDBusManager *self) + { + g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->file_operations)); ++ ++ g_signal_handlers_disconnect_by_data (nautilus_file_undo_manager_get (), self); + } +-- +2.17.1 diff --git a/SOURCES/0014-clipboard-Prevent-crash-when-selection-data-is-empty.patch b/SOURCES/0014-clipboard-Prevent-crash-when-selection-data-is-empty.patch new file mode 100644 index 0000000..f100c78 --- /dev/null +++ b/SOURCES/0014-clipboard-Prevent-crash-when-selection-data-is-empty.patch @@ -0,0 +1,59 @@ +From f0e34498a2f2e2ec6644a3af47c1b56ac5b6dec3 Mon Sep 17 00:00:00 2001 +From: Ernestas Kulik +Date: Thu, 2 Aug 2018 22:29:03 +0300 +Subject: [PATCH] clipboard: Prevent crash when selection data is empty + +Somehow, magically, it can happen that the clipboard contains an empty +string, which wreaks havoc in convert_selection_data_to_str_list(), +since the loop counter goes from 0 to the number of lines in the data +string minus one. This commit adds a check for the number of lines and +returns early. Additionally, this introduces automatic cleanup for a +variable and fixes mismatched types. +--- + src/nautilus-clipboard.c | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +diff --git a/src/nautilus-clipboard.c b/src/nautilus-clipboard.c +index 752ff131f..2a77cf28f 100644 +--- a/src/nautilus-clipboard.c ++++ b/src/nautilus-clipboard.c +@@ -42,23 +42,29 @@ typedef struct + static GList * + convert_selection_data_to_str_list (const gchar *data) + { +- int i; ++ g_auto (GStrv) lines; ++ guint number_of_lines; + GList *result; +- size_t number_of_lines; +- gchar **lines; + + lines = g_strsplit (data, "\n", 0); +- result = NULL; + number_of_lines = g_strv_length (lines); ++ if (number_of_lines == 0) ++ { ++ /* An empty string will result in g_strsplit() returning an empty ++ * array, so, naturally, 0 - 1 = UINT32_MAX and we read all sorts ++ * of invalid memory. ++ */ ++ return NULL; ++ } ++ result = NULL; ++ + /* Also, this skips the last line, since it would be an + * empty string from the split */ +- for (i = 0; i < number_of_lines - 1; i++) ++ for (guint i = 0; i < number_of_lines - 1; i++) + { + result = g_list_prepend (result, g_strdup (lines[i])); + } + +- g_strfreev (lines); +- + return g_list_reverse (result); + } + +-- +2.17.2 + diff --git a/SOURCES/Add-actions-to-the-toolbar.patch b/SOURCES/Add-actions-to-the-toolbar.patch new file mode 100644 index 0000000..a3cfb98 --- /dev/null +++ b/SOURCES/Add-actions-to-the-toolbar.patch @@ -0,0 +1,1196 @@ +diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c +index 0c7380ae9..08107a64e 100644 +--- a/src/nautilus-files-view.c ++++ b/src/nautilus-files-view.c +@@ -146,6 +146,8 @@ enum + PROP_IS_LOADING, + PROP_LOCATION, + PROP_SEARCH_QUERY, ++ PROP_EXTENSIONS_BACKGROUND_MENU, ++ PROP_TEMPLATES_MENU, + NUM_PROPERTIES + }; + +@@ -264,6 +266,10 @@ typedef struct + GtkWidget *zoom_controls_box; + GtkWidget *zoom_level_label; + ++ /* Exposed menus, for the path bar etc. */ ++ GMenu *extensions_background_menu; ++ GMenu *templates_menu; ++ + gulong stop_signal_handler; + gulong reload_signal_handler; + +@@ -691,6 +697,98 @@ nautilus_files_view_get_toolbar_menu_sections (NautilusView *view) + return priv->toolbar_menu_sections; + } + ++static GMenu* ++nautilus_files_view_get_templates_menu (NautilusView *self) ++{ ++ GMenu *menu; ++ ++ g_object_get (self, "templates-menu", &menu, NULL); ++ ++ return menu; ++} ++ ++static GMenu* ++nautilus_files_view_get_extensions_background_menu (NautilusView *self) ++{ ++ GMenu *menu; ++ ++ g_object_get (self, "extensions-background-menu", &menu, NULL); ++ ++ return menu; ++} ++ ++static GMenu* ++real_get_extensions_background_menu (NautilusView *view) ++{ ++ NautilusFilesViewPrivate *priv; ++ ++ g_return_val_if_fail (NAUTILUS_IS_FILES_VIEW (view), NULL); ++ ++ priv = nautilus_files_view_get_instance_private (NAUTILUS_FILES_VIEW (view)); ++ ++ return priv->extensions_background_menu; ++} ++ ++static GMenu* ++real_get_templates_menu (NautilusView *view) ++{ ++ NautilusFilesViewPrivate *priv; ++ ++ g_return_val_if_fail (NAUTILUS_IS_FILES_VIEW (view), NULL); ++ ++ priv = nautilus_files_view_get_instance_private (NAUTILUS_FILES_VIEW (view)); ++ ++ return priv->templates_menu; ++} ++ ++static void ++nautilus_files_view_set_templates_menu (NautilusView *self, ++ GMenu *menu) ++{ ++ g_object_set (self, "templates-menu", menu, NULL); ++} ++ ++static void ++nautilus_files_view_set_extensions_background_menu (NautilusView *self, ++ GMenu *menu) ++{ ++ g_object_set (self, "extensions-background-menu", menu, NULL); ++} ++ ++static void ++real_set_extensions_background_menu (NautilusView *view, ++ GMenu *menu) ++{ ++ NautilusFilesViewPrivate *priv; ++ ++ g_return_if_fail (NAUTILUS_IS_FILES_VIEW (view)); ++ ++ priv = nautilus_files_view_get_instance_private (NAUTILUS_FILES_VIEW (view)); ++ ++ if (priv->extensions_background_menu != NULL) ++ { ++ g_clear_object (&priv->extensions_background_menu); ++ } ++ priv->extensions_background_menu = menu; ++} ++ ++static void ++real_set_templates_menu (NautilusView *view, ++ GMenu *menu) ++{ ++ NautilusFilesViewPrivate *priv; ++ ++ g_return_if_fail (NAUTILUS_IS_FILES_VIEW (view)); ++ ++ priv = nautilus_files_view_get_instance_private (NAUTILUS_FILES_VIEW (view)); ++ ++ if (priv->templates_menu != NULL) ++ { ++ g_clear_object (&priv->templates_menu); ++ } ++ priv->templates_menu = menu; ++} ++ + static gboolean + showing_trash_directory (NautilusFilesView *view) + { +@@ -2446,6 +2544,30 @@ action_properties (GSimpleAction *action, + } + } + ++static void ++action_current_dir_properties (GSimpleAction *action, ++ GVariant *state, ++ gpointer user_data) ++{ ++ NautilusFilesView *view; ++ NautilusFilesViewPrivate *priv; ++ GList *files; ++ ++ g_return_if_fail (NAUTILUS_IS_FILES_VIEW (user_data)); ++ ++ view = NAUTILUS_FILES_VIEW (user_data); ++ priv = nautilus_files_view_get_instance_private (view); ++ ++ if (priv->directory_as_file != NULL) ++ { ++ files = g_list_append (NULL, nautilus_file_ref (priv->directory_as_file)); ++ ++ nautilus_properties_window_present (files, GTK_WIDGET (view), NULL, NULL, NULL); ++ ++ nautilus_file_list_free (files); ++ } ++} ++ + static void + nautilus_files_view_set_show_hidden_files (NautilusFilesView *view, + gboolean show_hidden) +@@ -3192,6 +3314,8 @@ nautilus_files_view_finalize (GObject *object) + g_clear_object (&priv->selection_menu); + g_clear_object (&priv->toolbar_menu_sections->zoom_section); + g_clear_object (&priv->toolbar_menu_sections->extended_section); ++ g_clear_object (&priv->extensions_background_menu); ++ g_clear_object (&priv->templates_menu); + g_clear_object (&priv->rename_file_controller); + g_clear_object (&priv->new_folder_controller); + g_clear_object (&priv->compress_controller); +@@ -4899,49 +5023,42 @@ build_menu_for_extension_menu_items (NautilusFilesView *view, + return gmenu; + } + +-static void +-add_extension_menu_items (NautilusFilesView *view, +- const gchar *extension_prefix, +- GList *menu_items, +- GMenu *insertion_menu) +-{ +- GMenu *menu; +- +- menu = build_menu_for_extension_menu_items (view, extension_prefix, menu_items); +- nautilus_gmenu_merge (insertion_menu, +- menu, +- "extensions", +- FALSE); +- +- g_object_unref (menu); +-} +- + static void + update_extensions_menus (NautilusFilesView *view) + { + NautilusFilesViewPrivate *priv; + GList *selection_items, *background_items; ++ g_autoptr (GMenu) background_menu = NULL; ++ g_autoptr (GMenu) selection_menu = NULL; + + priv = nautilus_files_view_get_instance_private (view); + selection_items = get_extension_selection_menu_items (view); + if (selection_items != NULL) + { +- add_extension_menu_items (view, +- "selection", +- selection_items, +- priv->selection_menu); ++ selection_menu = build_menu_for_extension_menu_items (view, "extensions", ++ selection_items); ++ ++ nautilus_gmenu_merge (priv->selection_menu, ++ selection_menu, ++ "extensions", ++ FALSE); + nautilus_menu_item_list_free (selection_items); + } + + background_items = get_extension_background_menu_items (view); + if (background_items != NULL) + { +- add_extension_menu_items (view, +- "background", +- background_items, +- priv->background_menu); ++ background_menu = build_menu_for_extension_menu_items (view, "extensions", ++ background_items); ++ ++ nautilus_gmenu_merge (priv->background_menu, ++ background_menu, ++ "extensions", ++ FALSE); + nautilus_menu_item_list_free (background_items); + } ++ ++ nautilus_view_set_extensions_background_menu (NAUTILUS_VIEW (view), background_menu); + } + + static char * +@@ -5646,7 +5763,7 @@ update_templates_menu (NautilusFilesView *view) + NautilusFilesViewPrivate *priv; + GList *sorted_copy, *node; + NautilusDirectory *directory; +- GMenu *submenu; ++ g_autoptr (GMenu) submenu = NULL; + char *uri; + char *templates_directory_uri; + +@@ -5687,9 +5804,10 @@ update_templates_menu (NautilusFilesView *view) + submenu, + "templates-submenu", + FALSE); +- g_object_unref (submenu); + } + ++ nautilus_view_set_templates_menu (NAUTILUS_VIEW (view), submenu); ++ + nautilus_directory_unref (directory); + + priv->templates_present = submenu != NULL; +@@ -6880,6 +6998,7 @@ const GActionEntry view_entries[] = + { "extract-to", action_extract_to }, + { "compress", action_compress }, + { "properties", action_properties}, ++ { "current-directory-properties", action_current_dir_properties}, + { "set-as-wallpaper", action_set_as_wallpaper }, + { "mount-volume", action_mount_volume }, + { "unmount-volume", action_unmount_volume }, +@@ -8871,8 +8990,25 @@ nautilus_files_view_get_property (GObject *object, + } + break; + ++ case PROP_EXTENSIONS_BACKGROUND_MENU: ++ { ++ g_value_set_object (value, ++ real_get_extensions_background_menu (NAUTILUS_VIEW (view))); ++ } ++ break; ++ ++ case PROP_TEMPLATES_MENU: ++ { ++ g_value_set_object (value, ++ real_get_templates_menu (NAUTILUS_VIEW (view))); ++ } ++ break; ++ + default: ++ { + g_assert_not_reached (); ++ } ++ break; + } + } + +@@ -8925,6 +9061,20 @@ nautilus_files_view_set_property (GObject *object, + } + break; + ++ case PROP_EXTENSIONS_BACKGROUND_MENU: ++ { ++ real_set_extensions_background_menu (NAUTILUS_VIEW (directory_view), ++ g_value_get_object (value)); ++ } ++ break; ++ ++ case PROP_TEMPLATES_MENU: ++ { ++ real_set_templates_menu (NAUTILUS_VIEW (directory_view), ++ g_value_get_object (value)); ++ } ++ break; ++ + default: + { + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +@@ -9286,6 +9436,10 @@ nautilus_files_view_iface_init (NautilusViewInterface *iface) + iface->is_searching = nautilus_files_view_is_searching; + iface->is_loading = nautilus_files_view_is_loading; + iface->get_view_id = nautilus_files_view_get_view_id; ++ iface->get_templates_menu = nautilus_files_view_get_templates_menu; ++ iface->set_templates_menu = nautilus_files_view_set_templates_menu; ++ iface->get_extensions_background_menu = nautilus_files_view_get_extensions_background_menu; ++ iface->set_extensions_background_menu = nautilus_files_view_set_extensions_background_menu; + } + + static void +@@ -9410,6 +9564,8 @@ nautilus_files_view_class_init (NautilusFilesViewClass *klass) + g_object_class_override_property (oclass, PROP_IS_SEARCH, "is-searching"); + g_object_class_override_property (oclass, PROP_LOCATION, "location"); + g_object_class_override_property (oclass, PROP_SEARCH_QUERY, "search-query"); ++ g_object_class_override_property (oclass, PROP_EXTENSIONS_BACKGROUND_MENU, "extensions-background-menu"); ++ g_object_class_override_property (oclass, PROP_TEMPLATES_MENU, "templates-menu"); + } + + static void +diff --git a/src/nautilus-pathbar.c b/src/nautilus-pathbar.c +index 630b8ed33..3681ce2d8 100644 +--- a/src/nautilus-pathbar.c ++++ b/src/nautilus-pathbar.c +@@ -73,6 +73,7 @@ typedef struct + GtkWidget *image; + GtkWidget *label; + GtkWidget *bold_label; ++ GtkWidget *disclosure_arrow; + + guint ignore_changes : 1; + guint is_root : 1; +@@ -100,9 +101,13 @@ typedef struct + + GActionGroup *action_group; + +- GMenu *context_menu; + NautilusFile *context_menu_file; +- GdkEvent *context_menu_event; ++ GtkPopover *current_view_menu_popover; ++ GtkPopover *button_menu_popover; ++ GMenu *current_view_menu; ++ GMenu *button_menu; ++ GMenu *extensions_background_menu; ++ GMenu *templates_menu; + } NautilusPathBarPrivate; + + +@@ -120,8 +125,9 @@ static gboolean nautilus_path_bar_slider_button_release (GtkWidget *widget + NautilusPathBar *self); + static void nautilus_path_bar_check_icon_theme (NautilusPathBar *self); + static void nautilus_path_bar_update_button_appearance (ButtonData *button_data); +-static void nautilus_path_bar_update_button_state (ButtonData *button_data, +- gboolean current_dir); ++static void nautilus_path_bar_update_button_state (NautilusPathBar *self, ++ ButtonData *button_data, ++ gboolean current_dir); + static void nautilus_path_bar_update_path (NautilusPathBar *self, + GFile *file_path); + static void unschedule_pop_up_context_menu (NautilusPathBar *self); +@@ -134,6 +140,8 @@ static void action_pathbar_open_item_new_tab (GSimpleAction *action, + static void action_pathbar_properties (GSimpleAction *action, + GVariant *state, + gpointer user_data); ++static void pop_up_pathbar_context_menu (NautilusPathBar *self, ++ NautilusFile *file); + + const GActionEntry path_bar_actions[] = + { +@@ -333,7 +341,12 @@ nautilus_path_bar_init (NautilusPathBar *self) + + /* Context menu */ + builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/ui/nautilus-pathbar-context-menu.ui"); +- priv->context_menu = g_object_ref (G_MENU (gtk_builder_get_object (builder, "pathbar-menu"))); ++ priv->current_view_menu = g_object_ref_sink (G_MENU (gtk_builder_get_object (builder, "current-view-menu"))); ++ priv->button_menu = g_object_ref_sink (G_MENU (gtk_builder_get_object (builder, "button-menu"))); ++ priv->current_view_menu_popover = g_object_ref_sink (GTK_POPOVER (gtk_popover_new_from_model (NULL, ++ G_MENU_MODEL (priv->current_view_menu)))); ++ priv->button_menu_popover = g_object_ref_sink (GTK_POPOVER (gtk_popover_new_from_model (NULL, ++ G_MENU_MODEL (priv->button_menu)))); + g_object_unref (builder); + + gtk_widget_set_has_window (GTK_WIDGET (self), FALSE); +@@ -402,12 +415,12 @@ nautilus_path_bar_finalize (GObject *object) + } + + g_list_free (priv->button_list); ++ g_clear_object (&priv->current_view_menu); ++ g_clear_object (&priv->button_menu); ++ g_clear_object (&priv->button_menu_popover); ++ g_clear_object (&priv->current_view_menu_popover); + + unschedule_pop_up_context_menu (NAUTILUS_PATH_BAR (object)); +- if (priv->context_menu_event) +- { +- gdk_event_free ((GdkEvent *) priv->context_menu_event); +- } + + G_OBJECT_CLASS (nautilus_path_bar_parent_class)->finalize (object); + } +@@ -1293,6 +1306,81 @@ nautilus_path_bar_class_init (NautilusPathBarClass *path_bar_class) + gtk_container_class_handle_border_width (container_class); + } + ++static void ++update_current_view_menu (NautilusPathBar *self) ++{ ++ NautilusPathBarPrivate *priv; ++ ++ priv = nautilus_path_bar_get_instance_private (self); ++ if (priv->extensions_background_menu != NULL) ++ { ++ nautilus_gmenu_merge (priv->current_view_menu, ++ priv->extensions_background_menu, ++ "extensions", ++ TRUE); ++ } ++ ++ if (priv->templates_menu != NULL) ++ { ++ nautilus_gmenu_merge (priv->current_view_menu, priv->templates_menu, ++ "templates-submenu", TRUE); ++ } ++} ++ ++static void ++reset_current_view_menu (NautilusPathBar *self) ++{ ++ NautilusPathBarPrivate *priv; ++ g_autoptr (GtkBuilder) builder = NULL; ++ ++ priv = nautilus_path_bar_get_instance_private (self); ++ ++ g_clear_object (&priv->current_view_menu); ++ builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/ui/nautilus-pathbar-context-menu.ui"); ++ priv->current_view_menu = g_object_ref_sink (G_MENU (gtk_builder_get_object (builder, ++ "current-view-menu"))); ++ gtk_popover_bind_model (priv->current_view_menu_popover, ++ G_MENU_MODEL (priv->current_view_menu), NULL); ++} ++ ++void ++nautilus_path_bar_set_extensions_background_menu (NautilusPathBar *self, ++ GMenu *menu) ++{ ++ NautilusPathBarPrivate *priv; ++ ++ g_return_if_fail (NAUTILUS_IS_PATH_BAR (self)); ++ ++ priv = nautilus_path_bar_get_instance_private (self); ++ reset_current_view_menu (self); ++ g_clear_object (&priv->extensions_background_menu); ++ if (menu != NULL) ++ { ++ priv->extensions_background_menu = g_object_ref (menu); ++ } ++ ++ update_current_view_menu (self); ++} ++ ++void ++nautilus_path_bar_set_templates_menu (NautilusPathBar *self, ++ GMenu *menu) ++{ ++ NautilusPathBarPrivate *priv; ++ ++ g_return_if_fail (NAUTILUS_IS_PATH_BAR (self)); ++ ++ priv = nautilus_path_bar_get_instance_private (self); ++ reset_current_view_menu (self); ++ g_clear_object (&priv->templates_menu); ++ if (menu != NULL) ++ { ++ priv->templates_menu = g_object_ref (menu); ++ } ++ ++ update_current_view_menu (self); ++} ++ + static void + nautilus_path_bar_scroll_down (NautilusPathBar *self) + { +@@ -1599,7 +1687,9 @@ button_clicked_cb (GtkWidget *button, + ButtonData *button_data; + NautilusPathBarPrivate *priv; + NautilusPathBar *self; +- GList *button_list; ++ GdkEvent *event; ++ GdkModifierType state; ++ gboolean current_dir; + + button_data = BUTTON_DATA (data); + if (button_data->ignore_changes) +@@ -1609,13 +1699,29 @@ button_clicked_cb (GtkWidget *button, + + self = NAUTILUS_PATH_BAR (gtk_widget_get_parent (button)); + priv = nautilus_path_bar_get_instance_private (self); ++ event = gtk_get_current_event (); ++ current_dir = g_file_equal (button_data->path, priv->current_path); + +- button_list = g_list_find (priv->button_list, button_data); +- g_assert (button_list != NULL); ++ gdk_event_get_state (event, &state); + +- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); ++ button_data->ignore_changes = TRUE; ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), current_dir); ++ button_data->ignore_changes = FALSE; + +- g_signal_emit (self, path_bar_signals [PATH_CLICKED], 0, button_data->path); ++ if ((state & GDK_CONTROL_MASK) != 0) ++ { ++ g_signal_emit (self, path_bar_signals[OPEN_LOCATION], 0, ++ button_data->path, ++ GTK_PLACES_OPEN_NEW_WINDOW); ++ } ++ else if (current_dir) ++ { ++ gtk_popover_popup (priv->current_view_menu_popover); ++ } ++ else ++ { ++ g_signal_emit (self, path_bar_signals [PATH_CLICKED], 0, button_data->path); ++ } + } + + +@@ -1626,9 +1732,7 @@ real_pop_up_pathbar_context_menu (NautilusPathBar *self) + + priv = nautilus_path_bar_get_instance_private (self); + +- nautilus_pop_up_context_menu_at_pointer (GTK_WIDGET (self), +- priv->context_menu, +- priv->context_menu_event); ++ gtk_popover_popup (priv->button_menu_popover); + } + + static void +@@ -1668,7 +1772,6 @@ unschedule_pop_up_context_menu (NautilusPathBar *self) + + static void + schedule_pop_up_context_menu (NautilusPathBar *self, +- GdkEventButton *event, + NautilusFile *file) + { + NautilusPathBarPrivate *priv; +@@ -1677,12 +1780,6 @@ schedule_pop_up_context_menu (NautilusPathBar *self, + + priv = nautilus_path_bar_get_instance_private (self); + +- if (priv->context_menu_event != NULL) +- { +- gdk_event_free ((GdkEvent *) priv->context_menu_event); +- } +- priv->context_menu_event = gdk_event_copy ((GdkEvent *) event); +- + if (file == priv->context_menu_file) + { + if (nautilus_file_check_if_ready (file, +@@ -1709,12 +1806,11 @@ schedule_pop_up_context_menu (NautilusPathBar *self, + + static void + pop_up_pathbar_context_menu (NautilusPathBar *self, +- GdkEventButton *event, + NautilusFile *file) + { + if (file) + { +- schedule_pop_up_context_menu (self, event, file); ++ schedule_pop_up_context_menu (self, file); + } + } + +@@ -1723,22 +1819,31 @@ button_event_cb (GtkWidget *button, + GdkEventButton *event, + gpointer data) + { +- GtkPlacesOpenFlags flags; + ButtonData *button_data; + NautilusPathBar *self; ++ NautilusPathBarPrivate *priv; + int mask; ++ gboolean current_dir; + + button_data = BUTTON_DATA (data); + self = NAUTILUS_PATH_BAR (gtk_widget_get_parent (button)); ++ priv = nautilus_path_bar_get_instance_private (self); + mask = event->state & gtk_accelerator_get_default_mod_mask (); + + if (event->type == GDK_BUTTON_PRESS) + { +- g_object_set_data (G_OBJECT (button), "handle-button-release", GINT_TO_POINTER (TRUE)); +- + if (event->button == GDK_BUTTON_SECONDARY) + { +- pop_up_pathbar_context_menu (self, event, button_data->file); ++ current_dir = g_file_equal (button_data->path, priv->current_path); ++ if (current_dir) ++ { ++ gtk_popover_popup (priv->current_view_menu_popover); ++ } ++ else ++ { ++ gtk_popover_set_relative_to (priv->button_menu_popover, button); ++ pop_up_pathbar_context_menu (self, button_data->file); ++ } + return GDK_EVENT_STOP; + } + else if (event->button == GDK_BUTTON_MIDDLE && mask == 0) +@@ -1751,27 +1856,6 @@ button_event_cb (GtkWidget *button, + return GDK_EVENT_STOP; + } + } +- else if (event->type == GDK_BUTTON_RELEASE) +- { +- flags = 0; +- +- if (!GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (button), "handle-button-release"))) +- { +- return GDK_EVENT_PROPAGATE; +- } +- +- if (event->button == GDK_BUTTON_PRIMARY && mask == GDK_CONTROL_MASK) +- { +- flags = GTK_PLACES_OPEN_NEW_WINDOW; +- } +- +- if (flags != 0) +- { +- g_signal_emit (self, path_bar_signals[OPEN_LOCATION], 0, button_data->path, flags); +- } +- +- return GDK_EVENT_PROPAGATE; +- } + + return GDK_EVENT_PROPAGATE; + } +@@ -1880,9 +1964,14 @@ nautilus_path_bar_update_button_appearance (ButtonData *button_data) + } + + static void +-nautilus_path_bar_update_button_state (ButtonData *button_data, +- gboolean current_dir) ++nautilus_path_bar_update_button_state (NautilusPathBar *self, ++ ButtonData *button_data, ++ gboolean current_dir) + { ++ NautilusPathBarPrivate *priv; ++ ++ priv = nautilus_path_bar_get_instance_private (self); ++ + if (button_data->label != NULL) + { + gtk_label_set_label (GTK_LABEL (button_data->label), NULL); +@@ -1898,6 +1987,12 @@ nautilus_path_bar_update_button_state (ButtonData *button_data, + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button_data->button), current_dir); + button_data->ignore_changes = FALSE; + } ++ ++ gtk_widget_set_visible (button_data->disclosure_arrow, current_dir); ++ if (current_dir) ++ { ++ gtk_popover_set_relative_to (priv->current_view_menu_popover, button_data->button); ++ } + } + + static void +@@ -2096,13 +2191,17 @@ make_button_data (NautilusPathBar *self, + /* TODO update button type when xdg directories change */ + + button_data->image = gtk_image_new (); ++ button_data->disclosure_arrow = gtk_image_new_from_icon_name ("pan-down-symbolic", ++ GTK_ICON_SIZE_MENU); + + switch (button_data->type) + { + case ROOT_BUTTON: + { +- child = button_data->image; + button_data->label = NULL; ++ child = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); ++ gtk_box_pack_start (GTK_BOX (child), button_data->image, FALSE, FALSE, 0); ++ gtk_box_pack_start (GTK_BOX (child), button_data->disclosure_arrow, FALSE, FALSE, 0); + } + break; + +@@ -2115,10 +2214,13 @@ make_button_data (NautilusPathBar *self, + child = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); + gtk_box_pack_start (GTK_BOX (child), button_data->image, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (child), button_data->label, FALSE, FALSE, 0); ++ gtk_box_pack_start (GTK_BOX (child), button_data->disclosure_arrow, FALSE, FALSE, 0); + } + break; + } + ++ gtk_widget_set_no_show_all (button_data->disclosure_arrow, TRUE); ++ + if (button_data->label != NULL) + { + gtk_label_set_ellipsize (GTK_LABEL (button_data->label), PANGO_ELLIPSIZE_MIDDLE); +@@ -2152,11 +2254,10 @@ make_button_data (NautilusPathBar *self, + gtk_container_add (GTK_CONTAINER (button_data->button), child); + gtk_widget_show_all (button_data->button); + +- nautilus_path_bar_update_button_state (button_data, current_dir); ++ nautilus_path_bar_update_button_state (self, button_data, current_dir); + + g_signal_connect (button_data->button, "clicked", G_CALLBACK (button_clicked_cb), button_data); + g_signal_connect (button_data->button, "button-press-event", G_CALLBACK (button_event_cb), button_data); +- g_signal_connect (button_data->button, "button-release-event", G_CALLBACK (button_event_cb), button_data); + g_object_weak_ref (G_OBJECT (button_data->button), (GWeakNotify) button_data_free, button_data); + + nautilus_drag_slot_proxy_init (button_data->button, button_data->file, NULL); +@@ -2198,7 +2299,7 @@ nautilus_path_bar_check_parent_path (NautilusPathBar *self, + is_active = FALSE; + } + +- nautilus_path_bar_update_button_state (button_data, is_active); ++ nautilus_path_bar_update_button_state (self, button_data, is_active); + } + + if (current_button_data != NULL) +diff --git a/src/nautilus-pathbar.h b/src/nautilus-pathbar.h +index 8651b7bc2..cbe427cf7 100644 +--- a/src/nautilus-pathbar.h ++++ b/src/nautilus-pathbar.h +@@ -36,5 +36,9 @@ struct _NautilusPathBarClass + GtkPlacesOpenFlags flags); + }; + void nautilus_path_bar_set_path (NautilusPathBar *self, GFile *file); ++void nautilus_path_bar_set_extensions_background_menu (NautilusPathBar *self, ++ GMenu *menu); ++void nautilus_path_bar_set_templates_menu (NautilusPathBar *self, ++ GMenu *menu); + + #endif /* NAUTILUS_PATHBAR_H */ +diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c +index 26a978e7d..18e0421de 100644 +--- a/src/nautilus-toolbar.c ++++ b/src/nautilus-toolbar.c +@@ -1199,6 +1199,24 @@ nautilus_toolbar_set_show_location_entry (NautilusToolbar *self, + } + } + ++static void ++slot_on_extensions_background_menu_changed (NautilusToolbar *self, ++ GParamSpec *param, ++ NautilusWindowSlot *slot) ++{ ++ nautilus_path_bar_set_extensions_background_menu (NAUTILUS_PATH_BAR (self->path_bar), ++ nautilus_window_slot_get_extensions_background_menu (slot)); ++} ++ ++static void ++slot_on_templates_menu_changed (NautilusToolbar *self, ++ GParamSpec *param, ++ NautilusWindowSlot *slot) ++{ ++ nautilus_path_bar_set_templates_menu (NAUTILUS_PATH_BAR (self->path_bar), ++ nautilus_window_slot_get_templates_menu (slot)); ++} ++ + static gboolean + nautilus_toolbar_view_toggle_icon_transform_to (GBinding *binding, + const GValue *from_value, +@@ -1304,6 +1322,10 @@ nautilus_toolbar_set_active_slot (NautilusToolbar *toolbar, + on_slot_toolbar_menu_sections_changed (toolbar, NULL, slot); + g_signal_connect_swapped (slot, "notify::toolbar-menu-sections", + G_CALLBACK (on_slot_toolbar_menu_sections_changed), toolbar); ++ g_signal_connect_swapped (slot, "notify::extensions-background-menu", ++ G_CALLBACK (slot_on_extensions_background_menu_changed), toolbar); ++ g_signal_connect_swapped (slot, "notify::templates-menu", ++ G_CALLBACK (slot_on_templates_menu_changed), toolbar); + } + } + } +diff --git a/src/nautilus-view.c b/src/nautilus-view.c +index 7b3a3c973..a1c32f248 100644 +--- a/src/nautilus-view.c ++++ b/src/nautilus-view.c +@@ -72,6 +72,29 @@ nautilus_view_default_init (NautilusViewInterface *iface) + "The search query being performed on the view", + NAUTILUS_TYPE_QUERY, + G_PARAM_READWRITE)); ++ ++ /** ++ * NautilusView::extensions-background-menu: ++ * ++ * Menu for the background click of extensions ++ */ ++ g_object_interface_install_property (iface, ++ g_param_spec_object ("extensions-background-menu", ++ "Menu for the background click of extensions", ++ "Menu for the background click of extensions", ++ G_TYPE_MENU, ++ G_PARAM_READWRITE)); ++ /** ++ * NautilusView::templates-menu: ++ * ++ * Menu of templates ++ */ ++ g_object_interface_install_property (iface, ++ g_param_spec_object ("templates-menu", ++ "Menu of templates", ++ "Menu of templates", ++ G_TYPE_MENU, ++ G_PARAM_READWRITE)); + } + + /** +@@ -137,6 +160,42 @@ nautilus_view_get_toolbar_menu_sections (NautilusView *view) + return NAUTILUS_VIEW_GET_IFACE (view)->get_toolbar_menu_sections (view); + } + ++GMenu * ++nautilus_view_get_extensions_background_menu (NautilusView *view) ++{ ++ g_return_val_if_fail (NAUTILUS_VIEW_GET_IFACE (view)->get_extensions_background_menu, NULL); ++ ++ return NAUTILUS_VIEW_GET_IFACE (view)->get_extensions_background_menu (view); ++} ++ ++/* Protected */ ++void ++nautilus_view_set_extensions_background_menu (NautilusView *view, ++ GMenu *menu) ++{ ++ g_return_if_fail (NAUTILUS_VIEW_GET_IFACE (view)->set_extensions_background_menu); ++ ++ NAUTILUS_VIEW_GET_IFACE (view)->set_extensions_background_menu (view, menu); ++} ++ ++GMenu * ++nautilus_view_get_templates_menu (NautilusView *view) ++{ ++ g_return_val_if_fail (NAUTILUS_VIEW_GET_IFACE (view)->get_templates_menu, NULL); ++ ++ return NAUTILUS_VIEW_GET_IFACE (view)->get_templates_menu (view); ++} ++ ++/* Protected */ ++void ++nautilus_view_set_templates_menu (NautilusView *view, ++ GMenu *menu) ++{ ++ g_return_if_fail (NAUTILUS_VIEW_GET_IFACE (view)->set_templates_menu); ++ ++ NAUTILUS_VIEW_GET_IFACE (view)->set_templates_menu (view, menu); ++} ++ + /** + * nautilus_view_get_search_query: + * @view: a #NautilusView +diff --git a/src/nautilus-view.h b/src/nautilus-view.h +index dcd39e0ad..c3042bebd 100644 +--- a/src/nautilus-view.h ++++ b/src/nautilus-view.h +@@ -52,6 +52,20 @@ struct _NautilusViewInterface + */ + NautilusToolbarMenuSections * (*get_toolbar_menu_sections) (NautilusView *view); + ++ /* ++ * Returns the menu for the background click of extensions. ++ */ ++ GMenu * (*get_extensions_background_menu) (NautilusView *view); ++ ++ void (*set_extensions_background_menu) (NautilusView *view, ++ GMenu *menu); ++ /* ++ * Returns the menu for templates. ++ */ ++ GMenu * (*get_templates_menu) (NautilusView *view); ++ ++ void (*set_templates_menu) (NautilusView *view, ++ GMenu *menu); + /* Current location of the view */ + GFile* (*get_location) (NautilusView *view); + void (*set_location) (NautilusView *view, +@@ -99,6 +113,13 @@ gboolean nautilus_view_is_loading (Nautilus + + gboolean nautilus_view_is_searching (NautilusView *view); + ++void nautilus_view_set_templates_menu (NautilusView *view, ++ GMenu *menu); ++GMenu* nautilus_view_get_templates_menu (NautilusView *view); ++void nautilus_view_set_extensions_background_menu (NautilusView *view, ++ GMenu *menu); ++GMenu* nautilus_view_get_extensions_background_menu (NautilusView *view); ++ + G_END_DECLS + + #endif /* NAUTILUS_VIEW_H */ +diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c +index c3260aeb0..ea2197849 100644 +--- a/src/nautilus-window-slot.c ++++ b/src/nautilus-window-slot.c +@@ -60,6 +60,8 @@ enum + PROP_WINDOW, + PROP_ICON, + PROP_TOOLBAR_MENU_SECTIONS, ++ PROP_EXTENSIONS_BACKGROUND_MENU, ++ PROP_TEMPLATES_MENU, + PROP_LOADING, + PROP_LOCATION, + NUM_PROPERTIES +@@ -124,6 +126,14 @@ typedef struct + GError *mount_error; + gboolean tried_mount; + gint view_mode_before_search; ++ ++ /* Menus */ ++ GMenu *extensions_background_menu; ++ GMenu *templates_menu; ++ ++ /* View bindings */ ++ GBinding *extensions_background_menu_binding; ++ GBinding *templates_menu_binding; + } NautilusWindowSlotPrivate; + + G_DEFINE_TYPE_WITH_PRIVATE (NautilusWindowSlot, nautilus_window_slot, GTK_TYPE_BOX); +@@ -154,6 +164,12 @@ static void nautilus_window_slot_set_location (NautilusWindowSlot *self, + static void trash_state_changed_cb (NautilusTrashMonitor *monitor, + gboolean is_empty, + gpointer user_data); ++static void real_set_extensions_background_menu (NautilusWindowSlot *self, ++ GMenu *menu); ++static GMenu* real_get_extensions_background_menu (NautilusWindowSlot *self); ++static void real_set_templates_menu (NautilusWindowSlot *self, ++ GMenu *menu); ++static GMenu* real_get_templates_menu (NautilusWindowSlot *self); + + void + free_navigation_state (gpointer data) +@@ -727,6 +743,26 @@ nautilus_window_slot_add_extra_location_widget (NautilusWindowSlot *self, + gtk_widget_show (priv->extra_location_widgets); + } + ++static void ++real_set_extensions_background_menu (NautilusWindowSlot *self, ++ GMenu *menu) ++{ ++ NautilusWindowSlotPrivate *priv; ++ priv = nautilus_window_slot_get_instance_private (self); ++ ++ priv->extensions_background_menu = menu != NULL ? g_object_ref (menu) : NULL; ++} ++ ++static void ++real_set_templates_menu (NautilusWindowSlot *self, ++ GMenu *menu) ++{ ++ NautilusWindowSlotPrivate *priv; ++ priv = nautilus_window_slot_get_instance_private (self); ++ ++ priv->templates_menu = menu != NULL ? g_object_ref (menu) : NULL; ++} ++ + static void + nautilus_window_slot_set_property (GObject *object, + guint property_id, +@@ -755,6 +791,18 @@ nautilus_window_slot_set_property (GObject *object, + } + break; + ++ case PROP_EXTENSIONS_BACKGROUND_MENU: ++ { ++ real_set_extensions_background_menu (self, g_value_get_object (value)); ++ } ++ break; ++ ++ case PROP_TEMPLATES_MENU: ++ { ++ real_set_templates_menu (self, g_value_get_object (value)); ++ } ++ break; ++ + default: + { + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +@@ -763,6 +811,44 @@ nautilus_window_slot_set_property (GObject *object, + } + } + ++static GMenu* ++real_get_extensions_background_menu (NautilusWindowSlot *self) ++{ ++ NautilusWindowSlotPrivate *priv; ++ ++ priv = nautilus_window_slot_get_instance_private (self); ++ return priv->extensions_background_menu; ++} ++ ++GMenu* ++nautilus_window_slot_get_extensions_background_menu (NautilusWindowSlot *self) ++{ ++ GMenu *menu = NULL; ++ ++ g_object_get (self, "extensions-background-menu", &menu, NULL); ++ ++ return menu; ++} ++ ++static GMenu* ++real_get_templates_menu (NautilusWindowSlot *self) ++{ ++ NautilusWindowSlotPrivate *priv; ++ ++ priv = nautilus_window_slot_get_instance_private (self); ++ return priv->templates_menu; ++} ++ ++GMenu* ++nautilus_window_slot_get_templates_menu (NautilusWindowSlot *self) ++{ ++ GMenu *menu = NULL; ++ ++ g_object_get (self, "templates-menu", &menu, NULL); ++ ++ return menu; ++} ++ + static void + nautilus_window_slot_get_property (GObject *object, + guint property_id, +@@ -796,7 +882,19 @@ nautilus_window_slot_get_property (GObject *object, + + case PROP_TOOLBAR_MENU_SECTIONS: + { +- g_value_set_pointer (value, nautilus_window_slot_get_toolbar_menu_sections (self)); ++ g_value_set_object (value, nautilus_window_slot_get_toolbar_menu_sections (self)); ++ } ++ break; ++ ++ case PROP_EXTENSIONS_BACKGROUND_MENU: ++ { ++ g_value_set_object (value, real_get_extensions_background_menu (self)); ++ } ++ break; ++ ++ case PROP_TEMPLATES_MENU: ++ { ++ g_value_set_object (value, real_get_templates_menu (self)); + } + break; + +@@ -2717,6 +2815,9 @@ nautilus_window_slot_switch_new_content_view (NautilusWindowSlot *self) + + if (priv->content_view != NULL) + { ++ g_binding_unbind (priv->extensions_background_menu_binding); ++ g_binding_unbind (priv->templates_menu_binding); ++ + widget = GTK_WIDGET (priv->content_view); + gtk_widget_destroy (widget); + g_object_unref (priv->content_view); +@@ -2733,8 +2834,17 @@ nautilus_window_slot_switch_new_content_view (NautilusWindowSlot *self) + gtk_widget_set_vexpand (widget, TRUE); + gtk_widget_show (widget); + ++ priv->extensions_background_menu_binding = g_object_bind_property (priv->content_view, "extensions-background-menu", ++ self, "extensions-background-menu", ++ G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); ++ priv->templates_menu_binding = g_object_bind_property (priv->content_view, "templates-menu", ++ self, "templates-menu", ++ G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); ++ + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ICON]); + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TOOLBAR_MENU_SECTIONS]); ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_EXTENSIONS_BACKGROUND_MENU]); ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TEMPLATES_MENU]); + } + + done: +@@ -2786,6 +2896,9 @@ nautilus_window_slot_dispose (GObject *object) + + nautilus_window_slot_remove_extra_location_widgets (self); + ++ g_clear_pointer (&priv->extensions_background_menu_binding, g_binding_unbind); ++ g_clear_pointer (&priv->templates_menu_binding, g_binding_unbind); ++ + if (priv->content_view) + { + gtk_widget_destroy (GTK_WIDGET (priv->content_view)); +@@ -2924,6 +3037,20 @@ nautilus_window_slot_class_init (NautilusWindowSlotClass *klass) + "The menu sections to add to the toolbar menu for this slot", + G_PARAM_READABLE); + ++ properties[PROP_EXTENSIONS_BACKGROUND_MENU] = ++ g_param_spec_object ("extensions-background-menu", ++ "Background menu of extensions", ++ "Proxy property from the view for the background menu for extensions", ++ G_TYPE_MENU, ++ G_PARAM_READWRITE); ++ ++ properties[PROP_TEMPLATES_MENU] = ++ g_param_spec_object ("templates-menu", ++ "Templates menu", ++ "Proxy property from the view for the templates menu", ++ G_TYPE_MENU, ++ G_PARAM_READWRITE); ++ + properties[PROP_LOCATION] = + g_param_spec_object ("location", + "Current location visible on the slot", +diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h +index 573357d9b..9be645aa4 100644 +--- a/src/nautilus-window-slot.h ++++ b/src/nautilus-window-slot.h +@@ -105,6 +105,10 @@ GIcon* nautilus_window_slot_get_icon (NautilusWindowSlot * + + NautilusToolbarMenuSections * nautilus_window_slot_get_toolbar_menu_sections (NautilusWindowSlot *slot); + ++GMenu* nautilus_window_slot_get_templates_menu (NautilusWindowSlot *self); ++ ++GMenu* nautilus_window_slot_get_extensions_background_menu (NautilusWindowSlot *self); ++ + gboolean nautilus_window_slot_get_active (NautilusWindowSlot *slot); + + void nautilus_window_slot_set_active (NautilusWindowSlot *slot, +diff --git a/src/resources/ui/nautilus-pathbar-context-menu.ui b/src/resources/ui/nautilus-pathbar-context-menu.ui +index 11b68857d..403cf71f6 100644 +--- a/src/resources/ui/nautilus-pathbar-context-menu.ui ++++ b/src/resources/ui/nautilus-pathbar-context-menu.ui +@@ -1,23 +1,54 @@ + ++ + +- ++ ++ ++ New _Folder ++ view.new-folder ++ ++ ++ templates-submenu ++ New _Document ++ view.new-document ++ action-disabled ++ ++ ++ Add to _Bookmarks ++ view.bookmark ++ +
+ +- Open In New _Tab +- pathbar.open-item-new-tab +- action-disabled ++ _Paste ++ view.paste + + +- Open In New _Window +- pathbar.open-item-new-window +- action-disabled ++ Select _All ++ view.select-all + +
++
++ extensions ++
+
+ + P_roperties +- pathbar.properties ++ view.current-directory-properties ++ action-disabled + +
+
++ ++ ++ Open in New _Window ++ pathbar.open-item-new-window ++ ++ ++ Open in New _Tab ++ pathbar.open-item-new-tab ++ ++ ++ _Properties ++ pathbar.properties ++ ++ + +-- +2.36.0 + diff --git a/SOURCES/Revert-application-add-common-startup-code.patch b/SOURCES/Revert-application-add-common-startup-code.patch new file mode 100644 index 0000000..a7751e5 --- /dev/null +++ b/SOURCES/Revert-application-add-common-startup-code.patch @@ -0,0 +1,93 @@ +From 5b40335c34a3b920348633274a03d073d1338a09 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Mon, 9 Jan 2023 13:12:17 +0100 +Subject: [PATCH] Revert "application: add common startup code" + +This reverts commit 23ae53870a39afe43548111b6432db39511a6e97. This +change was needed for split of desktop-related functionality, but it +seems no more needed to me. Let's revert those changes to make the +code a bit easier as a preparation for the next commits. +--- + src/nautilus-application.c | 31 ++++++------------------------- + src/nautilus-application.h | 1 - + 2 files changed, 6 insertions(+), 26 deletions(-) + +diff --git a/src/nautilus-application.c b/src/nautilus-application.c +index 22a01ad..829faa3 100644 +--- a/src/nautilus-application.c ++++ b/src/nautilus-application.c +@@ -1250,9 +1250,10 @@ on_application_shutdown (GApplication *application, + nautilus_icon_info_clear_caches (); + } + +-void +-nautilus_application_startup_common (NautilusApplication *self) ++static void ++nautilus_application_startup (GApplication *app) + { ++ NautilusApplication *self = NAUTILUS_APPLICATION (app); + NautilusApplicationPrivate *priv; + + nautilus_profile_start (NULL); +@@ -1269,6 +1270,9 @@ nautilus_application_startup_common (NautilusApplication *self) + + setup_theme_extensions (); + ++ /* create DBus manager */ ++ priv->fdb_manager = nautilus_freedesktop_dbus_new (); ++ + /* initialize preferences and create the global GSettings objects */ + nautilus_global_preferences_init (); + +@@ -1295,22 +1299,6 @@ nautilus_application_startup_common (NautilusApplication *self) + g_signal_connect (self, "shutdown", G_CALLBACK (on_application_shutdown), NULL); + } + +-static void +-nautilus_application_startup (GApplication *app) +-{ +- NautilusApplication *self = NAUTILUS_APPLICATION (app); +- NautilusApplicationPrivate *priv; +- +- nautilus_profile_start (NULL); +- priv = nautilus_application_get_instance_private (self); +- +- /* create DBus manager */ +- priv->fdb_manager = nautilus_freedesktop_dbus_new (); +- nautilus_application_startup_common (self); +- +- nautilus_profile_end (NULL); +-} +- + static gboolean + nautilus_application_dbus_register (GApplication *app, + GDBusConnection *connection, +@@ -1374,13 +1362,6 @@ update_dbus_opened_locations (NautilusApplication *self) + + priv = nautilus_application_get_instance_private (self); + +- /* Children of nautilus application could not handle the dbus, so don't +- * do anything in that case */ +- if (!priv->fdb_manager) +- { +- return; +- } +- + for (l = priv->windows; l != NULL; l = l->next) + { + window = l->data; +diff --git a/src/nautilus-application.h b/src/nautilus-application.h +index 197a276..5f15f06 100644 +--- a/src/nautilus-application.h ++++ b/src/nautilus-application.h +@@ -88,7 +88,6 @@ GtkWidget * nautilus_application_connect_server (NautilusApplication *applicatio + void nautilus_application_search (NautilusApplication *application, + const gchar *uri, + const gchar *text); +-void nautilus_application_startup_common (NautilusApplication *application); + G_END_DECLS + + #endif /* __NAUTILUS_APPLICATION_H__ */ +-- +2.38.1 + diff --git a/SOURCES/add-desktop-icons-rename.patch b/SOURCES/add-desktop-icons-rename.patch new file mode 100644 index 0000000..9ecfd91 --- /dev/null +++ b/SOURCES/add-desktop-icons-rename.patch @@ -0,0 +1,90 @@ +From bac4bd595c518983571b0fb41fcf5586f27544eb Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Mon, 19 Nov 2018 08:55:22 +0000 +Subject: [PATCH] dbus: Implement rename file + +So desktop icons extensions can use it. + + +(cherry picked from commit 42c5ce657e2b24ddf19932e9e3284a045d60ff51) +--- + data/dbus-interfaces.xml | 4 ++++ + src/nautilus-dbus-manager.c | 33 +++++++++++++++++++++++++++++++++ + 2 files changed, 37 insertions(+) + +diff --git a/data/dbus-interfaces.xml b/data/dbus-interfaces.xml +index 298871bc4..1827f92ab 100644 +--- a/data/dbus-interfaces.xml ++++ b/data/dbus-interfaces.xml +@@ -39,6 +39,10 @@ + + + ++ ++ ++ ++ + + + +diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c +index 3257c4bd4..43f27e10a 100644 +--- a/src/nautilus-dbus-manager.c ++++ b/src/nautilus-dbus-manager.c +@@ -27,6 +27,7 @@ + + #include "nautilus-file-operations.h" + #include "nautilus-file-undo-manager.h" ++#include "nautilus-file.h" + + #define DEBUG_FLAG NAUTILUS_DEBUG_DBUS + #include "nautilus-debug.h" +@@ -230,6 +231,34 @@ handle_trash_files (NautilusDBusFileOperations *object, + return TRUE; /* invocation was handled */ + } + ++static void ++rename_file_on_finished (NautilusFile *file, ++ GFile *result_location, ++ GError *error, ++ gpointer callback_data) ++{ ++ g_application_release (g_application_get_default ()); ++} ++ ++static gboolean ++handle_rename_file (NautilusDBusFileOperations *object, ++ GDBusMethodInvocation *invocation, ++ const gchar *uri, ++ const gchar *new_name) ++{ ++ NautilusFile *file = NULL; ++ ++ file = nautilus_file_get_by_uri (uri); ++ ++ g_application_hold (g_application_get_default ()); ++ nautilus_file_rename (file, new_name, ++ rename_file_on_finished, NULL); ++ ++ nautilus_dbus_file_operations_complete_rename_file (object, invocation); ++ ++ return TRUE; /* invocation was handled */ ++} ++ + + static void + undo_manager_changed (NautilusDBusManager *self) +@@ -266,6 +295,10 @@ nautilus_dbus_manager_init (NautilusDBusManager *self) + "handle-create-folder", + G_CALLBACK (handle_create_folder), + self); ++ g_signal_connect (self->file_operations, ++ "handle-rename-file", ++ G_CALLBACK (handle_rename_file), ++ self); + g_signal_connect (self->file_operations, + "handle-undo", + G_CALLBACK (handle_undo), +-- +2.18.1 + diff --git a/SOURCES/appdata-Use-Files-instead-of-Nautilus.patch b/SOURCES/appdata-Use-Files-instead-of-Nautilus.patch new file mode 100644 index 0000000..66d7284 --- /dev/null +++ b/SOURCES/appdata-Use-Files-instead-of-Nautilus.patch @@ -0,0 +1,19 @@ +diff --git a/data/org.gnome.Nautilus.appdata.xml.in.in b/data/org.gnome.Nautilus.appdata.xml.in.in +index 1e3986323..35e54cb14 100644 +--- a/data/org.gnome.Nautilus.appdata.xml.in.in ++++ b/data/org.gnome.Nautilus.appdata.xml.in.in +@@ -2,11 +2,11 @@ + @appid@.desktop + CC0-1.0 + GPL-2.0+ +- Nautilus ++ Files + Access and organize files + +

+- Nautilus, also known as Files, is the default file manager of the GNOME desktop. ++ Files, also known as Nautilus, is the default file manager of the GNOME desktop. + It provides a simple and integrated way of managing your files and browsing your file system. +

+

+ diff --git a/SOURCES/application-Export-FileManager1-iface-from-dbus_regi.patch b/SOURCES/application-Export-FileManager1-iface-from-dbus_regi.patch new file mode 100644 index 0000000..7cb136b --- /dev/null +++ b/SOURCES/application-Export-FileManager1-iface-from-dbus_regi.patch @@ -0,0 +1,304 @@ +From 1fa3039c67671fe53416b2575f3c305029ef4854 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Wed, 11 Jan 2023 09:55:41 +0100 +Subject: [PATCH] application: Export FileManager1 iface from dbus_register + vfunc + +The `org/freedesktop/FileManager1` interface is not currently exported +from the `dbus_register` vfunc. This causes issues for projects (e.g. +desktop-icons extension) that want to use all the Nautilus intefaces +over the `org.gnome.Nautilus` connection. Let's use the already established +connection and export the `FileManager1` interface from the `dbus_register` +vfunc. + +https://bugzilla.redhat.com/show_bug.cgi?id=2150894 +--- + src/nautilus-application.c | 17 ++-- + src/nautilus-freedesktop-dbus.c | 150 +++++++++++++++++++++++++------- + src/nautilus-freedesktop-dbus.h | 6 +- + 3 files changed, 136 insertions(+), 37 deletions(-) + +diff --git a/src/nautilus-application.c b/src/nautilus-application.c +index 829faa3..3bb3da1 100644 +--- a/src/nautilus-application.c ++++ b/src/nautilus-application.c +@@ -608,8 +608,6 @@ nautilus_application_finalize (GObject *object) + g_clear_object (&priv->progress_handler); + g_clear_object (&priv->bookmark_list); + +- g_clear_object (&priv->fdb_manager); +- + g_list_free (priv->windows); + + g_hash_table_destroy (priv->notifications); +@@ -1270,9 +1268,6 @@ nautilus_application_startup (GApplication *app) + + setup_theme_extensions (); + +- /* create DBus manager */ +- priv->fdb_manager = nautilus_freedesktop_dbus_new (); +- + /* initialize preferences and create the global GSettings objects */ + nautilus_global_preferences_init (); + +@@ -1315,6 +1310,12 @@ nautilus_application_dbus_register (GApplication *app, + return FALSE; + } + ++ priv->fdb_manager = nautilus_freedesktop_dbus_new (connection); ++ if (!nautilus_freedesktop_dbus_register (priv->fdb_manager, error)) ++ { ++ return FALSE; ++ } ++ + priv->search_provider = nautilus_shell_search_provider_new (); + if (!nautilus_shell_search_provider_register (priv->search_provider, connection, error)) + { +@@ -1339,6 +1340,12 @@ nautilus_application_dbus_unregister (GApplication *app, + g_clear_object (&priv->dbus_manager); + } + ++ if (priv->fdb_manager) ++ { ++ nautilus_freedesktop_dbus_unregister (priv->fdb_manager); ++ g_clear_object (&priv->fdb_manager); ++ } ++ + if (priv->search_provider) + { + nautilus_shell_search_provider_unregister (priv->search_provider); +diff --git a/src/nautilus-freedesktop-dbus.c b/src/nautilus-freedesktop-dbus.c +index b888099..d013e20 100644 +--- a/src/nautilus-freedesktop-dbus.c ++++ b/src/nautilus-freedesktop-dbus.c +@@ -41,6 +41,14 @@ struct _NautilusFreedesktopDBus + + /* Our DBus implementation skeleton */ + NautilusFreedesktopFileManager1 *skeleton; ++ ++ GDBusConnection *connection; ++}; ++ ++enum ++{ ++ PROP_0, ++ PROP_CONNECTION, + }; + + struct _NautilusFreedesktopDBusClass +@@ -149,27 +157,6 @@ skeleton_handle_show_item_properties_cb (NautilusFreedesktopFileManager1 *object + return TRUE; + } + +-static void +-bus_acquired_cb (GDBusConnection *conn, +- const gchar *name, +- gpointer user_data) +-{ +- NautilusFreedesktopDBus *fdb = user_data; +- +- DEBUG ("Bus acquired at %s", name); +- +- fdb->skeleton = nautilus_freedesktop_file_manager1_skeleton_new (); +- +- g_signal_connect (fdb->skeleton, "handle-show-items", +- G_CALLBACK (skeleton_handle_show_items_cb), fdb); +- g_signal_connect (fdb->skeleton, "handle-show-folders", +- G_CALLBACK (skeleton_handle_show_folders_cb), fdb); +- g_signal_connect (fdb->skeleton, "handle-show-item-properties", +- G_CALLBACK (skeleton_handle_show_item_properties_cb), fdb); +- +- g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (fdb->skeleton), conn, NAUTILUS_FDO_DBUS_PATH, NULL); +-} +- + static void + name_acquired_cb (GDBusConnection *connection, + const gchar *name, +@@ -186,6 +173,20 @@ name_lost_cb (GDBusConnection *connection, + DEBUG ("Lost (or failed to acquire) the name %s on the session message bus\n", name); + } + ++static void ++nautilus_freedesktop_dbus_constructed (GObject *object) ++{ ++ NautilusFreedesktopDBus *fdb = NAUTILUS_FREEDESKTOP_DBUS (object); ++ ++ fdb->owner_id = g_bus_own_name_on_connection (fdb->connection, ++ NAUTILUS_FDO_DBUS_NAME, ++ G_BUS_NAME_OWNER_FLAGS_NONE, ++ name_acquired_cb, ++ name_lost_cb, ++ fdb, ++ NULL); ++} ++ + static void + nautilus_freedesktop_dbus_dispose (GObject *object) + { +@@ -199,33 +200,87 @@ nautilus_freedesktop_dbus_dispose (GObject *object) + + if (fdb->skeleton != NULL) + { +- g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (fdb->skeleton)); + g_object_unref (fdb->skeleton); + fdb->skeleton = NULL; + } + ++ g_clear_object (&fdb->connection); ++ + G_OBJECT_CLASS (nautilus_freedesktop_dbus_parent_class)->dispose (object); + } + ++static void ++nautilus_freedesktop_dbus_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ NautilusFreedesktopDBus *fdb = NAUTILUS_FREEDESKTOP_DBUS (object); ++ ++ switch (prop_id) ++ { ++ case PROP_CONNECTION: ++ { ++ g_set_object (&fdb->connection, g_value_get_object (value)); ++ } ++ break; ++ ++ default: ++ { ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++ break; ++ } ++} ++ ++static void ++nautilus_freedesktop_dbus_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ NautilusFreedesktopDBus *fdb = NAUTILUS_FREEDESKTOP_DBUS (object); ++ ++ switch (prop_id) ++ { ++ case PROP_CONNECTION: ++ { ++ g_value_set_object (value, fdb->connection); ++ } ++ break; ++ ++ default: ++ { ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++ break; ++ } ++} ++ + static void + nautilus_freedesktop_dbus_class_init (NautilusFreedesktopDBusClass *klass) + { + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = nautilus_freedesktop_dbus_dispose; ++ object_class->constructed = nautilus_freedesktop_dbus_constructed; ++ object_class->get_property = nautilus_freedesktop_dbus_get_property; ++ object_class->set_property = nautilus_freedesktop_dbus_set_property; ++ ++ g_object_class_install_property (object_class, ++ PROP_CONNECTION, ++ g_param_spec_object ("connection", ++ "Connection", ++ "GDBus connection property", ++ G_TYPE_DBUS_CONNECTION, ++ G_PARAM_CONSTRUCT_ONLY | ++ G_PARAM_READWRITE)); + } + + static void + nautilus_freedesktop_dbus_init (NautilusFreedesktopDBus *fdb) + { +- fdb->owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, +- NAUTILUS_FDO_DBUS_NAME, +- G_BUS_NAME_OWNER_FLAGS_NONE, +- bus_acquired_cb, +- name_acquired_cb, +- name_lost_cb, +- fdb, +- NULL); ++ fdb->skeleton = nautilus_freedesktop_file_manager1_skeleton_new (); + } + + void +@@ -239,8 +294,41 @@ nautilus_freedesktop_dbus_set_open_locations (NautilusFreedesktopDBus *fdb, + + /* Tries to own the org.freedesktop.FileManager1 service name */ + NautilusFreedesktopDBus * +-nautilus_freedesktop_dbus_new (void) ++nautilus_freedesktop_dbus_new (GDBusConnection *connection) + { + return g_object_new (nautilus_freedesktop_dbus_get_type (), ++ "connection", connection, + NULL); + } ++ ++gboolean ++nautilus_freedesktop_dbus_register (NautilusFreedesktopDBus *fdb, ++ GError **error) ++{ ++ gboolean success; ++ ++ success = g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (fdb->skeleton), ++ fdb->connection, ++ NAUTILUS_FDO_DBUS_PATH, ++ error); ++ ++ if (success) ++ { ++ g_signal_connect (fdb->skeleton, "handle-show-items", ++ G_CALLBACK (skeleton_handle_show_items_cb), fdb); ++ g_signal_connect (fdb->skeleton, "handle-show-folders", ++ G_CALLBACK (skeleton_handle_show_folders_cb), fdb); ++ g_signal_connect (fdb->skeleton, "handle-show-item-properties", ++ G_CALLBACK (skeleton_handle_show_item_properties_cb), fdb); ++ } ++ ++ return success; ++} ++ ++void ++nautilus_freedesktop_dbus_unregister (NautilusFreedesktopDBus *fdb) ++{ ++ g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (fdb->skeleton)); ++ ++ g_signal_handlers_disconnect_by_data (fdb->skeleton, fdb); ++} +diff --git a/src/nautilus-freedesktop-dbus.h b/src/nautilus-freedesktop-dbus.h +index 410c420..ee2ced5 100644 +--- a/src/nautilus-freedesktop-dbus.h ++++ b/src/nautilus-freedesktop-dbus.h +@@ -23,6 +23,7 @@ + #define __NAUTILUS_FREEDESKTOP_DBUS_H__ + + #include ++#include + + #define NAUTILUS_FDO_DBUS_IFACE "org.freedesktop.FileManager1" + #define NAUTILUS_FDO_DBUS_NAME "org.freedesktop.FileManager1" +@@ -44,7 +45,10 @@ typedef struct _NautilusFreedesktopDBus NautilusFreedesktopDBus; + typedef struct _NautilusFreedesktopDBusClass NautilusFreedesktopDBusClass; + + GType nautilus_freedesktop_dbus_get_type (void); +-NautilusFreedesktopDBus * nautilus_freedesktop_dbus_new (void); ++NautilusFreedesktopDBus * nautilus_freedesktop_dbus_new (GDBusConnection *connection); ++ ++gboolean nautilus_freedesktop_dbus_register (NautilusFreedesktopDBus *fdb, GError **error); ++void nautilus_freedesktop_dbus_unregister (NautilusFreedesktopDBus *fdb); + + void nautilus_freedesktop_dbus_set_open_locations (NautilusFreedesktopDBus *fdb, const gchar **locations); + +-- +2.38.1 + diff --git a/SOURCES/data-Fix-caption-capitalisation-in-appdata-file.patch b/SOURCES/data-Fix-caption-capitalisation-in-appdata-file.patch new file mode 100644 index 0000000..fdbd117 --- /dev/null +++ b/SOURCES/data-Fix-caption-capitalisation-in-appdata-file.patch @@ -0,0 +1,44 @@ +From 51b543cd5106a8b929b336bc6779eddd4d2ac780 Mon Sep 17 00:00:00 2001 +From: Philip Withnall +Date: Thu, 11 Apr 2019 12:36:21 +0100 +Subject: [PATCH] data: Fix caption capitalisation in appdata file + +Make the capitalisation of the image captions match the translatable +titles of the dialogues in the images, so that translations can be +reused. + +Signed-off-by: Philip Withnall +--- + data/org.gnome.Nautilus.appdata.xml.in.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/data/org.gnome.Nautilus.appdata.xml.in.in b/data/org.gnome.Nautilus.appdata.xml.in.in +index cb20fa05f..cfc27e533 100644 +--- a/data/org.gnome.Nautilus.appdata.xml.in.in ++++ b/data/org.gnome.Nautilus.appdata.xml.in.in +@@ -28,11 +28,11 @@ + + + https://static.gnome.org/appdata/nautilus/nautilus-201901141.png +- Tile view ++ Tile View + + + https://static.gnome.org/appdata/nautilus/nautilus-201901142.png +- List view ++ List View + + + https://static.gnome.org/appdata/nautilus/nautilus-201901143.png +@@ -40,7 +40,7 @@ + + + https://static.gnome.org/appdata/nautilus/nautilus-201901144.png +- Other locations ++ Other Locations + + + +-- +2.21.0 + diff --git a/SOURCES/docs-Add-nautilus-autorun-software-man-page.patch b/SOURCES/docs-Add-nautilus-autorun-software-man-page.patch new file mode 100644 index 0000000..a054821 --- /dev/null +++ b/SOURCES/docs-Add-nautilus-autorun-software-man-page.patch @@ -0,0 +1,61 @@ +From 6dd492663cbd3652ebc03d06898f74bacbf87683 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Wed, 3 Jul 2019 11:43:31 +0200 +Subject: [PATCH] docs: Add nautilus-autorun-software man page + +nautilus-autorun-software is the default "x-content/unix-software" +handler for GNOME desktop. So it is not just internal tool and thus +it should have a man page. Let's add a simple man page for it. + +It resolves the following downstream bug: +https://bugzilla.redhat.com/show_bug.cgi?id=1725766 +--- + docs/meson.build | 1 + + docs/nautilus-autorun-software.1 | 26 ++++++++++++++++++++++++++ + 2 files changed, 27 insertions(+) + create mode 100644 docs/nautilus-autorun-software.1 + +diff --git a/docs/meson.build b/docs/meson.build +index b039cb631..a54574f3c 100644 +--- a/docs/meson.build ++++ b/docs/meson.build +@@ -1,3 +1,4 @@ + install_man('nautilus.1') ++install_man('nautilus-autorun-software.1') + + subdir('reference') +diff --git a/docs/nautilus-autorun-software.1 b/docs/nautilus-autorun-software.1 +new file mode 100644 +index 000000000..9ecbd4adb +--- /dev/null ++++ b/docs/nautilus-autorun-software.1 +@@ -0,0 +1,26 @@ ++.TH nautilus-autorun-software 1 "3 July 2019" ++ ++.SH NAME ++Run Software \- helper tool ++ ++.SH SYNOPSIS ++.B nautilus-autorun-software ++.RI "" "mount-uri" ++.br ++ ++.SH DESCRIPTION ++.B nautilus-autorun-software ++is a helper tool for the GNOME desktop to start software from media with ++Autostart files. ++.br ++ ++It is the default "x-content/unix-software" handler for the GNOME desktop. ++.br ++ ++.SH SEE ALSO ++Autostart files are described at ++https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html ++ ++.SH BUGS ++Bug reports can be found and filed at ++https://gitlab.gnome.org/GNOME/nautilus/issues +-- +2.21.0 + diff --git a/SOURCES/file-operations-Honor-umask-when-creating-new-files.patch b/SOURCES/file-operations-Honor-umask-when-creating-new-files.patch new file mode 100644 index 0000000..2a2c6ea --- /dev/null +++ b/SOURCES/file-operations-Honor-umask-when-creating-new-files.patch @@ -0,0 +1,35 @@ +From ee035fe0b4257d335687c038bf8b41a64d452d7f Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Mon, 18 Nov 2019 11:34:10 +0100 +Subject: [PATCH] file-operations: Honor umask when creating new files + +File creation mask should be honored when creating new files from +templates as it is when creating new folders, or dragging raw data. But +it is not because G_FILE_COPY_NONE flag is specified when creating new +files from templates. Let's use G_FILE_COPY_TARGET_DEFAULT_PERMS flag +to ensure that file creation mask is honored in this case as well. + +Just note that this behavior is not wanted when copying in general +(although it is also honored by "cp" cmd in this case) as it might have +some unexpected consequences as discussed on: +https://bugzilla.gnome.org/show_bug.cgi?id=167102 +--- + src/nautilus-file-operations.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c +index acf65f3cf..a90706e2e 100644 +--- a/src/nautilus-file-operations.c ++++ b/src/nautilus-file-operations.c +@@ -7361,7 +7361,7 @@ retry: + { + res = g_file_copy (job->src, + dest, +- G_FILE_COPY_NONE, ++ G_FILE_COPY_TARGET_DEFAULT_PERMS, + common->cancellable, + NULL, NULL, + &error); +-- +2.26.0 + diff --git a/SOURCES/files-view-Add-menu-item-to-copy-current-path.patch b/SOURCES/files-view-Add-menu-item-to-copy-current-path.patch new file mode 100644 index 0000000..0cd5d5a --- /dev/null +++ b/SOURCES/files-view-Add-menu-item-to-copy-current-path.patch @@ -0,0 +1,77 @@ +diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c +index 08107a64e..d808b04ff 100644 +--- a/src/nautilus-files-view.c ++++ b/src/nautilus-files-view.c +@@ -6078,6 +6078,33 @@ action_cut (GSimpleAction *action, + nautilus_file_list_free (selection); + } + ++static void ++action_copy_current_location (GSimpleAction *action, ++ GVariant *state, ++ gpointer user_data) ++{ ++ NautilusFilesView *view; ++ GtkClipboard *clipboard; ++ GFile *file; ++ gchar *path; ++ NautilusFilesViewPrivate *priv; ++ ++ view = NAUTILUS_FILES_VIEW (user_data); ++ priv = nautilus_files_view_get_instance_private (view); ++ ++ if (priv->directory_as_file != NULL) ++ { ++ file = nautilus_file_get_location (priv->directory_as_file); ++ ++ clipboard = nautilus_clipboard_get (GTK_WIDGET (view)); ++ path = g_file_get_parse_name (file); ++ gtk_clipboard_set_text (clipboard, path, -1); ++ ++ g_object_unref (file); ++ g_free (path); ++ } ++} ++ + static void + action_create_links_in_place (GSimpleAction *action, + GVariant *state, +@@ -6958,6 +6985,7 @@ const GActionEntry view_entries[] = + { "new-folder", action_new_folder }, + { "select-all", action_select_all }, + { "paste", action_paste_files }, ++ { "copy-current-location", action_copy_current_location }, + { "create-link", action_create_links }, + { "new-document" }, + /* Selection menu */ +@@ -7590,6 +7618,10 @@ real_update_actions_state (NautilusFilesView *view) + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), + can_move_files && !selection_contains_recent && + !selection_contains_starred); ++ action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), ++ "copy-current-location"); ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action), ++ !selection_contains_search); + + /* Drive menu */ + show_mount = (selection != NULL); +diff --git a/src/resources/ui/nautilus-pathbar-context-menu.ui b/src/resources/ui/nautilus-pathbar-context-menu.ui +index 403cf71f6..4d32c1e8e 100644 +--- a/src/resources/ui/nautilus-pathbar-context-menu.ui ++++ b/src/resources/ui/nautilus-pathbar-context-menu.ui +@@ -16,6 +16,12 @@ + Add to _Bookmarks + view.bookmark + ++

++ ++ _Copy Location ++ view.copy-current-location ++ ++
+
+ + _Paste +-- +2.36.1 + diff --git a/SOURCES/files-view-Backport-translations.patch b/SOURCES/files-view-Backport-translations.patch new file mode 100644 index 0000000..cf6e7b0 --- /dev/null +++ b/SOURCES/files-view-Backport-translations.patch @@ -0,0 +1,400 @@ +diff -ruN nautilus-3.28.1/po/bg.po nautilus-3.28.1.translations/po/bg.po +--- nautilus-3.28.1/po/bg.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/bg.po 2022-09-22 15:47:26.136428703 +0200 +@@ -5471,3 +5471,7 @@ + + #~ msgid "Enter server address…" + #~ msgstr "Въведете адреса на сървъра…" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Копиране на местоположение" +diff -ruN nautilus-3.28.1/po/ca.po nautilus-3.28.1.translations/po/ca.po +--- nautilus-3.28.1/po/ca.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/ca.po 2022-09-22 15:47:26.165428628 +0200 +@@ -7061,3 +7061,7 @@ + #~ "Amb el Nautilus heu d'haver rebut una còpia de la Llicència Pública " + #~ "General de GNU; si no és així, escriviu a la Free Software Foundation, " + #~ "Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Copia la ubicació" +diff -ruN nautilus-3.28.1/po/cs.po nautilus-3.28.1.translations/po/cs.po +--- nautilus-3.28.1/po/cs.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/cs.po 2022-09-22 15:47:26.181428586 +0200 +@@ -5665,3 +5665,7 @@ + + #~ msgid "org.gnome.Nautilus" + #~ msgstr "org.gnome.Nautilus" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "Z_kopírovat umístění" +diff -ruN nautilus-3.28.1/po/da.po nautilus-3.28.1.translations/po/da.po +--- nautilus-3.28.1/po/da.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/da.po 2022-09-22 15:47:26.193428555 +0200 +@@ -7097,3 +7097,7 @@ + + #~ msgid "link" + #~ msgstr "henvisning" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Kopiér placering" +diff -ruN nautilus-3.28.1/po/de.po nautilus-3.28.1.translations/po/de.po +--- nautilus-3.28.1/po/de.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/de.po 2022-09-22 15:47:26.201428534 +0200 +@@ -5716,3 +5716,7 @@ + + #~ msgid "org.gnome.Nautilus" + #~ msgstr "org.gnome.Nautilus" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "Ort _kopieren" +diff -ruN nautilus-3.28.1/po/el.po nautilus-3.28.1.translations/po/el.po +--- nautilus-3.28.1/po/el.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/el.po 2022-09-22 15:47:26.214428501 +0200 +@@ -5910,3 +5910,8 @@ + #~ msgstr "" + #~ "Ορίστε αυτό το όνομα αν θέλετε προσαρμοσμένο όνομα για το εικονίδιο του " + #~ "προσωπικού φακέλου στην επιφάνεια εργασίας." ++ ++# ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Αντιγραφή τοποθεσίας" +diff -ruN nautilus-3.28.1/po/en_GB.po nautilus-3.28.1.translations/po/en_GB.po +--- nautilus-3.28.1/po/en_GB.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/en_GB.po 2022-09-22 15:47:26.228428464 +0200 +@@ -9935,3 +9935,7 @@ + + #~ msgid "Question" + #~ msgstr "Question" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Copy Location" +diff -ruN nautilus-3.28.1/po/es.po nautilus-3.28.1.translations/po/es.po +--- nautilus-3.28.1/po/es.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/es.po 2022-09-22 15:47:26.246428418 +0200 +@@ -10830,3 +10830,8 @@ + #~ msgstr "" + #~ "Nautilus es un shell gráfico para GNOME que facilita la administración de " + #~ "sus archivos y el resto de su sistema." ++ ++# src/nautilus-location-bar.c:401 ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "Copiar _ubicación" +diff -ruN nautilus-3.28.1/po/eu.po nautilus-3.28.1.translations/po/eu.po +--- nautilus-3.28.1/po/eu.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/eu.po 2022-09-22 15:47:26.257428389 +0200 +@@ -8066,3 +8066,7 @@ + + #~ msgid "Clear contents of Go menu and Back/Forward lists" + #~ msgstr "Joan menuaren eta Atzera/Aurrera zerrenden edukia garbitzen du" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Kopiatu kokalekua" +diff -ruN nautilus-3.28.1/po/fa.po nautilus-3.28.1.translations/po/fa.po +--- nautilus-3.28.1/po/fa.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/fa.po 2022-09-22 15:47:26.268428361 +0200 +@@ -10082,3 +10082,7 @@ + + #~ msgid "C_ancel Remove" + #~ msgstr "ان_صراف از حذف" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_رونوشت از مکان" +diff -ruN nautilus-3.28.1/po/fi.po nautilus-3.28.1.translations/po/fi.po +--- nautilus-3.28.1/po/fi.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/fi.po 2022-09-22 15:47:26.278428335 +0200 +@@ -6969,3 +6969,7 @@ + + #~ msgid "_Up" + #~ msgstr "_Ylös" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "Kopioi si_jainti" +diff -ruN nautilus-3.28.1/po/fr.po nautilus-3.28.1.translations/po/fr.po +--- nautilus-3.28.1/po/fr.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/fr.po 2022-09-22 15:47:26.286428314 +0200 +@@ -5975,3 +5975,7 @@ + + #~ msgid "Copying “%B” to “%B”" + #~ msgstr "Copie de « %B » vers « %B »" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "Co_pier l’emplacement" +diff -ruN nautilus-3.28.1/po/fur.po nautilus-3.28.1.translations/po/fur.po +--- nautilus-3.28.1/po/fur.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/fur.po 2022-09-22 15:47:26.295428291 +0200 +@@ -7711,3 +7711,7 @@ + + #~ msgid "Set the zoom level of the current view" + #~ msgstr "Imposte il nivel di zoom de viodude atuâl" ++ ++#: src/resources/ui/nautilus-files-view-context-menus.ui:34 ++msgid "_Copy Location" ++msgstr "_Copie posizion" +diff -ruN nautilus-3.28.1/po/gl.po nautilus-3.28.1.translations/po/gl.po +--- nautilus-3.28.1/po/gl.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/gl.po 2022-09-22 15:47:26.315428239 +0200 +@@ -7429,3 +7429,7 @@ + + #~ msgid "Error autorunning software" + #~ msgstr "Produciuse un erro ao autoexecutar o software" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Copiar localización" +diff -ruN nautilus-3.28.1/po/he.po nautilus-3.28.1.translations/po/he.po +--- nautilus-3.28.1/po/he.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/he.po 2022-09-22 15:47:26.336428185 +0200 +@@ -10468,3 +10468,7 @@ + + #~ msgid "Question" + #~ msgstr "שאלה" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "ה_עתקת מיקום" +diff -ruN nautilus-3.28.1/po/hr.po nautilus-3.28.1.translations/po/hr.po +--- nautilus-3.28.1/po/hr.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/hr.po 2022-09-22 15:47:26.349428151 +0200 +@@ -6064,3 +6064,7 @@ + + #~ msgid "Re_verse Order" + #~ msgstr "Ob_rni poredak" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Kopiraj lokaciju" +diff -ruN nautilus-3.28.1/po/hu.po nautilus-3.28.1.translations/po/hu.po +--- nautilus-3.28.1/po/hu.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/hu.po 2022-09-22 15:47:26.358428127 +0200 +@@ -5566,3 +5566,8 @@ + + #~ msgid "org.gnome.Nautilus" + #~ msgstr "org.gnome.Nautilus" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++#| msgid "Location" ++msgid "_Copy Location" ++msgstr "Hely má_solása" +diff -ruN nautilus-3.28.1/po/id.po nautilus-3.28.1.translations/po/id.po +--- nautilus-3.28.1/po/id.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/id.po 2022-09-22 15:47:26.369428099 +0200 +@@ -5500,3 +5500,7 @@ + #: src/gtk/nautilusgtkplacesview.ui:472 + msgid "Enter server address…" + msgstr "Masukkan alamat server…" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Salin Lokasi" +diff -ruN nautilus-3.28.1/po/ka.po nautilus-3.28.1.translations/po/ka.po +--- nautilus-3.28.1/po/ka.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/ka.po 2022-09-22 15:47:26.396428029 +0200 +@@ -6877,3 +6877,7 @@ + + #~ msgid "Video CD" + #~ msgstr "ვიდეო CD ფორმატში" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_მდებარეობის კოპირება" +diff -ruN nautilus-3.28.1/po/kk.po nautilus-3.28.1.translations/po/kk.po +--- nautilus-3.28.1/po/kk.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/kk.po 2022-09-22 15:47:26.405428006 +0200 +@@ -7442,3 +7442,7 @@ + #~ msgstr "" + #~ "Қоқыс шелегін тазартуды таңдасаңыз, құрамасы жойылады. Оларды жеке-жеке " + #~ "өшіруге болатынын есте сақтаңыз." ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "Орналасуын _көшіріп алу" +diff -ruN nautilus-3.28.1/po/ko.po nautilus-3.28.1.translations/po/ko.po +--- nautilus-3.28.1/po/ko.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/ko.po 2022-09-22 15:47:26.421427964 +0200 +@@ -5763,3 +5763,7 @@ + #~ msgctxt "shortcut window" + #~ msgid "Bookmarks" + #~ msgstr "책갈피" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "위치 복사(_C)" +diff -ruN nautilus-3.28.1/po/lt.po nautilus-3.28.1.translations/po/lt.po +--- nautilus-3.28.1/po/lt.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/lt.po 2022-09-22 15:47:26.444427904 +0200 +@@ -7075,3 +7075,7 @@ + + #~ msgid "_Up" + #~ msgstr "_Aukštyn" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Kopijuoti vietą" +diff -ruN nautilus-3.28.1/po/lv.po nautilus-3.28.1.translations/po/lv.po +--- nautilus-3.28.1/po/lv.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/lv.po 2022-09-22 15:47:26.453427881 +0200 +@@ -5648,3 +5648,8 @@ + + #~ msgid "org.gnome.Nautilus" + #~ msgstr "org.gnome.Nautilus" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++#| msgid "Location" ++msgid "_Copy Location" ++msgstr "_Kopēt atrašanās vietu" +diff -ruN nautilus-3.28.1/po/nl.po nautilus-3.28.1.translations/po/nl.po +--- nautilus-3.28.1/po/nl.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/nl.po 2022-09-22 15:47:26.504427749 +0200 +@@ -6405,3 +6405,7 @@ + + #~ msgid "Move Dow_n" + #~ msgstr "Naar b_eneden" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "Locatie _kopiëren" +diff -ruN nautilus-3.28.1/po/oc.po nautilus-3.28.1.translations/po/oc.po +--- nautilus-3.28.1/po/oc.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/oc.po 2022-09-22 15:47:26.520427708 +0200 +@@ -6999,3 +6999,7 @@ + + #~ msgid "Rename “%s”" + #~ msgstr "Renomenar lo fichièr « %s »" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Copiar l'emplaçament" +diff -ruN nautilus-3.28.1/po/pl.po nautilus-3.28.1.translations/po/pl.po +--- nautilus-3.28.1/po/pl.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/pl.po 2022-09-22 15:47:26.535427669 +0200 +@@ -5683,3 +5683,7 @@ + + #~ msgid "org.gnome.Nautilus" + #~ msgstr "org.gnome.Nautilus" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "S_kopiuj położenie" +diff -ruN nautilus-3.28.1/po/pt_BR.po nautilus-3.28.1.translations/po/pt_BR.po +--- nautilus-3.28.1/po/pt_BR.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/pt_BR.po 2022-09-22 15:47:26.547427638 +0200 +@@ -7152,3 +7152,7 @@ + + #~ msgid "_Bookmarks..." + #~ msgstr "_Marcadores..." ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Copiar local" +diff -ruN nautilus-3.28.1/po/pt.po nautilus-3.28.1.translations/po/pt.po +--- nautilus-3.28.1/po/pt.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/pt.po 2022-09-22 15:47:26.554427619 +0200 +@@ -5944,3 +5944,7 @@ + + #~ msgid "Whether the row represents a network location" + #~ msgstr "Se a linha representa uma localização de rede" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Copiar localização" +diff -ruN nautilus-3.28.1/po/ru.po nautilus-3.28.1.translations/po/ru.po +--- nautilus-3.28.1/po/ru.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/ru.po 2022-09-22 15:47:26.567427586 +0200 +@@ -6177,3 +6177,7 @@ + #~ msgctxt "Bookmark" + #~ msgid "_Name" + #~ msgstr "_Имя" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Копировать адрес" +diff -ruN nautilus-3.28.1/po/sl.po nautilus-3.28.1.translations/po/sl.po +--- nautilus-3.28.1/po/sl.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/sl.po 2022-09-22 15:47:26.586427537 +0200 +@@ -7338,3 +7338,7 @@ + + #~ msgid "_About Files" + #~ msgstr "_O programu" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "Kopiraj _mesto" +diff -ruN nautilus-3.28.1/po/sr.po nautilus-3.28.1.translations/po/sr.po +--- nautilus-3.28.1/po/sr.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/sr.po 2022-09-22 15:47:26.605427487 +0200 +@@ -7143,3 +7143,7 @@ + #~ "ако нисте, пишите Задужбини слободног софтвера на следећу адресу: „Free " + #~ "Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA " + #~ "02110-1301 USA“" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Копирај путању" +diff -ruN nautilus-3.28.1/po/sv.po nautilus-3.28.1.translations/po/sv.po +--- nautilus-3.28.1/po/sv.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/sv.po 2022-09-22 15:47:26.614427464 +0200 +@@ -6343,3 +6343,7 @@ + + #~ msgid "%a, %b %e %Y %T" + #~ msgstr "%a %-e %b %Y %T" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Kopiera plats" +diff -ruN nautilus-3.28.1/po/tr.po nautilus-3.28.1.translations/po/tr.po +--- nautilus-3.28.1/po/tr.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/tr.po 2022-09-22 15:47:26.640427397 +0200 +@@ -6188,3 +6188,7 @@ + + #~ msgid "D_efault zoom level:" + #~ msgstr "Ön_tanımlı yaklaştırma seviyesi:" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "Konumu _Kopyala" +diff -ruN nautilus-3.28.1/po/uk.po nautilus-3.28.1.translations/po/uk.po +--- nautilus-3.28.1/po/uk.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/uk.po 2022-09-22 15:47:26.652427365 +0200 +@@ -7967,3 +7967,7 @@ + + #~ msgid "Set the zoom level of the current view" + #~ msgstr "Встановити рівень масштабування поточного вікна" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "_Копіювати адресу" +diff -ruN nautilus-3.28.1/po/zh_CN.po nautilus-3.28.1.translations/po/zh_CN.po +--- nautilus-3.28.1/po/zh_CN.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/zh_CN.po 2022-09-22 15:47:26.685427280 +0200 +@@ -5495,3 +5495,7 @@ + + #~ msgid "Zoom In" + #~ msgstr "放大" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "复制位置(_C)" +diff -ruN nautilus-3.28.1/po/zh_TW.po nautilus-3.28.1.translations/po/zh_TW.po +--- nautilus-3.28.1/po/zh_TW.po 2018-04-09 22:02:06.000000000 +0200 ++++ nautilus-3.28.1.translations/po/zh_TW.po 2022-09-22 15:47:26.698427246 +0200 +@@ -7283,3 +7283,7 @@ + #~ "您應該已經和程式一起收到一份 GNU 通用公共許可證的副本。如果還沒有,寫信" + #~ "給: the Free Software Foundation, Inc., 51 Franklin Street, Fifth " + #~ "Floor, Boston, MA 02110-1301 USA" ++ ++#: src/resources/ui/nautilus-pathbar-context-menu.ui:53 ++msgid "_Copy Location" ++msgstr "複製位置(_C)" diff --git a/SOURCES/files-view-Clear-selection-if-any-files-don-t-match-.patch b/SOURCES/files-view-Clear-selection-if-any-files-don-t-match-.patch new file mode 100644 index 0000000..cad0782 --- /dev/null +++ b/SOURCES/files-view-Clear-selection-if-any-files-don-t-match-.patch @@ -0,0 +1,36 @@ +From 4d7a1a7413cc7e76e99e11def90a6503cc142efb Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Wed, 26 Feb 2020 12:56:39 +0100 +Subject: [PATCH] files-view: Clear selection if any files don't match the + pattern + +The Select items matching (Ctrl + S) feature allows to select files +which match the pattern. However, it is confusing that current selection +is not cleared when any files don't match the pattern. +--- + src/nautilus-files-view.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c +index 5573701cc..f3d507fff 100644 +--- a/src/nautilus-files-view.c ++++ b/src/nautilus-files-view.c +@@ -1716,12 +1716,12 @@ pattern_select_response_cb (GtkWidget *dialog, + selection = nautilus_directory_match_pattern (directory, + gtk_entry_get_text (GTK_ENTRY (entry))); + ++ nautilus_files_view_call_set_selection (view, selection); ++ nautilus_files_view_reveal_selection (view); ++ + if (selection) + { +- nautilus_files_view_call_set_selection (view, selection); + nautilus_file_list_free (selection); +- +- nautilus_files_view_reveal_selection (view); + } + /* fall through */ + } +-- +2.26.0 + diff --git a/SOURCES/fix-criticals-when-connecting-to-remote-locations.patch b/SOURCES/fix-criticals-when-connecting-to-remote-locations.patch new file mode 100644 index 0000000..0f0f74f --- /dev/null +++ b/SOURCES/fix-criticals-when-connecting-to-remote-locations.patch @@ -0,0 +1,22 @@ +diff --git a/src/gtk/nautilusgtkplacesview.c b/src/gtk/nautilusgtkplacesview.c +index de0610e52..b72085ba9 100644 +--- a/src/gtk/nautilusgtkplacesview.c ++++ b/src/gtk/nautilusgtkplacesview.c +@@ -401,6 +401,9 @@ nautilus_gtk_places_view_destroy (GtkWidget *widget) + if (priv->network_monitor) + g_signal_handlers_disconnect_by_func (priv->network_monitor, update_places, widget); + ++ if (priv->server_list_monitor) ++ g_signal_handlers_disconnect_by_func (priv->server_list_monitor, server_file_changed_cb, widget); ++ + g_cancellable_cancel (priv->cancellable); + g_cancellable_cancel (priv->networks_fetching_cancellable); + +@@ -1405,6 +1407,7 @@ pulse_entry_cb (gpointer user_data) + { + gtk_entry_set_progress_pulse_step (GTK_ENTRY (priv->address_entry), 0.0); + gtk_entry_set_progress_fraction (GTK_ENTRY (priv->address_entry), 0.0); ++ priv->entry_pulse_timeout_id = 0; + + return G_SOURCE_REMOVE; + } diff --git a/SOURCES/freedesktop-dbus-Try-to-own-the-name-until-after-exp.patch b/SOURCES/freedesktop-dbus-Try-to-own-the-name-until-after-exp.patch new file mode 100644 index 0000000..6d0fe2c --- /dev/null +++ b/SOURCES/freedesktop-dbus-Try-to-own-the-name-until-after-exp.patch @@ -0,0 +1,96 @@ +From ba878013689114bf199ba2260f9282ae82b352c4 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Wed, 22 Feb 2023 16:22:43 +0100 +Subject: [PATCH] freedesktop-dbus: Try to own the name until after exporting + skeleton + +Currently, the `g_bus_own_name_on_connection` function is called for the +`org.freedesktop.FileManager1` name before exporting the +`/org/freedesktop/FileManager1` skeleton. This seemingly works fine in most +cases, but occasionally the name is acquired too early and D-Bus clients +can get `No such interface` error. This is regression caused by the commit +2293e813d3cd1cc47b2b8750f7140647aa066fc8. Let's try to own the nam until +after exporting the skeleton to avoid this error. +--- + src/nautilus-freedesktop-dbus.c | 31 +++++++++++++++---------------- + 1 file changed, 15 insertions(+), 16 deletions(-) + +diff --git a/src/nautilus-freedesktop-dbus.c b/src/nautilus-freedesktop-dbus.c +index c253cfaba..c20166abb 100644 +--- a/src/nautilus-freedesktop-dbus.c ++++ b/src/nautilus-freedesktop-dbus.c +@@ -162,20 +162,6 @@ name_lost_cb (GDBusConnection *connection, + DEBUG ("Lost (or failed to acquire) the name %s on the session message bus\n", name); + } + +-static void +-nautilus_freedesktop_dbus_constructed (GObject *object) +-{ +- NautilusFreedesktopDBus *fdb = NAUTILUS_FREEDESKTOP_DBUS (object); +- +- fdb->owner_id = g_bus_own_name_on_connection (fdb->connection, +- NAUTILUS_FDO_DBUS_NAME, +- G_BUS_NAME_OWNER_FLAGS_NONE, +- name_acquired_cb, +- name_lost_cb, +- fdb, +- NULL); +-} +- + static void + nautilus_freedesktop_dbus_dispose (GObject *object) + { +@@ -252,7 +238,6 @@ nautilus_freedesktop_dbus_class_init (NautilusFreedesktopDBusClass *klass) + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = nautilus_freedesktop_dbus_dispose; +- object_class->constructed = nautilus_freedesktop_dbus_constructed; + object_class->get_property = nautilus_freedesktop_dbus_get_property; + object_class->set_property = nautilus_freedesktop_dbus_set_property; + +@@ -301,7 +286,6 @@ nautilus_freedesktop_dbus_set_open_locations (NautilusFreedesktopDB + nautilus_freedesktop_file_manager1_set_open_locations (fdb->skeleton, locations); + } + +-/* Tries to own the org.freedesktop.FileManager1 service name */ + NautilusFreedesktopDBus * + nautilus_freedesktop_dbus_new (GDBusConnection *connection) + { +@@ -310,6 +294,7 @@ nautilus_freedesktop_dbus_new (GDBusConnection *connection) + NULL); + } + ++/* Tries to own the org.freedesktop.FileManager1 service name */ + gboolean + nautilus_freedesktop_dbus_register (NautilusFreedesktopDBus *fdb, + GError **error) +@@ -331,12 +316,26 @@ nautilus_freedesktop_dbus_register (NautilusFreedesktopDBus *fdb, + G_CALLBACK (skeleton_handle_show_item_properties_cb), fdb); + } + ++ fdb->owner_id = g_bus_own_name_on_connection (fdb->connection, ++ NAUTILUS_FDO_DBUS_NAME, ++ G_BUS_NAME_OWNER_FLAGS_NONE, ++ name_acquired_cb, ++ name_lost_cb, ++ fdb, ++ NULL); ++ + return success; + } + + void + nautilus_freedesktop_dbus_unregister (NautilusFreedesktopDBus *fdb) + { ++ if (fdb->owner_id != 0) ++ { ++ g_bus_unown_name (fdb->owner_id); ++ fdb->owner_id = 0; ++ } ++ + g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (fdb->skeleton)); + + g_signal_handlers_disconnect_by_data (fdb->skeleton, fdb); +-- +2.39.1 + diff --git a/SOURCES/man-remove-geometry-option.patch b/SOURCES/man-remove-geometry-option.patch new file mode 100644 index 0000000..0404c6b --- /dev/null +++ b/SOURCES/man-remove-geometry-option.patch @@ -0,0 +1,29 @@ +From 4190844d91f9d4f1bb2997d7769caa57dd5f9a4c Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Fri, 7 Sep 2018 08:05:18 +0000 +Subject: [PATCH] man: Remove geometry option + +We removed that some time ago. +--- + docs/nautilus.1 | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/docs/nautilus.1 b/docs/nautilus.1 +index 70304a1d2..a868c72cb 100644 +--- a/docs/nautilus.1 ++++ b/docs/nautilus.1 +@@ -37,11 +37,6 @@ Perform a quick set of self-check tests. + .B \-\-version + Show the version of the program. + +-.TP +-.BR \-g ", " \-\-geometry=\fIGEOMETRY\fR +-Create the initial window with the given geometry. \fBDeprecated\fR - the geometry +-is saved and loaded using GSettings. +- + .TP + .BR \-w ", " \-\-new-window + Always open a new window for browsing specified URIs. +-- +2.21.0 + diff --git a/SOURCES/nautilus-canvas-container-Remove-the-include-visible.patch b/SOURCES/nautilus-canvas-container-Remove-the-include-visible.patch new file mode 100644 index 0000000..4ecda1d --- /dev/null +++ b/SOURCES/nautilus-canvas-container-Remove-the-include-visible.patch @@ -0,0 +1,189 @@ +From a7a31137aee8c4af81d7d447ceb83ccdb2ddadc0 Mon Sep 17 00:00:00 2001 +From: Xiang Fan +Date: Fri, 13 Jul 2018 11:49:09 -0700 +Subject: [PATCH] nautilus-canvas-container: Remove the "include visible area" + logic. + +canvas_set_scroll_region_include_visible_area() was added in +ec054c80981e26b71c8bb2e6853b035dc2063e7d to fix +https://bugzilla.gnome.org/show_bug.cgi?id=42068 ("Dragging icons +adjusts scroll area in a way that causes immediate scrolling"). This is +no longer the case, because now icons remain in place when being dragged +and are not allowed to be rearranged. + +ec054c80981e26b71c8bb2e6853b035dc2063e7d causes issues relating to extra +scrolling space (#340), hence the removal. + +Fixes #340. +--- + src/nautilus-canvas-container.c | 79 +-------------------------------- + src/nautilus-canvas-container.h | 1 - + src/nautilus-canvas-private.h | 3 -- + src/nautilus-canvas-view.c | 6 --- + 4 files changed, 1 insertion(+), 88 deletions(-) + +diff --git a/src/nautilus-canvas-container.c b/src/nautilus-canvas-container.c +index 09acd47fc..bd05a3a2d 100644 +--- a/src/nautilus-canvas-container.c ++++ b/src/nautilus-canvas-container.c +@@ -968,45 +968,6 @@ get_all_icon_bounds (NautilusCanvasContainer *container, + x1, y1, x2, y2, usage); + } + +-/* Don't preserve visible white space the next time the scroll region +- * is recomputed when the container is not empty. */ +-void +-nautilus_canvas_container_reset_scroll_region (NautilusCanvasContainer *container) +-{ +- container->details->reset_scroll_region_trigger = TRUE; +-} +- +-/* Set a new scroll region without eliminating any of the currently-visible area. */ +-static void +-canvas_set_scroll_region_include_visible_area (EelCanvas *canvas, +- double x1, +- double y1, +- double x2, +- double y2) +-{ +- double old_x1, old_y1, old_x2, old_y2; +- double old_scroll_x, old_scroll_y; +- double height, width; +- GtkAllocation allocation; +- +- eel_canvas_get_scroll_region (canvas, &old_x1, &old_y1, &old_x2, &old_y2); +- gtk_widget_get_allocation (GTK_WIDGET (canvas), &allocation); +- +- width = (allocation.width) / canvas->pixels_per_unit; +- height = (allocation.height) / canvas->pixels_per_unit; +- +- old_scroll_x = gtk_adjustment_get_value (gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (canvas))); +- old_scroll_y = gtk_adjustment_get_value (gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (canvas))); +- +- x1 = MIN (x1, old_x1 + old_scroll_x); +- y1 = MIN (y1, old_y1 + old_scroll_y); +- x2 = MAX (x2, old_x1 + old_scroll_x + width); +- y2 = MAX (y2, old_y1 + old_scroll_y + height); +- +- eel_canvas_set_scroll_region +- (canvas, x1, y1, x2, y2); +-} +- + void + nautilus_canvas_container_update_scroll_region (NautilusCanvasContainer *container) + { +@@ -1014,24 +975,10 @@ nautilus_canvas_container_update_scroll_region (NautilusCanvasContainer *contain + double pixels_per_unit; + GtkAdjustment *hadj, *vadj; + float step_increment; +- gboolean reset_scroll_region; + GtkAllocation allocation; + + pixels_per_unit = EEL_CANVAS (container)->pixels_per_unit; + +- reset_scroll_region = container->details->reset_scroll_region_trigger +- || nautilus_canvas_container_is_empty (container); +- +- /* The trigger is only cleared when container is non-empty, so +- * callers can reliably reset the scroll region when an item +- * is added even if extraneous relayouts are called when the +- * window is still empty. +- */ +- if (!nautilus_canvas_container_is_empty (container)) +- { +- container->details->reset_scroll_region_trigger = FALSE; +- } +- + get_all_icon_bounds (container, &x1, &y1, &x2, &y2, BOUNDS_USAGE_FOR_ENTIRE_ITEM); + + /* Add border at the "end"of the layout (i.e. after the icons), to +@@ -1053,18 +1000,7 @@ nautilus_canvas_container_update_scroll_region (NautilusCanvasContainer *contain + y2 -= 1; + y2 = MAX (y1, y2); + +- if (reset_scroll_region) +- { +- eel_canvas_set_scroll_region +- (EEL_CANVAS (container), +- x1, y1, x2, y2); +- } +- else +- { +- canvas_set_scroll_region_include_visible_area +- (EEL_CANVAS (container), +- x1, y1, x2, y2); +- } ++ eel_canvas_set_scroll_region (EEL_CANVAS (container), x1, y1, x2, y2); + + hadj = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (container)); + vadj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (container)); +@@ -5722,23 +5658,10 @@ nautilus_canvas_container_get_icon_drop_target_uri (NautilusCanvasContainer *con + return uri; + } + +-/* Call to reset the scroll region only if the container is not empty, +- * to avoid having the flag linger until the next file is added. +- */ +-static void +-reset_scroll_region_if_not_empty (NautilusCanvasContainer *container) +-{ +- if (!nautilus_canvas_container_is_empty (container)) +- { +- nautilus_canvas_container_reset_scroll_region (container); +- } +-} +- + /* Re-sort, switching to automatic layout if it was in manual layout. */ + void + nautilus_canvas_container_sort (NautilusCanvasContainer *container) + { +- reset_scroll_region_if_not_empty (container); + container->details->needs_resort = TRUE; + redo_layout (container); + } +diff --git a/src/nautilus-canvas-container.h b/src/nautilus-canvas-container.h +index a370bba26..33929375d 100644 +--- a/src/nautilus-canvas-container.h ++++ b/src/nautilus-canvas-container.h +@@ -271,7 +271,6 @@ void nautilus_canvas_container_set_single_click_mode (Nauti + gboolean single_click_mode); + void nautilus_canvas_container_enable_linger_selection (NautilusCanvasContainer *view, + gboolean enable); +-void nautilus_canvas_container_reset_scroll_region (NautilusCanvasContainer *container); + void nautilus_canvas_container_set_font (NautilusCanvasContainer *container, + const char *font); + void nautilus_canvas_container_set_margins (NautilusCanvasContainer *container, +diff --git a/src/nautilus-canvas-private.h b/src/nautilus-canvas-private.h +index dd5e79060..e60e86299 100644 +--- a/src/nautilus-canvas-private.h ++++ b/src/nautilus-canvas-private.h +@@ -192,9 +192,6 @@ struct NautilusCanvasContainerDetails { + + int size_allocation_count; + guint size_allocation_count_id; +- +- /* Ignore the visible area the next time the scroll region is recomputed */ +- gboolean reset_scroll_region_trigger; + + /* a11y items used by canvas items */ + guint a11y_item_action_idle_handler; +diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c +index f74ea06db..bd3a7ae5d 100644 +--- a/src/nautilus-canvas-view.c ++++ b/src/nautilus-canvas-view.c +@@ -355,12 +355,6 @@ nautilus_canvas_view_add_files (NautilusFilesView *view, + canvas_view = NAUTILUS_CANVAS_VIEW (view); + canvas_container = get_canvas_container (canvas_view); + +- /* Reset scroll region for the first canvas added when loading a directory. */ +- if (nautilus_files_view_get_loading (view) && nautilus_canvas_container_is_empty (canvas_container)) +- { +- nautilus_canvas_container_reset_scroll_region (canvas_container); +- } +- + for (l = files; l != NULL; l = l->next) + { + if (nautilus_canvas_container_add (canvas_container, +-- +2.37.1 + diff --git a/SOURCES/nautilus-file.c-Fix-open-writable-file-in-recent-tab.patch b/SOURCES/nautilus-file.c-Fix-open-writable-file-in-recent-tab.patch new file mode 100644 index 0000000..f1467c7 --- /dev/null +++ b/SOURCES/nautilus-file.c-Fix-open-writable-file-in-recent-tab.patch @@ -0,0 +1,33 @@ +From 49718175b75c8ff89a219954f0abd6067e4a39f6 Mon Sep 17 00:00:00 2001 +From: Wong Heung Sang +Date: Mon, 7 May 2018 00:10:15 +0800 +Subject: [PATCH] nautilus-file.c: Fix open writable file in recent tab + +File opened in recent tab now is read-only +when it is writable. + +Replace nautilus_file_info_get_uri () +with nautilus_file_info_get_activation_uri () +fix the problem. + +https://gitlab.gnome.org/GNOME/nautilus/issues/378 +--- + src/nautilus-file.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/nautilus-file.c b/src/nautilus-file.c +index 0ec5e3848..d3ba8c841 100644 +--- a/src/nautilus-file.c ++++ b/src/nautilus-file.c +@@ -4482,7 +4482,7 @@ nautilus_file_get_activation_uri (NautilusFile *file) + { + g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); + +- return nautilus_file_info_get_uri (NAUTILUS_FILE_INFO (file)); ++ return nautilus_file_info_get_activation_uri (NAUTILUS_FILE_INFO (file)); + } + + GFile * +-- +2.29.2 + diff --git a/SOURCES/nautilus-mime-actions.c-No-Application-Installed-dia.patch b/SOURCES/nautilus-mime-actions.c-No-Application-Installed-dia.patch new file mode 100644 index 0000000..af1b9fb --- /dev/null +++ b/SOURCES/nautilus-mime-actions.c-No-Application-Installed-dia.patch @@ -0,0 +1,40 @@ +From 3c78251bc3bda455423807cb7fd5e25e7f8afd7e Mon Sep 17 00:00:00 2001 +From: Timothy OBrien +Date: Sun, 27 Jan 2019 12:45:28 +1100 +Subject: [PATCH] nautilus-mime-actions.c: No Application Installed dialog not + closed on GTK_RESPONSE_YES +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The "There is no application installed for “foo” files. Do you want to search for an application to open this file?" dialog that appears when there is no application installed to open the specific file type is not closed after clicking Yes. Instead, it reopens again. + +This patch removes code that was causing the file to be activated after the user clicked Yes; relaunching the dialog. + +Resolves #842 +--- + src/nautilus-mime-actions.c | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/src/nautilus-mime-actions.c b/src/nautilus-mime-actions.c +index 6f0ad9db5..5d1d5234e 100644 +--- a/src/nautilus-mime-actions.c ++++ b/src/nautilus-mime-actions.c +@@ -1191,14 +1191,6 @@ search_for_application_dbus_call_notify_cb (GDBusProxy *proxy, + + g_variant_unref (variant); + +- /* activate the file again */ +- nautilus_mime_activate_files (parameters_install->parent_window, +- parameters_install->slot, +- parameters_install->files, +- parameters_install->activation_directory, +- parameters_install->flags, +- parameters_install->user_confirmation); +- + activate_parameters_install_free (parameters_install); + } + +-- +2.26.0 + diff --git a/SOURCES/org.gnome.Nautilus.appdata.xml.in.in-No-screenshots-.patch b/SOURCES/org.gnome.Nautilus.appdata.xml.in.in-No-screenshots-.patch new file mode 100644 index 0000000..c732924 --- /dev/null +++ b/SOURCES/org.gnome.Nautilus.appdata.xml.in.in-No-screenshots-.patch @@ -0,0 +1,54 @@ +From 2eed21b2dd3ec0cdd701f9c18e1e2582c69bdad8 Mon Sep 17 00:00:00 2001 +From: Timothy OBrien +Date: Mon, 14 Jan 2019 02:17:42 +1100 +Subject: [PATCH] org.gnome.Nautilus.appdata.xml.in.in: No screenshots in + appdata + +No screenshots were supplied by the appdata xml meaning that software install tools would not show them to the user. + +This commit proposes a set of screenshots hosted via the static-web project: https://gitlab.gnome.org/Infrastructure/static-web + +See static-web merge request https://gitlab.gnome.org/Infrastructure/static-web/merge_requests/2 for proposed screenshots. + +Fixes #556 +--- + data/org.gnome.Nautilus.appdata.xml.in.in | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/data/org.gnome.Nautilus.appdata.xml.in.in b/data/org.gnome.Nautilus.appdata.xml.in.in +index 30648b3e6..cb20fa05f 100644 +--- a/data/org.gnome.Nautilus.appdata.xml.in.in ++++ b/data/org.gnome.Nautilus.appdata.xml.in.in +@@ -25,6 +25,24 @@ + Notifications + SearchProvider + ++ ++ ++ https://static.gnome.org/appdata/nautilus/nautilus-201901141.png ++ Tile view ++ ++ ++ https://static.gnome.org/appdata/nautilus/nautilus-201901142.png ++ List view ++ ++ ++ https://static.gnome.org/appdata/nautilus/nautilus-201901143.png ++ Search ++ ++ ++ https://static.gnome.org/appdata/nautilus/nautilus-201901144.png ++ Other locations ++ ++ + + System + +@@ -35,3 +53,4 @@ + https://wiki.gnome.org/action/show/Apps/Nautilus + nautilus + ++ +-- +2.21.0 + diff --git a/SOURCES/properties-window-Fix-crashes-when-cancelled.patch b/SOURCES/properties-window-Fix-crashes-when-cancelled.patch new file mode 100644 index 0000000..b974769 --- /dev/null +++ b/SOURCES/properties-window-Fix-crashes-when-cancelled.patch @@ -0,0 +1,62 @@ +From a20229f185b494a107634c4b99b2be1ce962a277 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Thu, 26 Sep 2019 11:06:45 +0200 +Subject: [PATCH] properties-window: Fix crashes when cancelled + +Nautilus crashes on the "timed_wait_free: assertion failed: +(g_hash_table_lookup (timed_wait_hash_table, wait) != NULL)" assertion +when the creating of the properties window is cancelled. This is because +the timed wait has been already removed. Let's don't remove the wait +when cancelled in order to prevent the crashes. +--- + src/nautilus-properties-window.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c +index 969e3ffea..0112aeb3c 100644 +--- a/src/nautilus-properties-window.c ++++ b/src/nautilus-properties-window.c +@@ -148,6 +148,7 @@ typedef struct + NautilusPropertiesWindowCallback callback; + gpointer callback_data; + NautilusPropertiesWindow *window; ++ gboolean cancelled; + } StartupData; + + /* drag and drop definitions */ +@@ -5229,6 +5230,8 @@ get_existing_window (GList *file_list) + static void + properties_window_finish (StartupData *data) + { ++ gboolean cancel_timed_wait; ++ + if (data->parent_widget != NULL) + { + g_signal_handlers_disconnect_by_data (data->parent_widget, +@@ -5240,14 +5243,21 @@ properties_window_finish (StartupData *data) + data); + } + +- remove_pending (data, TRUE, (data->window == NULL), FALSE); ++ cancel_timed_wait = (data->window == NULL && !data->cancelled); ++ remove_pending (data, TRUE, cancel_timed_wait, FALSE); ++ + startup_data_free (data); + } + + static void + cancel_create_properties_window_callback (gpointer callback_data) + { +- properties_window_finish ((StartupData *) callback_data); ++ StartupData *data; ++ ++ data = callback_data; ++ data->cancelled = TRUE; ++ ++ properties_window_finish (data); + } + + static void +-- +2.23.0 + diff --git a/SOURCES/properties-window-Fix-crashes-when-opened-multiple-t.patch b/SOURCES/properties-window-Fix-crashes-when-opened-multiple-t.patch new file mode 100644 index 0000000..47ceb5e --- /dev/null +++ b/SOURCES/properties-window-Fix-crashes-when-opened-multiple-t.patch @@ -0,0 +1,33 @@ +From c4b567936ebbba8479f6641c89b3980f7963b765 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Thu, 26 Sep 2019 11:07:35 +0200 +Subject: [PATCH] properties-window: Fix crashes when opened multiple times + +Nautilus crashes with segmentation fault when closing the properties dialog +after it has been opened mutliple times for the same file. This can't be +reproduced over Nautilus as it uses modal dialogs, however, it can be simply +reproduced over the Desktop Icons extension. Let's check the pending_key +variable before used to be sure it is not NULL to fix this crashes. +--- + src/nautilus-properties-window.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c +index 0112aeb3c..f6b2f21a6 100644 +--- a/src/nautilus-properties-window.c ++++ b/src/nautilus-properties-window.c +@@ -5297,7 +5297,10 @@ remove_pending (StartupData *startup_data, + eel_timed_wait_stop + (cancel_create_properties_window_callback, startup_data); + } +- g_hash_table_remove (pending_lists, startup_data->pending_key); ++ if (startup_data->pending_key != NULL) ++ { ++ g_hash_table_remove (pending_lists, startup_data->pending_key); ++ } + } + + static gboolean +-- +2.23.0 + diff --git a/SOURCES/properties-window-Fix-criticals-when-closing.patch b/SOURCES/properties-window-Fix-criticals-when-closing.patch new file mode 100644 index 0000000..cc413e5 --- /dev/null +++ b/SOURCES/properties-window-Fix-criticals-when-closing.patch @@ -0,0 +1,32 @@ +From 97ec09e79d0a92f57ef6bb6b7e042921f5c3c3c8 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Tue, 24 Sep 2019 17:06:15 +0200 +Subject: [PATCH] properties-window: Fix criticals when closing + +The "eel_timed_wait_stop: assertion 'wait != NULL' failed" critical +is printed when closing the properties window since commit c8c2fab2. +This is because the timed wait has been already removed. Let's remove +the wait when closing only if it has not been yet removed in order to +prevent this criticals. + +Fixes: https://gitlab.gnome.org/GNOME/nautilus/issues/1075 +--- + src/nautilus-properties-window.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c +index 9d9bd1c54..969e3ffea 100644 +--- a/src/nautilus-properties-window.c ++++ b/src/nautilus-properties-window.c +@@ -5240,7 +5240,7 @@ properties_window_finish (StartupData *data) + data); + } + +- remove_pending (data, TRUE, TRUE, FALSE); ++ remove_pending (data, TRUE, (data->window == NULL), FALSE); + startup_data_free (data); + } + +-- +2.23.0 + diff --git a/SOURCES/properties-window-Fix-endless-content-size-calculati.patch b/SOURCES/properties-window-Fix-endless-content-size-calculati.patch new file mode 100644 index 0000000..2727d96 --- /dev/null +++ b/SOURCES/properties-window-Fix-endless-content-size-calculati.patch @@ -0,0 +1,46 @@ +From 13ecf5f9c2d219866550757cb660b569299ac285 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Mon, 2 Mar 2020 14:53:36 +0100 +Subject: [PATCH] properties-window: Fix endless content size calculations + +The total number of items and their size are shown in Properties dialog. + +However, the deep count calculations are currently restarted with each +"changed" event of `NautilusFile` object(s). This is not usually a problem +if only one file is selected, but it is a pretty big issue when more +files are selected. It is common that the calculation never ends. This +is because the "changed" events are emitted in many irrelevant cases +(e.g. free space change) and it totally doesn't make sense to restart +the calculation in most of the cases. The initial idea was to react +on ongoing file operations, however, the calculation currently doesn't +react on file changes deeper in the tree anyway, or on changes, which +happened after the calculation is done. Thus the current result can be +outdated anyway. + +Let's ignore `NautilusFile` changes at all when calculating the content +size as it is pretty impossible to implement this properly to dynamically +react on all size changes in the tree. + +Fixes: https://gitlab.gnome.org/GNOME/nautilus/issues/363 +--- + src/nautilus-properties-window.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c +index 9250adbe3..52a2b3fce 100644 +--- a/src/nautilus-properties-window.c ++++ b/src/nautilus-properties-window.c +@@ -1137,10 +1137,6 @@ properties_window_update (NautilusPropertiesWindow *window, + { + dirty_target = TRUE; + } +- if (changed_file != NULL) +- { +- start_deep_count_for_file (window, changed_file); +- } + } + + if (dirty_original) +-- +2.26.0 + diff --git a/SOURCES/remove-nfs-support-strings.patch b/SOURCES/remove-nfs-support-strings.patch new file mode 100644 index 0000000..6eeda88 --- /dev/null +++ b/SOURCES/remove-nfs-support-strings.patch @@ -0,0 +1,900 @@ +From 93ecc7c079a438bb2baf34500fa77806a545910a Mon Sep 17 00:00:00 2001 +From: Carlos Soriano +Date: Tue, 23 Apr 2019 11:35:45 +0200 +Subject: [PATCH] Remove nfs support strings + +--- + src/gtk/nautilusgtkplacesview.ui | 701 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 file changed, 388 insertions(+), 313 deletions(-) + +diff --git a/src/gtk/nautilusgtkplacesview.ui b/src/gtk/nautilusgtkplacesview.ui +index c366fde..601fce2 100644 +--- a/src/gtk/nautilusgtkplacesview.ui ++++ b/src/gtk/nautilusgtkplacesview.ui +@@ -1,4 +1,5 @@ + ++ + + + +@@ -11,265 +12,52 @@ + + + completion_store +- 1 +- 1 +- 0 +- +- +- address_entry +- +- +- 1 +- 18 +- vertical +- 6 +- +- +- 1 +- 1 +- Server Addresses +- +- +- +- +- +- +- +- +- 1 +- 1 +- Server addresses are made up of a protocol prefix and an address. Examples: +- 1 +- 40 +- 40 +- 0 +- +- +- 1 +- +- +- +- +- 1 +- 1 +- smb://gnome.org, ssh://192.168.0.1, ftp://[2001:db8::1] +- 1 +- 40 +- 40 +- 0 +- +- +- 2 +- +- +- +- +- 1 +- 12 +- 1 +- 6 +- 12 +- +- +- 1 +- 1 +- Available Protocols +- 0 +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- 1 +- AppleTalk +- 0 +- +- +- 0 +- 1 +- +- +- +- +- 1 +- File Transfer Protocol +- 0 +- +- +- 0 +- 2 +- +- +- +- +- 1 +- Network File System +- 0 +- +- +- 0 +- 3 +- +- +- +- +- 1 +- Samba +- 0 +- +- +- 0 +- 4 +- +- +- +- +- 1 +- SSH File Transfer Protocol +- 0 +- +- +- 0 +- 5 +- +- +- +- +- 1 +- WebDAV +- 0 +- +- +- 0 +- 6 +- +- +- +- +- 1 +- Prefix +- 0 +- +- +- +- +- +- 1 +- 0 +- +- +- +- +- 1 +- afp:// +- 0 +- +- +- 1 +- 1 +- +- +- +- +- 1 +- ftp:// or ftps:// +- 0 +- +- +- 1 +- 2 +- +- +- +- +- 1 +- nfs:// +- 0 +- +- +- 1 +- 3 +- +- +- +- +- 1 +- smb:// +- 0 +- +- +- 1 +- 4 +- +- +- +- +- 1 +- sftp:// or ssh:// +- 0 +- +- +- 1 +- 5 +- +- +- +- +- 1 +- dav:// or davs:// +- 0 +- +- +- 1 +- 6 +- +- +- +- +- 3 +- +- +- +- ++ 1 ++ True ++ False + + ++ False + + +- 1 ++ True ++ False + + +- 1 +- 1 ++ True ++ False + center ++ True + vertical + 18 + + +- 1 +- 48 +- network-server-symbolic ++ True ++ False ++ 48 ++ network-server-symbolic + + ++ ++ False ++ True ++ 0 ++ + + + +- 1 ++ True ++ False + No recent servers found + + + ++ False ++ True + 1 + + +@@ -280,82 +68,98 @@ + + + +- 1 +- 12 ++ True ++ False ++ 12 + vertical + 12 + + +- 1 ++ True ++ False + Recent Servers + + + + ++ ++ False ++ True ++ 0 ++ + + + +- 1 +- 1 +- 1 +- in +- 250 +- 200 ++ True ++ True ++ True ++ in ++ 250 ++ 200 + + +- 1 +- none ++ True ++ False ++ none + + +- 1 +- 1 +- none ++ True ++ True ++ none + + + + + + + ++ False ++ True + 1 + + + + + list ++ 1 + + + + + + ++ ++ False ++ address_entry ++ ++ ++ True ++ False ++ 18 ++ vertical ++ 6 ++ ++ ++ True ++ False ++ True ++ Server Addresses ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ False ++ True ++ Server addresses are made up of a protocol prefix and an address. Examples: ++ True ++ 40 ++ 40 ++ 0 ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ smb://gnome.org, ssh://192.168.0.1, ftp://[2001:db8::1] ++ True ++ 40 ++ 40 ++ 0 ++ ++ ++ False ++ True ++ 2 ++ ++ ++ ++ ++ True ++ False ++ 12 ++ True ++ 6 ++ 12 ++ ++ ++ True ++ False ++ True ++ Available Protocols ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ False ++ AppleTalk ++ 0 ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ File Transfer Protocol ++ 0 ++ ++ ++ 0 ++ 2 ++ ++ ++ ++ ++ True ++ False ++ Samba ++ 0 ++ ++ ++ 0 ++ 4 ++ ++ ++ ++ ++ True ++ False ++ SSH File Transfer Protocol ++ 0 ++ ++ ++ 0 ++ 5 ++ ++ ++ ++ ++ True ++ False ++ WebDAV ++ 0 ++ ++ ++ 0 ++ 6 ++ ++ ++ ++ ++ True ++ False ++ Prefix ++ 0 ++ ++ ++ ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ True ++ False ++ afp:// ++ 0 ++ ++ ++ 1 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ ftp:// or ftps:// ++ 0 ++ ++ ++ 1 ++ 2 ++ ++ ++ ++ ++ True ++ False ++ smb:// ++ 0 ++ ++ ++ 1 ++ 4 ++ ++ ++ ++ ++ True ++ False ++ sftp:// or ssh:// ++ 0 ++ ++ ++ 1 ++ 5 ++ ++ ++ ++ ++ True ++ False ++ dav:// or davs:// ++ 0 ++ ++ ++ 1 ++ 6 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 3 ++ ++ ++ ++ ++ + +-- +libgit2 0.26.0 + diff --git a/SOURCES/search-engine-tracker-Do-not-lose-filename-results-d.patch b/SOURCES/search-engine-tracker-Do-not-lose-filename-results-d.patch new file mode 100644 index 0000000..d9eed95 --- /dev/null +++ b/SOURCES/search-engine-tracker-Do-not-lose-filename-results-d.patch @@ -0,0 +1,90 @@ +diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c +index 66494cae8..32b6039a9 100644 +--- a/src/nautilus-search-engine-tracker.c ++++ b/src/nautilus-search-engine-tracker.c +@@ -286,6 +286,12 @@ search_finished_idle (gpointer user_data) + return FALSE; + } + ++/* This is used to compensate rank if fts:rank is not set (resp. fts:match is ++ * not used). The value was determined experimentally. I am conviced that ++ * fts:rank is currently always set to 5.0 in case of filename match. ++ */ ++#define FILENAME_RANK 5.0 ++ + static void + nautilus_search_engine_tracker_start (NautilusSearchProvider *provider) + { +@@ -327,7 +333,11 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider) + mimetypes = nautilus_query_get_mime_types (tracker->query); + mime_count = g_list_length (mimetypes); + +- sparql = g_string_new ("SELECT DISTINCT nie:url(?urn) fts:rank(?urn) nfo:fileLastModified(?urn) nfo:fileLastAccessed(?urn)"); ++ sparql = g_string_new ("SELECT DISTINCT" ++ " nie:url(?urn)" ++ " xsd:double(COALESCE(?rank2, ?rank1)) AS ?rank" ++ " nfo:fileLastModified(?urn)" ++ " nfo:fileLastAccessed(?urn)"); + + if (tracker->fts_enabled) + { +@@ -342,16 +352,31 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider) + " tracker:available true;" + " nie:url ?url"); + +- if (*search_text) ++ if (mime_count > 0) + { +- g_string_append_printf (sparql, "; fts:match '\"%s\"*'", search_text); ++ g_string_append (sparql, "; nie:mimeType ?mime"); + } + +- if (mime_count > 0) ++ if (tracker->fts_enabled) + { +- g_string_append (sparql, "; nie:mimeType ?mime"); ++ /* Use fts:match only for content search to not lose some filename results due to stop words. */ ++ g_string_append_printf (sparql, ++ " {" ++ " ?urn fts:match '\"nie:plainTextContent\" : \"%s\"*' ." ++ " BIND(fts:rank(?urn) AS ?rank1) ." ++ " } UNION", ++ search_text); + } + ++ g_string_append_printf (sparql, ++ " {" ++ " ?urn nfo:fileName ?filename ." ++ " FILTER(fn:contains(fn:lower-case(?filename), '%s')) ." ++ " BIND(%f AS ?rank2) ." ++ " }", ++ search_text, ++ FILENAME_RANK); ++ + g_string_append_printf (sparql, " . FILTER( "); + + if (!tracker->recursive) +@@ -363,11 +388,6 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider) + g_string_append_printf (sparql, "tracker:uri-is-descendant('%s', ?url)", location_uri); + } + +- if (!tracker->fts_enabled) +- { +- g_string_append_printf (sparql, " && fn:contains(fn:lower-case(nfo:fileName(?urn)), '%s')", search_text); +- } +- + date_range = nautilus_query_get_date_range (tracker->query); + if (date_range) + { +@@ -424,7 +444,7 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider) + g_string_append (sparql, ")\n"); + } + +- g_string_append (sparql, ")} ORDER BY DESC (fts:rank(?urn))"); ++ g_string_append (sparql, ")} ORDER BY DESC (?rank)"); + + tracker->cancellable = g_cancellable_new (); + tracker_sparql_connection_query_async (tracker->connection, +-- +2.23.0 + diff --git a/SOURCES/search-engine-tracker-Expand-macro-as-string.patch b/SOURCES/search-engine-tracker-Expand-macro-as-string.patch new file mode 100644 index 0000000..3040eed --- /dev/null +++ b/SOURCES/search-engine-tracker-Expand-macro-as-string.patch @@ -0,0 +1,33 @@ +From 33fafad8430ac32a750fd3315d507482c8028c15 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ant=C3=B3nio=20Fernandes?= +Date: Fri, 29 May 2020 13:16:11 +0100 +Subject: [PATCH] search-engine-tracker: Expand macro as string + +We have changed the FILENAME_RANK constant from being used as a format +string argument to be concatenated as a string during compilation, as +detailed in 7f00ede9b410e88106cef34c634cb46e46015e37 + +However, I have forgotten to quote the constant, which otherwise cannot +be treated as a string to concatenate. + +Fix that now. +--- + src/nautilus-search-engine-tracker.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c +index 571467a25..13470a62e 100644 +--- a/src/nautilus-search-engine-tracker.c ++++ b/src/nautilus-search-engine-tracker.c +@@ -290,7 +290,7 @@ search_finished_idle (gpointer user_data) + * not used). The value was determined experimentally. I am convinced that + * fts:rank is currently always set to 5.0 in case of filename match. + */ +-#define FILENAME_RANK 5.0 ++#define FILENAME_RANK "5.0" + + static void + nautilus_search_engine_tracker_start (NautilusSearchProvider *provider) +-- +2.26.2 + diff --git a/SOURCES/search-engine-tracker-Fix-broken-query-under-some-lo.patch b/SOURCES/search-engine-tracker-Fix-broken-query-under-some-lo.patch new file mode 100644 index 0000000..c81a268 --- /dev/null +++ b/SOURCES/search-engine-tracker-Fix-broken-query-under-some-lo.patch @@ -0,0 +1,53 @@ +From 7018cdcaa9954271cd82ba1c2620ecdfea176fae Mon Sep 17 00:00:00 2001 +From: Cristiano Nunes +Date: Tue, 7 Apr 2020 14:47:41 +0000 +Subject: [PATCH] search-engine-tracker: Fix broken query under some locales + +We set a 5.0 rank for filename matches in the SPARQL query as a float +argument in a format string. + +However, the floats in format strings are translated with the decimal +separator from the locale. This means in some locales the rank has a +comma instead of a dot, which results in a query error. In turn, this +effectively broke the shell search provider. + +Instead of using a format specifier and passing the value as an +argument, we should just use compile-time concatenation to insert '5.0' +in the query unmodified. + +Fixes https://gitlab.gnome.org/GNOME/nautilus/-/issues/1412 and #1437 + +Cherry-picked from 7f00ede9b410e88106cef34c634cb46e46015e37 +--- + src/nautilus-search-engine-tracker.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c +index 32b6039a9..571467a25 100644 +--- a/src/nautilus-search-engine-tracker.c ++++ b/src/nautilus-search-engine-tracker.c +@@ -287,7 +287,7 @@ search_finished_idle (gpointer user_data) + } + + /* This is used to compensate rank if fts:rank is not set (resp. fts:match is +- * not used). The value was determined experimentally. I am conviced that ++ * not used). The value was determined experimentally. I am convinced that + * fts:rank is currently always set to 5.0 in case of filename match. + */ + #define FILENAME_RANK 5.0 +@@ -372,10 +372,9 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider) + " {" + " ?urn nfo:fileName ?filename ." + " FILTER(fn:contains(fn:lower-case(?filename), '%s')) ." +- " BIND(%f AS ?rank2) ." ++ " BIND(" FILENAME_RANK " AS ?rank2) ." + " }", +- search_text, +- FILENAME_RANK); ++ search_text); + + g_string_append_printf (sparql, " . FILTER( "); + +-- +2.26.2 + diff --git a/SOURCES/window-Add-website-link-to-About-dialog.patch b/SOURCES/window-Add-website-link-to-About-dialog.patch new file mode 100644 index 0000000..133e6c8 --- /dev/null +++ b/SOURCES/window-Add-website-link-to-About-dialog.patch @@ -0,0 +1,13 @@ +diff --git a/src/nautilus-window.c b/src/nautilus-window.c +index 89d492a76..5ea21b1d8 100644 +--- a/src/nautilus-window.c ++++ b/src/nautilus-window.c +@@ -2864,6 +2864,7 @@ nautilus_window_show_about_dialog (NautilusWindow *window) + "program-name", program_name, + "version", VERSION, + "comments", _("Access and organize your files."), ++ "website", "https://wiki.gnome.org/action/show/Apps/Files", + "copyright", "Copyright © 1999–2018 The Files Authors", + "license-type", GTK_LICENSE_GPL_3_0, + "artists", artists, + diff --git a/SOURCES/window-Fix-criticals-when-moving-file-to-trash.patch b/SOURCES/window-Fix-criticals-when-moving-file-to-trash.patch new file mode 100644 index 0000000..a553b65 --- /dev/null +++ b/SOURCES/window-Fix-criticals-when-moving-file-to-trash.patch @@ -0,0 +1,35 @@ +From 668e0673a7ea3fe4cb6c99bc7b56bc52597e2061 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Wed, 25 Sep 2019 09:16:44 +0200 +Subject: [PATCH] window: Fix criticals when moving file to trash + +The "gtk_revealer_get_transition_type: assertion 'GTK_IS_REVEALER (revealer)' +failed" critical is printed when moving file to trash after closing a window. +This is because the "undo-changed" signal handler is not disconnected when +the window is destroyed. Let's use g_signal_connect_object() to ensure +disconnection and prevent those criticals. + +Fixes: https://gitlab.gnome.org/GNOME/nautilus/issues/1076 +--- + src/nautilus-window.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/nautilus-window.c b/src/nautilus-window.c +index 285a6a6ce..056c75c7a 100644 +--- a/src/nautilus-window.c ++++ b/src/nautilus-window.c +@@ -2239,8 +2239,9 @@ nautilus_window_constructed (GObject *self) + nautilus_window_set_up_sidebar (window); + + +- g_signal_connect_after (nautilus_file_undo_manager_get (), "undo-changed", +- G_CALLBACK (nautilus_window_on_undo_changed), self); ++ g_signal_connect_object (nautilus_file_undo_manager_get (), "undo-changed", ++ G_CALLBACK (nautilus_window_on_undo_changed), self, ++ G_CONNECT_AFTER); + + /* Is required that the UI is constructed before initializating the actions, since + * some actions trigger UI widgets to show/hide. */ +-- +2.23.0 + diff --git a/SOURCES/window-Streamline-RestoreTabData-memory-management.patch b/SOURCES/window-Streamline-RestoreTabData-memory-management.patch new file mode 100644 index 0000000..4223c38 --- /dev/null +++ b/SOURCES/window-Streamline-RestoreTabData-memory-management.patch @@ -0,0 +1,118 @@ +From 4bdd3fad8d51e50e3539c8e04bc91538467bd236 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ant=C3=B3nio=20Fernandes?= +Date: Wed, 8 Jul 2020 14:44:38 +0100 +Subject: [PATCH] window: Streamline RestoreTabData memory management + +When restoring the back and forward lists, we make a deep copy only to +free the data immediately afterwards. + +Instead of reallocating the lists unnecessarily, let's just steal them. + +Also, use g_queue_free_full() to make free_restore_tab_data() a proper +GDestroyNotify; also define it in window-slot.c, where it belongs. +--- + src/nautilus-window-slot.c | 16 ++++++++++++++-- + src/nautilus-window-slot.h | 1 + + src/nautilus-window.c | 20 ++------------------ + 3 files changed, 17 insertions(+), 20 deletions(-) + +diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c +index c3260aeb0..bf040bff2 100644 +--- a/src/nautilus-window-slot.c ++++ b/src/nautilus-window-slot.c +@@ -155,6 +155,18 @@ static void trash_state_changed_cb (NautilusTrashMonitor *monitor, + gboolean is_empty, + gpointer user_data); + ++void ++free_restore_tab_data (gpointer data) ++{ ++ RestoreTabData *tab_data = data; ++ ++ g_list_free_full (tab_data->back_list, g_object_unref); ++ g_list_free_full (tab_data->forward_list, g_object_unref); ++ nautilus_file_unref (tab_data->file); ++ ++ g_free (tab_data); ++} ++ + void + nautilus_window_slot_restore_from_data (NautilusWindowSlot *self, + RestoreTabData *data) +@@ -163,9 +175,9 @@ nautilus_window_slot_restore_from_data (NautilusWindowSlot *self, + + priv = nautilus_window_slot_get_instance_private (self); + +- priv->back_list = g_list_copy_deep (data->back_list, (GCopyFunc) g_object_ref, NULL); ++ priv->back_list = g_steal_pointer (&data->back_list); + +- priv->forward_list = g_list_copy_deep (data->forward_list, (GCopyFunc) g_object_ref, NULL); ++ priv->forward_list = g_steal_pointer (&data->forward_list); + + priv->view_mode_before_search = data->view_before_search; + +diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h +index 573357d9b..bda1a920f 100644 +--- a/src/nautilus-window-slot.h ++++ b/src/nautilus-window-slot.h +@@ -125,4 +125,5 @@ RestoreTabData* nautilus_window_slot_get_restore_tab_data (NautilusWindowSlot *s + /* Only used by slot-dnd */ + NautilusView* nautilus_window_slot_get_current_view (NautilusWindowSlot *slot); + ++void free_restore_tab_data (gpointer data); + #endif /* NAUTILUS_WINDOW_SLOT_H */ +diff --git a/src/nautilus-window.c b/src/nautilus-window.c +index 1f8d5208e..175da6fce 100644 +--- a/src/nautilus-window.c ++++ b/src/nautilus-window.c +@@ -79,8 +79,6 @@ static GtkWidget *nautilus_window_ensure_location_entry (NautilusWindow *window) + static void close_slot (NautilusWindow *window, + NautilusWindowSlot *slot, + gboolean remove_from_notebook); +-static void free_restore_tab_data (gpointer data, +- gpointer user_data); + + /* Sanity check: highest mouse button value I could find was 14. 5 is our + * lower threshold (well-documented to be the one of the button events for the +@@ -1374,7 +1372,7 @@ action_restore_tab (GSimpleAction *action, + nautilus_window_slot_open_location_full (slot, location, flags, NULL); + nautilus_window_slot_restore_from_data (slot, data); + +- free_restore_tab_data (data, NULL); ++ free_restore_tab_data (data); + } + + static void +@@ -2501,19 +2499,6 @@ nautilus_window_destroy (GtkWidget *object) + GTK_WIDGET_CLASS (nautilus_window_parent_class)->destroy (object); + } + +-static void +-free_restore_tab_data (gpointer data, +- gpointer user_data) +-{ +- RestoreTabData *tab_data = data; +- +- g_list_free_full (tab_data->back_list, g_object_unref); +- g_list_free_full (tab_data->forward_list, g_object_unref); +- nautilus_file_unref (tab_data->file); +- +- g_free (tab_data); +-} +- + static void + nautilus_window_finalize (GObject *object) + { +@@ -2548,8 +2533,7 @@ nautilus_window_finalize (GObject *object) + G_CALLBACK (nautilus_window_on_undo_changed), + window); + +- g_queue_foreach (priv->tab_data_queue, (GFunc) free_restore_tab_data, NULL); +- g_queue_free (priv->tab_data_queue); ++ g_queue_free_full (priv->tab_data_queue, free_restore_tab_data); + + g_object_unref (priv->pad_controller); + +-- +2.35.1 + diff --git a/SOURCES/window-slot-Rename-RestoreTabData-to-NautilusNavigat.patch b/SOURCES/window-slot-Rename-RestoreTabData-to-NautilusNavigat.patch new file mode 100644 index 0000000..5a18665 --- /dev/null +++ b/SOURCES/window-slot-Rename-RestoreTabData-to-NautilusNavigat.patch @@ -0,0 +1,170 @@ +From 148559bc6809aac40be4aff64b7d3a4e5ac3c59a Mon Sep 17 00:00:00 2001 +From: Sachin Daluja <30343-sachindaluja@users.noreply.gitlab.gnome.org> +Date: Sun, 24 May 2020 13:29:49 -0400 +Subject: [PATCH] window-slot: Rename RestoreTabData to NautilusNavigationState + +This struct is going to be used to also restore navigation state when +replacing the active window slot in order to handle other-locations:// + +Also enhance it to also save and restore the current location bookmark. +--- + src/nautilus-window-slot.c | 28 ++++++++++++++++------------ + src/nautilus-window-slot.h | 11 ++++++----- + src/nautilus-window.c | 12 ++++++------ + 3 files changed, 28 insertions(+), 23 deletions(-) + +diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c +index bf040bff2..e688f0716 100644 +--- a/src/nautilus-window-slot.c ++++ b/src/nautilus-window-slot.c +@@ -156,20 +156,21 @@ static void trash_state_changed_cb (NautilusTrashMonitor *monitor, + gpointer user_data); + + void +-free_restore_tab_data (gpointer data) ++free_navigation_state (gpointer data) + { +- RestoreTabData *tab_data = data; ++ NautilusNavigationState *navigation_state = data; + +- g_list_free_full (tab_data->back_list, g_object_unref); +- g_list_free_full (tab_data->forward_list, g_object_unref); +- nautilus_file_unref (tab_data->file); ++ g_list_free_full (navigation_state->back_list, g_object_unref); ++ g_list_free_full (navigation_state->forward_list, g_object_unref); ++ nautilus_file_unref (navigation_state->file); ++ g_clear_object (&navigation_state->current_location_bookmark); + +- g_free (tab_data); ++ g_free (navigation_state); + } + + void +-nautilus_window_slot_restore_from_data (NautilusWindowSlot *self, +- RestoreTabData *data) ++nautilus_window_slot_restore_navigation_state (NautilusWindowSlot *self, ++ NautilusNavigationState *data) + { + NautilusWindowSlotPrivate *priv; + +@@ -181,14 +182,16 @@ nautilus_window_slot_restore_from_data (NautilusWindowSlot *self, + + priv->view_mode_before_search = data->view_before_search; + ++ g_set_object (&priv->current_location_bookmark, data->current_location_bookmark); ++ + priv->location_change_type = NAUTILUS_LOCATION_CHANGE_RELOAD; + } + +-RestoreTabData * +-nautilus_window_slot_get_restore_tab_data (NautilusWindowSlot *self) ++NautilusNavigationState * ++nautilus_window_slot_get_navigation_state (NautilusWindowSlot *self) + { + NautilusWindowSlotPrivate *priv; +- RestoreTabData *data; ++ NautilusNavigationState *data; + GList *back_list; + GList *forward_list; + +@@ -211,11 +214,12 @@ nautilus_window_slot_get_restore_tab_data (NautilusWindowSlot *self) + * the view mode before search and a reference to the file. + * A GFile isn't enough, as the NautilusFile also keeps a + * reference to the search directory */ +- data = g_new0 (RestoreTabData, 1); ++ data = g_new0 (NautilusNavigationState, 1); + data->back_list = back_list; + data->forward_list = forward_list; + data->file = nautilus_file_get (priv->location); + data->view_before_search = priv->view_mode_before_search; ++ g_set_object (&data->current_location_bookmark, priv->current_location_bookmark); + + return data; + } +diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h +index bda1a920f..2edc96786 100644 +--- a/src/nautilus-window-slot.h ++++ b/src/nautilus-window-slot.h +@@ -48,7 +48,8 @@ typedef struct + gint view_before_search; + GList *back_list; + GList *forward_list; +-} RestoreTabData; ++ NautilusBookmark *current_location_bookmark; ++} NautilusNavigationState; + + struct _NautilusWindowSlotClass { + GtkBoxClass parent_class; +@@ -117,13 +118,13 @@ void nautilus_window_slot_search (NautilusWindowSlot * + gboolean nautilus_window_slot_handles_location (NautilusWindowSlot *self, + GFile *location); + +-void nautilus_window_slot_restore_from_data (NautilusWindowSlot *self, +- RestoreTabData *data); ++void nautilus_window_slot_restore_navigation_state (NautilusWindowSlot *self, ++ NautilusNavigationState *data); + +-RestoreTabData* nautilus_window_slot_get_restore_tab_data (NautilusWindowSlot *self); ++NautilusNavigationState* nautilus_window_slot_get_navigation_state (NautilusWindowSlot *self); + + /* Only used by slot-dnd */ + NautilusView* nautilus_window_slot_get_current_view (NautilusWindowSlot *slot); + +-void free_restore_tab_data (gpointer data); ++void free_navigation_state (gpointer data); + #endif /* NAUTILUS_WINDOW_SLOT_H */ +diff --git a/src/nautilus-window.c b/src/nautilus-window.c +index 175da6fce..900239cb8 100644 +--- a/src/nautilus-window.c ++++ b/src/nautilus-window.c +@@ -1349,7 +1349,7 @@ action_restore_tab (GSimpleAction *action, + NautilusWindowOpenFlags flags; + g_autoptr (GFile) location = NULL; + NautilusWindowSlot *slot; +- RestoreTabData *data; ++ NautilusNavigationState *data; + + priv = nautilus_window_get_instance_private (window); + +@@ -1370,9 +1370,9 @@ action_restore_tab (GSimpleAction *action, + slot = nautilus_window_create_and_init_slot (window, location, flags); + + nautilus_window_slot_open_location_full (slot, location, flags, NULL); +- nautilus_window_slot_restore_from_data (slot, data); ++ nautilus_window_slot_restore_navigation_state (slot, data); + +- free_restore_tab_data (data); ++ free_navigation_state (data); + } + + static void +@@ -1579,7 +1579,7 @@ nautilus_window_slot_close (NautilusWindow *window, + { + NautilusWindowPrivate *priv; + NautilusWindowSlot *next_slot; +- RestoreTabData *data; ++ NautilusNavigationState *data; + + DEBUG ("Requesting to remove slot %p from window %p", slot, window); + if (window == NULL) +@@ -1595,7 +1595,7 @@ nautilus_window_slot_close (NautilusWindow *window, + nautilus_window_set_active_slot (window, next_slot); + } + +- data = nautilus_window_slot_get_restore_tab_data (slot); ++ data = nautilus_window_slot_get_navigation_state (slot); + if (data != NULL) + { + g_queue_push_head (priv->tab_data_queue, data); +@@ -2533,7 +2533,7 @@ nautilus_window_finalize (GObject *object) + G_CALLBACK (nautilus_window_on_undo_changed), + window); + +- g_queue_free_full (priv->tab_data_queue, free_restore_tab_data); ++ g_queue_free_full (priv->tab_data_queue, free_navigation_state); + + g_object_unref (priv->pad_controller); + +-- +2.35.1 + diff --git a/SOURCES/window-window-slot-Save-and-restore-navigation-histo.patch b/SOURCES/window-window-slot-Save-and-restore-navigation-histo.patch new file mode 100644 index 0000000..01c25ed --- /dev/null +++ b/SOURCES/window-window-slot-Save-and-restore-navigation-histo.patch @@ -0,0 +1,242 @@ +From fe7533b0b82e2ebc7767006ee9768572700a91df Mon Sep 17 00:00:00 2001 +From: Sachin Daluja <30343-sachindaluja@users.noreply.gitlab.gnome.org> +Date: Sun, 10 May 2020 22:30:03 -0400 +Subject: [PATCH] window, window-slot: Save and restore navigation history + +When a new window slot instance replaces the existing one to handle the new +location. + +This allows back and forward history lists to be preserved when the window +switches between instances of different window slot classes. + +Closes https://gitlab.gnome.org/GNOME/nautilus/-/issues/32 +--- + src/nautilus-window-slot.c | 48 +++++++++++++++++++--- + src/nautilus-window-slot.h | 13 ++++++ + src/nautilus-window.c | 84 +++++++++++++++++++++++++++++++++++++- + 3 files changed, 138 insertions(+), 7 deletions(-) + +diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c +index e688f0716..69040fc44 100644 +--- a/src/nautilus-window-slot.c ++++ b/src/nautilus-window-slot.c +@@ -176,6 +176,9 @@ nautilus_window_slot_restore_navigation_state (NautilusWindowSlot *self, + + priv = nautilus_window_slot_get_instance_private (self); + ++ /* We are restoring saved history to newly created slot with no history. */ ++ g_warn_if_fail (priv->back_list == NULL && priv->forward_list == NULL); ++ + priv->back_list = g_steal_pointer (&data->back_list); + + priv->forward_list = g_steal_pointer (&data->forward_list); +@@ -2003,12 +2006,11 @@ nautilus_window_slot_set_content_view (NautilusWindowSlot *self, + } + + void +-nautilus_window_back_or_forward (NautilusWindow *window, +- gboolean back, +- guint distance, +- NautilusWindowOpenFlags flags) ++nautilus_window_slot_back_or_forward (NautilusWindowSlot *self, ++ gboolean back, ++ guint distance, ++ NautilusWindowOpenFlags flags) + { +- NautilusWindowSlot *self; + GList *list; + GFile *location; + guint len; +@@ -2016,7 +2018,6 @@ nautilus_window_back_or_forward (NautilusWindow *window, + GFile *old_location; + NautilusWindowSlotPrivate *priv; + +- self = nautilus_window_get_active_slot (window); + priv = nautilus_window_slot_get_instance_private (self); + list = back ? priv->back_list : priv->forward_list; + +@@ -3308,3 +3309,38 @@ nautilus_window_slot_get_loading (NautilusWindowSlot *self) + + return priv->loading; + } ++ ++/* ++ * Open the specified location and set up the navigation history including the ++ * back and forward lists. This function is intended to be called when switching ++ * between NautilusWindowSlot and NautilusOtherLocationsWindowSlot. It allows ++ * the navigation history accumulated in the slot being replaced to be loaded ++ * into the replacing slot. ++ * ++ * The 'location' member variable is set to the new location before calling ++ * begin_location_change() to ensure that it matches the ++ * 'current_location_bookmark' member as expected by the location change ++ * pipeline. ++ */ ++void ++nautilus_window_slot_open_location_set_navigation_state (NautilusWindowSlot *self, ++ GFile *location, ++ NautilusWindowOpenFlags flags, ++ GList *new_selection, ++ NautilusLocationChangeType change_type, ++ NautilusNavigationState *navigation_state, ++ guint distance) ++{ ++ NautilusWindowSlotPrivate *priv; ++ ++ priv = nautilus_window_slot_get_instance_private (self); ++ ++ nautilus_window_slot_restore_navigation_state (self, navigation_state); ++ ++ g_clear_object (&priv->location); ++ ++ priv->location = nautilus_file_get_location (navigation_state->file); ++ ++ begin_location_change (self, location, NULL, new_selection, ++ change_type, distance, NULL); ++} +diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h +index 2edc96786..cbd3454ce 100644 +--- a/src/nautilus-window-slot.h ++++ b/src/nautilus-window-slot.h +@@ -82,6 +82,14 @@ void nautilus_window_slot_open_location_full (NautilusWindowSlot + NautilusWindowOpenFlags flags, + GList *new_selection); + ++void nautilus_window_slot_open_location_set_navigation_state (NautilusWindowSlot *slot, ++ GFile *location, ++ NautilusWindowOpenFlags flags, ++ GList *new_selection, ++ NautilusLocationChangeType change_type, ++ NautilusNavigationState *navigation_state, ++ guint distance); ++ + GFile * nautilus_window_slot_get_location (NautilusWindowSlot *slot); + + NautilusBookmark *nautilus_window_slot_get_bookmark (NautilusWindowSlot *slot); +@@ -126,5 +134,10 @@ NautilusNavigationState* nautilus_window_slot_get_navigation_state (NautilusWind + /* Only used by slot-dnd */ + NautilusView* nautilus_window_slot_get_current_view (NautilusWindowSlot *slot); + ++void nautilus_window_slot_back_or_forward (NautilusWindowSlot *slot, ++ gboolean back, ++ guint distance, ++ NautilusWindowOpenFlags flags); ++ + void free_navigation_state (gpointer data); + #endif /* NAUTILUS_WINDOW_SLOT_H */ +diff --git a/src/nautilus-window.c b/src/nautilus-window.c +index 900239cb8..af01b43e7 100644 +--- a/src/nautilus-window.c ++++ b/src/nautilus-window.c +@@ -613,6 +613,7 @@ nautilus_window_open_location_full (NautilusWindow *window, + { + NautilusWindowSlot *active_slot; + gboolean new_tab_at_end; ++ NautilusNavigationState *navigation_state = NULL; + + /* The location owner can be one of the slots requesting to handle an + * unhandled location. But this slot can be destroyed when switching to +@@ -644,6 +645,8 @@ nautilus_window_open_location_full (NautilusWindow *window, + } + else if (!nautilus_window_slot_handles_location (target_slot, location)) + { ++ navigation_state = nautilus_window_slot_get_navigation_state (active_slot); ++ + target_slot = replace_active_slot (window, location, flags); + } + +@@ -655,7 +658,19 @@ nautilus_window_open_location_full (NautilusWindow *window, + nautilus_window_set_active_slot (window, target_slot); + } + +- nautilus_window_slot_open_location_full (target_slot, location, flags, selection); ++ if (navigation_state != NULL) ++ { ++ nautilus_window_slot_open_location_set_navigation_state (target_slot, ++ location, flags, selection, ++ NAUTILUS_LOCATION_CHANGE_STANDARD, ++ navigation_state, 0); ++ ++ free_navigation_state (navigation_state); ++ } ++ else ++ { ++ nautilus_window_slot_open_location_full (target_slot, location, flags, selection); ++ } + + g_object_unref (location); + } +@@ -3099,3 +3114,70 @@ nautilus_window_search (NautilusWindow *window, + g_warning ("Trying search on a slot but no active slot present"); + } + } ++ ++/* Ideally, this method should be a simple wrapper for the slot method. However, ++ * going back or forward can result in a new slot (or another subclass), so we ++ * workaround that by duplicating part of nautilus_window_slot_back_or_forward() ++ */ ++void ++nautilus_window_back_or_forward (NautilusWindow *window, ++ gboolean back, ++ guint distance, ++ NautilusWindowOpenFlags flags) ++{ ++ NautilusWindowSlot *slot; ++ GList *next_location_list, *back_list, *forward_list; ++ GFile *next_location; ++ guint len; ++ NautilusBookmark *next_location_bookmark; ++ gboolean active_slot_handles_location; ++ ++ slot = nautilus_window_get_active_slot (window); ++ back_list = nautilus_window_slot_get_back_history (slot); ++ forward_list = nautilus_window_slot_get_forward_history (slot); ++ ++ next_location_list = back ? back_list : forward_list; ++ ++ len = (guint) g_list_length (next_location_list); ++ ++ /* If we can't move in the direction at all, just return. */ ++ if (len == 0) ++ { ++ return; ++ } ++ ++ /* If the distance to move is off the end of the list, go to the end ++ * of the list. */ ++ if (distance >= len) ++ { ++ distance = len - 1; ++ } ++ ++ next_location_bookmark = g_list_nth_data (next_location_list, distance); ++ next_location = nautilus_bookmark_get_location (next_location_bookmark); ++ ++ active_slot_handles_location = nautilus_window_slot_handles_location (slot, next_location); ++ ++ if (!active_slot_handles_location) ++ { ++ NautilusNavigationState *navigation_state; ++ NautilusLocationChangeType location_change_type; ++ ++ navigation_state = nautilus_window_slot_get_navigation_state (slot); ++ ++ location_change_type = back ? NAUTILUS_LOCATION_CHANGE_BACK : NAUTILUS_LOCATION_CHANGE_FORWARD; ++ ++ slot = replace_active_slot (window, next_location, flags); ++ ++ nautilus_window_slot_open_location_set_navigation_state (slot, ++ next_location, flags, NULL, ++ location_change_type, ++ navigation_state, distance); ++ ++ free_navigation_state (navigation_state); ++ } ++ else ++ { ++ nautilus_window_slot_back_or_forward (slot, back, distance, flags); ++ } ++} +-- +2.35.1 + diff --git a/SPECS/nautilus.spec b/SPECS/nautilus.spec new file mode 100644 index 0000000..5d868e7 --- /dev/null +++ b/SPECS/nautilus.spec @@ -0,0 +1,2134 @@ +%global glib2_version 2.55.1 +%global gnome_desktop3_version 3.0.0 +%global gtk3_version 3.22.26 +%global libxml2_version 2.7.8 +%global libexif_version 0.6.20 +%global exempi_version 2.1.0 +%global gsettings_desktop_schemas_version 3.8.0 + +Name: nautilus +Version: 3.28.1 +Release: 23%{?dist} +Summary: File manager for GNOME + +License: GPLv3+ +URL: https://wiki.gnome.org/Apps/Nautilus +Source0: https://download.gnome.org/sources/%{name}/3.28/%{name}-%{version}.tar.xz + +Patch0: 0001-dbus-manager-Implement-trashing-files.patch +Patch1: 0002-dbus-manager-Implement-creation-of-new-folders.patch +Patch2: 0003-dbus-manager-Implement-undo-redo.patch +Patch3: 0004-dbus-manager-Use-a-more-robust-copy-operation.patch +Patch4: 0005-file-operations-Don-t-crash-if-source-file-not-prese.patch +Patch5: 0006-properties-window-Keep-alive-properties-window-if-ca.patch +Patch6: 0007-dbus-manager-Keep-application-alive-for-operations.patch +Patch7: 0008-dbus-manager-Drop-copy-file-operation.patch +Patch8: 0009-dbus-Implement-move-operation.patch +Patch9: 0010-dbus-manager-Fix-double-free.patch +Patch10: 0011-dbus-manager-Fix-not-holding-application.patch +Patch11: 0012-clipboard-Use-text-based-clipboard-only.patch +Patch12: 0013-dbus-manager-Provide-undo-status.patch +Patch13: 0014-clipboard-Prevent-crash-when-selection-data-is-empty.patch +Patch14: add-desktop-icons-rename.patch +Patch15: remove-nfs-support-strings.patch +Patch16: fix-criticals-when-connecting-to-remote-locations.patch +Patch17: man-remove-geometry-option.patch +Patch18: org.gnome.Nautilus.appdata.xml.in.in-No-screenshots-.patch +Patch19: data-Fix-caption-capitalisation-in-appdata-file.patch +Patch20: window-Add-website-link-to-About-dialog.patch +Patch21: appdata-Use-Files-instead-of-Nautilus.patch +Patch22: docs-Add-nautilus-autorun-software-man-page.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1721133 +Patch23: window-Fix-criticals-when-moving-file-to-trash.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1721124 +Patch24: properties-window-Fix-criticals-when-closing.patch +Patch25: properties-window-Fix-crashes-when-cancelled.patch +Patch26: properties-window-Fix-crashes-when-opened-multiple-t.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1646352 +Patch27: search-engine-tracker-Do-not-lose-filename-results-d.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1207179 +Patch28: files-view-Clear-selection-if-any-files-don-t-match-.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1566027 +Patch29: properties-window-Fix-endless-content-size-calculati.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1778579 +Patch30: file-operations-Honor-umask-when-creating-new-files.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1816070 +Patch31: nautilus-mime-actions.c-No-Application-Installed-dia.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1847061 +Patch32: search-engine-tracker-Fix-broken-query-under-some-lo.patch +Patch33: search-engine-tracker-Expand-macro-as-string.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1906499 +Patch34: nautilus-file.c-Fix-open-writable-file-in-recent-tab.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=2068092 +Patch35: window-Streamline-RestoreTabData-memory-management.patch +Patch36: window-slot-Rename-RestoreTabData-to-NautilusNavigat.patch +Patch37: window-window-slot-Save-and-restore-navigation-histo.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=2068089 +Patch38: Add-actions-to-the-toolbar.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=2094431 +Patch39: files-view-Add-menu-item-to-copy-current-path.patch +Patch40: files-view-Backport-translations.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=2106241 +Patch41: nautilus-canvas-container-Remove-the-include-visible.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=2150894 +Patch42: Revert-application-add-common-startup-code.patch +Patch43: application-Export-FileManager1-iface-from-dbus_regi.patch +Patch44: freedesktop-dbus-Try-to-own-the-name-until-after-exp.patch + +BuildRequires: gtk-doc +BuildRequires: meson +BuildRequires: gcc +BuildRequires: pkgconfig(exempi-2.0) >= %{exempi_version} +BuildRequires: pkgconfig(gexiv2) +BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(gnome-autoar-0) +BuildRequires: pkgconfig(gnome-desktop-3.0) >= %{gnome_desktop3_version} +BuildRequires: pkgconfig(gobject-introspection-1.0) +BuildRequires: pkgconfig(gsettings-desktop-schemas) >= %{gsettings_desktop_schemas_version} +BuildRequires: pkgconfig(gtk+-3.0) >= %{gtk3_version} +BuildRequires: pkgconfig(libexif) >= %{libexif_version} +BuildRequires: pkgconfig(libxml-2.0) >= %{libxml2_version} +BuildRequires: pkgconfig(tracker-sparql-2.0) +BuildRequires: pkgconfig(x11) +BuildRequires: /usr/bin/appstream-util +BuildRequires: desktop-file-utils +BuildRequires: gettext +BuildRequires: libselinux-devel + +Requires: glib2%{_isa} >= %{glib2_version} +Requires: gsettings-desktop-schemas%{_isa} >= %{gsettings_desktop_schemas_version} +Requires: gtk3%{_isa} >= %{gtk3_version} +Requires: gvfs%{_isa} +Requires: libexif%{_isa} >= %{libexif_version} +# the main binary links against libnautilus-extension.so +# don't depend on soname, rather on exact version +Requires: %{name}-extensions%{_isa} = %{version}-%{release} + +# Explicitly conflict with older gedit for "enable-delete" setting removal +Conflicts: gedit < 2:3.16.0 + +%description +Nautilus is the file manager and graphical shell for the GNOME desktop +that makes it easy to manage your files and the rest of your system. +It allows to browse directories on local and remote filesystems, preview +files and launch applications associated with them. +It is also responsible for handling the icons on the GNOME desktop. + +%package extensions +Summary: Nautilus extensions library +License: LGPLv2+ + +%description extensions +This package provides the libraries used by nautilus extensions. + +%package devel +Summary: Support for developing nautilus extensions +License: LGPLv2+ +Requires: %{name}%{_isa} = %{version}-%{release} +Requires: %{name}-extensions%{_isa} = %{version}-%{release} + +%description devel +This package provides libraries and header files needed +for developing nautilus extensions. + +%prep +%autosetup -p1 + +# Remove -Werror from compiler flags +sed -i '/-Werror/d' meson.build + +%build +%meson -Ddocs=true -Dselinux=true +%meson_build + +%install +%meson_install +rm -rf $RPM_BUILD_ROOT%{_datadir}/gtk-doc + +%find_lang %name + +%check +appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_datadir}/metainfo/org.gnome.Nautilus.appdata.xml +desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/*.desktop + +%ldconfig_scriptlets extensions + +%files -f %{name}.lang +%doc NEWS README.md +%license LICENSE +%{_datadir}/applications/* +%{_bindir}/* +%{_datadir}/dbus-1/services/org.gnome.Nautilus.service +%{_datadir}/dbus-1/services/org.freedesktop.FileManager1.service +%dir %{_datadir}/gnome-shell +%dir %{_datadir}/gnome-shell/search-providers +%{_datadir}/gnome-shell/search-providers/org.gnome.Nautilus.search-provider.ini +%{_datadir}/icons/hicolor/*/apps/org.gnome.Nautilus.png +%{_datadir}/icons/hicolor/symbolic/apps/org.gnome.Nautilus-symbolic.svg +%{_mandir}/man1/nautilus.1* +%{_mandir}/man1/nautilus-autorun-software.1* +%{_datadir}/glib-2.0/schemas/org.gnome.nautilus.gschema.xml +%{_datadir}/metainfo/org.gnome.Nautilus.appdata.xml +%dir %{_libdir}/nautilus +%dir %{_libdir}/nautilus/extensions-3.0 +%{_libdir}/nautilus/extensions-3.0/libnautilus-image-properties.so +%{_libdir}/nautilus/extensions-3.0/libnautilus-sendto.so + +%files extensions +%license libnautilus-extension/LICENSE +%{_libdir}/libnautilus-extension.so.* +%{_libdir}/girepository-1.0/*.typelib +%dir %{_libdir}/nautilus + +%files devel +%{_includedir}/nautilus +%{_libdir}/pkgconfig/* +%{_libdir}/*.so +%{_datadir}/gir-1.0/*.gir + +%changelog +* Thu Feb 23 2023 Ondrej Holy - 3.28.1-23 +- Try to own the name until after exporting skeleton (#2150894) + +* Wed Feb 01 2023 Ondrej Holy - 3.28.1-22 +- Export FileManager1 iface from dbus_register vfunc (#2150894) + +* Thu Sep 22 2022 Ondrej Holy - 3.28.1-21 +- Backport "_Copy Location" translations (#2099981) + +* Tue Aug 9 2022 Ondrej Holy - 3.28.1-20 +- Fix scrolling issues in the icon view on focus changes (#2106241) + +* Fri Jul 29 2022 Ondrej Holy - 3.28.1-19 +- Fix the "Copy Location" action to copy just the plain path (#2094431) + +* Mon Jun 20 2022 Ondrej Holy - 3.28.1-18 +- Add toolbar action to copy current location (#2094431) + +* Mon Jun 6 2022 Ondrej Holy - 3.28.1-17 +- Add actions to the toolbar (#2068089) + +* Wed Apr 13 2022 Ondrej Holy - 3.28.1-16 +- Save and restore navigation history when changing window slot (#2068092) + +* Wed Jan 6 2021 Ondrej Holy - 3.28.1-15 +- Fix activation_uri handling to prevent invalid bookmarks (rhbz#1906499) + +* Fri Jun 19 2020 Ondrej Holy - 3.28.1-14 +- Fix broken tracker query under certain locales (rhbz#1847061) + +* Fri Apr 17 2020 Ondrej Holy - 3.28.1-13 +- Clear selection if any files don't match the pattern (rhbz#1207179) +- Fix endless content size calculations (rhbz#1566027) +- Honor umask when creating new files (rhbz#1778579) +- Close "There is no application..." dialog after response (rhbz#1816070) + +* Mon Dec 9 2019 Ondrej Holy - 3.28.1-12 +- Do not lose filename results due to stop words (rhbz#1646352) + +* Thu Sep 26 2019 Ondrej Holy - 3.28.1-11 +- Fix criticals when moving file to trash (rhbz#1721133) +- Fix criticals when closing properties window (rhbz#1721124) + +* Thu Jul 4 2019 Ondrej Holy - 3.28.1-10 +- Add screenshots for GNOME Software in Appdata file (rhbz#1725107) +- Add website link to About dialog (rhbz#1725101) +- Use Files instead of Nautilus in Appdata file (rhbz#1725120) +- Add nautilus-autorun-software man page (rhbz#1725766) + +* Fri May 31 2019 Ondrej Holy - 3.28.1-9 +- Fix criticals when connecting to remote locations (rhbz#1643175) +- Remove geometry option from man page (rhbz#1612852) + +* Tue Apr 30 2019 Carlos Soriano - 3.26.1-8 +- Remove NFS support strings, since libnfs is not in RHEL + Resolves: RHBZ#1704704 + +* Mon Apr 29 2019 Carlos Soriano - 3.28.1-7 +- Disable extension doc generation, since generated files differ and + rpmlint fails when checking that both architectures of the -devel + library generate the same files. + It's an issue in docbook, used by gtk-doc, and althought fixed upstream + they didn't have a new release yet. + https://github.com/docbook/xslt10-stylesheets/issues/54 + Resolves: RHBZ#1667136 + +* Thu Apr 25 2019 Carlos Soriano - 3.28.1-6 +- Implement support for desktop icons renaming + Resolves: RHBZ#1667136 + +* Mon Nov 26 2018 Carlos Soriano - 3.28.1-5 +- Fix crash with new clipboard handling + Resolves: RHBZ#1629002 + +* Tue Aug 21 2018 Carlos Soriano - 3.28.1-4 +- Provide undo/redo status over dbus for the desktop icons integration + +* Wed Aug 15 2018 Carlos Soriano - 3.28.1-3 +- Implement text based clipboard for desktop icons integration + Resolves: RHBZ#1616190 + +* Tue Aug 14 2018 Carlos Soriano - 3.28.1-2 +- Add desktop icons integration + +* Mon Apr 09 2018 Kalev Lember - 3.28.1-1 +- Update to 3.28.1 +- Fix /usr/share/gnome-shell directory ownership + +* Sat Mar 31 2018 Michael Catanzaro - 3.28.0.1-2 +- Build with -Dselinux=true to turn it on explicitly, and remove downstream screenshots + +* Thu Mar 15 2018 Kalev Lember - 3.28.0.1-1 +- Update to 3.28.0.1 + +* Tue Mar 13 2018 Kalev Lember - 3.28.0-1 +- Update to 3.28.0 + +* Mon Mar 05 2018 Kalev Lember - 3.27.92.1-1 +- Update to 3.27.92.1 +- Remove -Werror from compiler flags + +* Tue Feb 13 2018 Björn Esser - 3.26.2-4 +- Rebuild against newer gnome-desktop3 package + +* Thu Feb 08 2018 Fedora Release Engineering - 3.26.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Feb 03 2018 Igor Gnatenko - 3.26.2-2 +- Switch to %%ldconfig_scriptlets + +* Tue Nov 21 2017 Kalev Lember - 3.26.2-1 +- Update to 3.26.2 + +* Wed Nov 08 2017 Igor Gnatenko - 3.26.0-2 +- Remove obsolete scriptlets +- Add BuildRequires: gcc + +* Wed Sep 13 2017 Kalev Lember - 3.26.0-1 +- Update to 3.26.0 + +* Tue Sep 05 2017 Kalev Lember - 3.25.92-1 +- Update to 3.25.92 + +* Tue Aug 15 2017 Kalev Lember - 3.25.90-1 +- Update to 3.25.90 + +* Tue Aug 01 2017 Kalev Lember - 3.25.1-1 +- Update to 3.25.1 +- Switch to the meson build system +- Reflect upstream license change to GPLv3+ + +* Thu Jul 27 2017 Debarshi Ray - 3.24.2.1-3 +- Rebuild against tracker-2.0 + +* Wed Jul 26 2017 Fedora Release Engineering - 3.24.2.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jul 18 2017 Kalev Lember - 3.24.2.1-1 +- Update to 3.24.2.1 + +* Tue May 09 2017 Kalev Lember - 3.24.1-1 +- Update to 3.24.1 + +* Tue Mar 21 2017 Kalev Lember - 3.24.0-1 +- Update to 3.24.0 + +* Fri Mar 17 2017 Kalev Lember - 3.23.92-1 +- Update to 3.23.92 + +* Mon Mar 06 2017 Kalev Lember - 3.23.91-1 +- Update to 3.23.91 + +* Wed Feb 15 2017 Richard Hughes - 3.23.90-1 +- Update to 3.23.90 + +* Fri Feb 10 2017 Fedora Release Engineering - 3.22.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Dec 12 2016 David King - 3.22.2-1 +- Update to 3.22.2 + +* Fri Oct 14 2016 Kalev Lember - 3.22.1-1 +- Update to 3.22.1 + +* Wed Sep 21 2016 Kalev Lember - 3.22.0-1 +- Update to 3.22.0 + +* Fri Sep 16 2016 Kalev Lember - 3.21.92-1 +- Update to 3.21.92 + +* Sat Sep 03 2016 Kalev Lember - 3.21.91.1-1 +- Update to 3.21.91.1 +- Filter private libgd from provides and requires +- Use upstream defaults for OnlyShowIn + +* Tue Aug 30 2016 Kalev Lember - 3.20.3-1 +- Update to 3.20.3 +- Don't set group tags + +* Mon Aug 01 2016 Kalev Lember - 3.20.2-1 +- Update to 3.20.2 + +* Thu Jun 02 2016 Kalev Lember - 3.20.1-1 +- Update to 3.20.1 + +* Wed Mar 23 2016 Kalev Lember - 3.20.0-1 +- Update to 3.20.0 + +* Fri Mar 18 2016 Kalev Lember - 3.19.93-1 +- Update to 3.19.93 + +* Mon Mar 14 2016 Richard Hughes - 3.19.91-1 +- Update to 3.19.91 + +* Mon Feb 29 2016 Richard Hughes - 3.19.90-1 +- Update to 3.19.90 + +* Thu Feb 04 2016 Fedora Release Engineering - 3.19.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Dec 14 2015 Kalev Lember - 3.19.2-1 +- Update to 3.19.2 + +* Wed Nov 18 2015 Kalev Lember - 3.18.2-2 +- Bump gtk3 dep to 3.18.5 (#1283246) + +* Fri Nov 13 2015 Kalev Lember - 3.18.2-1 +- Update to 3.18.2 + +* Thu Oct 15 2015 Kalev Lember - 3.18.1-1 +- Update to 3.18.1 + +* Tue Sep 22 2015 Kalev Lember - 3.18.0-1 +- Update to 3.18.0 +- Don't pull in all of nautilus for the -extensions subpackage +- Tighten a dep with the _isa macro +- Drop ancient obsoletes + +* Fri Sep 04 2015 Kalev Lember - 3.17.91-1 +- Update to 3.17.91 + +* Fri Aug 21 2015 Kalev Lember - 3.17.90-1 +- Update to 3.17.90 +- Use make_install macro + +* Mon Jul 27 2015 David King - 3.17.3-1 +- Update to 3.17.3 + +* Tue Jul 21 2015 David King - 3.17.2-3 +- Bump for new gnome-desktop3 + +* Wed Jun 17 2015 Fedora Release Engineering - 3.17.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri May 29 2015 David King - 3.17.2-1 +- Update to 3.17.2 + +* Wed May 13 2015 Kalev Lember - 3.16.2-1 +- Update to 3.16.2 + +* Mon May 04 2015 David King - 3.16.1-2 +- Add patch to fix misplaced style element + +* Wed Apr 15 2015 Kalev Lember - 3.16.1-1 +- Update to 3.16.1 + +* Mon Mar 30 2015 Richard Hughes - 3.16.0-2 +- Use better AppData screenshots + +* Tue Mar 24 2015 Kalev Lember - 3.16.0-1 +- Update to 3.16.0 + +* Tue Mar 17 2015 Kalev Lember - 3.15.92-1 +- Update to 3.15.92 + +* Thu Mar 12 2015 David King - 3.15.91-1 +- Update to 3.15.91 +- Validate AppData in check + +* Tue Feb 17 2015 Richard Hughes - 3.15.90-1 +- Update to 3.15.90 + +* Sun Jan 25 2015 David King - 3.15.4-1 +- Update to 3.15.4 +- Use pkgconfig for BuildRequires +- Update man page globs in files section +- Use license macro for license texts + +* Tue Nov 25 2014 Kalev Lember - 3.14.2-1 +- Update to 3.14.2 + +* Thu Nov 13 2014 Kalev Lember - 3.14.1-1 +- Update to 3.14.1 + +* Tue Sep 23 2014 Kalev Lember - 3.14.0-2 +- Drop redhat-menus dependency + +* Tue Sep 23 2014 Kalev Lember - 3.14.0-1 +- Update to 3.14.0 + +* Tue Sep 16 2014 Kalev Lember - 3.13.92-1 +- Update to 3.13.92 + +* Wed Sep 03 2014 Kalev Lember - 3.13.91-1 +- Update to 3.13.91 + +* Thu Aug 21 2014 Kalev Lember - 3.13.90-1 +- Update to 3.13.90 + +* Sun Aug 17 2014 Fedora Release Engineering - 3.13.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Tue Aug 12 2014 Rex Dieter 3.13.2-6 +- update mime scriptlet + +* Sat Aug 02 2014 Kalev Lember - 3.13.2-5 +- Fix appdata file name + +* Mon Jul 28 2014 Kalev Lember - 3.13.2-4 +- Rebuilt once more for tracker + +* Mon Jul 28 2014 Peter Robinson 3.13.2-3 +- rebuild (tracker) + +* Tue Jul 22 2014 Kalev Lember - 3.13.2-2 +- Rebuilt for gobject-introspection 1.41.4 + +* Tue Jul 22 2014 Kalev Lember - 3.13.2-1 +- Update to 3.13.2 + +* Sat Jun 07 2014 Fedora Release Engineering - 3.13.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu May 01 2014 Kalev Lember - 3.13.1-1 +- Update to 3.13.1 + +* Sat Apr 05 2014 Kalev Lember - 3.12.0-2 +- Update dep versions + +* Tue Mar 25 2014 Kalev Lember - 3.12.0-1 +- Update to 3.12.0 + +* Tue Mar 18 2014 Richard Hughes - 3.11.92-1 +- Update to 3.11.92 + +* Wed Feb 19 2014 Richard Hughes - 3.11.90-2 +- Rebuilt for gnome-desktop soname bump + +* Tue Feb 18 2014 Richard Hughes - 3.11.90-1 +- Update to 3.11.90 + +* Thu Dec 19 2013 Debarshi Ray - 3.11.3-1 +- Update to 3.11.3 + +* Tue Nov 19 2013 Richard Hughes - 3.11.2-1 +- Update to 3.11.2 + +* Mon Nov 04 2013 Kalev Lember - 3.10.1-1 +- Update to 3.10.1 + +* Wed Sep 25 2013 Kalev Lember - 3.10.0-1 +- Update to 3.10.0 + +* Wed Sep 18 2013 Kalev Lember - 3.9.92-1 +- Update to 3.9.92 + +* Wed Sep 04 2013 Kalev Lember - 3.9.91-1 +- Update to 3.9.91 + +* Thu Aug 22 2013 Kalev Lember - 3.9.90-1 +- Update to 3.9.90 + +* Sat Aug 03 2013 Fedora Release Engineering - 3.9.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Fri Jun 21 2013 Kalev Lember - 3.9.3-1 +- Update to 3.9.3 +- Use arch-specific deps + +* Sun Jun 16 2013 Matthias Clasen - 3.8.2-1 +- Update to 3.8.2 + +* Tue Apr 16 2013 Kalev Lember - 3.8.1-1 +- Update to 3.8.1 + +* Tue Mar 26 2013 Kalev Lember - 3.8.0-1 +- Update to 3.8.0 + +* Wed Mar 20 2013 Richard Hughes - 3.7.92-1 +- Update to 3.7.92 + +* Thu Mar 7 2013 Matthias Clasen - 3.7.91-1 +- Update to 3.7.91 + +* Wed Feb 20 2013 Kalev Lember - 3.7.90-2 +- Rebuilt for libgnome-desktop soname bump + +* Tue Feb 19 2013 Richard Hughes - 3.7.90-1 +- Update to 3.7.90 + +* Fri Feb 8 2013 Tomas Bzatek - 3.7.5-2 +- Disable smp build to fix intltool issues + +* Thu Feb 07 2013 Richard Hughes - 3.7.5-1 +- Update to 3.7.5 + +* Sun Jan 27 2013 Kalev Lember - 3.7.4-2 +- Rebuilt for tracker 0.16 ABI + +* Wed Jan 16 2013 Richard Hughes - 3.7.4-1 +- Update to 3.7.4 + +* Fri Dec 21 2012 Kalev Lember - 3.7.3-1 +- Update to 3.7.3 + +* Thu Dec 6 2012 Tomas Bzatek - 3.7.2-2 +- nautilus-devel should require nautilus-extensions + +* Tue Nov 20 2012 Richard Hughes - 3.7.2-1 +- Update to 3.7.2 + +* Fri Nov 09 2012 Kalev Lember - 3.7.1-1 +- Update to 3.7.1 +- Own the gtk-doc directories + +* Mon Oct 15 2012 Cosimo Cecchi - 3.6.1-1 +- Update to 3.6.1 + +* Tue Sep 25 2012 Cosimo Cecchi - 3.6.0-1 +- Update to 3.6.0 + +* Tue Sep 18 2012 Cosimo Cecchi - 3.5.92-1 +- Update to 3.5.92 + +* Tue Sep 04 2012 Cosimo Cecchi - 3.5.91-1 +- Update to 3.5.91 + +* Tue Aug 21 2012 Cosimo Cecchi - 3.5.90-1 +- Update to 3.5.90 + +* Fri Aug 10 2012 Cosimo Cecchi - 3.5.5-1 +- Update to 3.5.5 + +* Fri Jul 27 2012 Fedora Release Engineering - 3.5.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Jul 17 2012 Cosimo Cecchi - 3.5.4-2 +- Enable tracker support + +* Tue Jul 17 2012 Richard Hughes - 3.5.4-1 +- Update to 3.5.4 + +* Sat Jul 14 2012 Ville Skyttä - 3.5.3-2 +- Move ldconfig calls from main package to -extensions. + +* Tue Jun 26 2012 Richard Hughes - 3.5.3-1 +- Update to 3.5.3 + +* Thu Jun 07 2012 Richard Hughes - 3.5.2-1 +- Update to 3.5.2 + +* Sat May 05 2012 Kalev Lember - 3.5.1-1 +- Update to 3.5.1 + +* Tue Apr 24 2012 Kalev Lember - 3.4.1-2 +- Silence rpm scriptlet output + +* Mon Apr 16 2012 Richard Hughes - 3.4.1-1 +- Update to 3.4.1 + +* Mon Mar 26 2012 Cosimo Cecchi - 3.4.0-1 +- Update to 3.4.0 + +* Tue Mar 20 2012 Cosimo Cecchi - 3.3.92-1 +- Update to 3.3.92 + +* Tue Mar 06 2012 Cosimo Cecchi - 3.3.91-1 +- Update to 3.3.91 + +* Sun Feb 26 2012 Matthias Clasen - 3.3.90-1 +- Update to 3.3.90 + +* Tue Feb 7 2012 Cosimo Cecchi - 3.3.5-1 +- Update to 3.3.5 + +* Tue Jan 17 2012 Matthias Clasen - 3.3.4-1 +- Update to 3.3.4 + +* Fri Jan 13 2012 Fedora Release Engineering - 3.3.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Dec 20 2011 Matthias Clasen - 3.3.3-1 +- Update to 3.3.3 + +* Wed Nov 2 2011 Matthias Clasen - 3.3.1.1-1 +- Update to 3.3.1.1 + +* Wed Oct 26 2011 Fedora Release Engineering - 3.2.1-2 +- Rebuilt for glibc bug#747377 + +* Tue Oct 18 2011 Cosimo Cecchi - 3.2.1-1 +- Update to 3.2.1 + +* Tue Sep 27 2011 Cosimo Cecchi - 3.2.0-1 +- Update to 3.2.0 + +* Mon Sep 19 2011 Cosimo Cecchi - 3.1.92-1 +- Update to 3.1.92 + +* Wed Aug 31 2011 Matthias Clasen 3.1.90-1 +- Update to 3.1.90 + +* Mon Jul 25 2011 Matthias Clasen 3.1.4-1 +- Update to 3.1.4 + +* Mon Jul 04 2011 Bastien Nocera 3.1.3-1 +- Update to 3.1.3 + +* Tue Jun 14 2011 Cosimo Cecchi - 3.1.2-1 +- Update to 3.1.2 + +* Wed May 11 2011 Matthias Clasen - 3.1.1-1 +- Update to 3.1.1 + +* Mon Apr 25 2011 Matthias Clasen - 3.0.1-1 +- Update to 3.0.1 + +* Mon Apr 04 2011 Cosimo Cecchi - 3.0.0-1 +- Update to 3.0.0 + +* Wed Mar 30 2011 Cosimo Cecchi - 2.91.94-1 +- Update to 2.91.94 + +* Sun Mar 27 2011 Colin Walters - 2.91.93-2 +- Drop --vendor from nautilus.desktop + Vendor prefixes are pointless, and in this case breaks upstream + components trying to reference each other via .desktop file, such + as GNOME Shell having nautilus.desktop in its default favorite + list. + +* Fri Mar 25 2011 Matthias Clasen - 2.91.93-1 +- Update to 2.91.93 + +* Mon Mar 21 2011 Cosimo Cecchi - 2.91.92-1 +- Update to 2.91.92 + +* Mon Mar 07 2011 Cosimo Cecchi 2.91.91-1 +- Update to 2.91.91 + +* Tue Feb 22 2011 Cosimo Cecchi 2.91.90.1-1 +- Update to 2.91.90.1 + +* Mon Feb 21 2011 Cosimo Cecchi 2.91.90-1 +- Update to 2.91.90 + +* Thu Feb 10 2011 Matthias Clasen 2.91.9-4 +- Rebuild against newer gtk + +* Tue Feb 08 2011 Fedora Release Engineering - 2.91.9-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Feb 7 2011 Cosimo Cecchi - 2.91.9-2 +- Add a patch from upstream for missing bookmark names + +* Fri Feb 4 2011 Cosimo Cecchi - 2.91.9-1 +- Update to 2.91.9 + +* Wed Feb 2 2011 Matthias Clasen - 2.91.8-4 +- Rebuild against new gtk + +* Tue Feb 1 2011 Tomas Bzatek - 2.91.8-3 +- Remove last traces of gconf (#674359) + +* Mon Jan 31 2011 Cosimo Cecchi - 2.91.8-2 +- Update selinux patch + +* Mon Jan 31 2011 Cosimo Cecchi - 2.91.8-1 +- Update to 2.91.8 + +* Wed Jan 12 2011 Matthias Clasen - 2.91.7-2 +- Drop explicit gnome-desktop dependency +- Drop some no-longer-required tweaks + +* Tue Jan 11 2011 Cosimo Cecchi - 2.91.7-1 +- Update to 2.91.7 + +* Fri Jan 7 2011 Matthias Clasen - 2.91.6-1 +- Update to 2.91.6 + +* Fri Dec 3 2010 Matthias Clasen - 2.91.3-2 +- Rebuild against new gtk + +* Mon Nov 29 2010 Cosimo Cecchi - 2.91.3-1 +- Update to 2.91.3 +- Drop unnecessary patches + +* Wed Nov 10 2010 Tomas Bzatek - 2.91.2-1 +- Update to 2.91.2 + +* Mon Nov 1 2010 Matthias Clasen - 2.91.1-1 +- Update to 2.91.1 + +* Wed Oct 6 2010 Matthias Clasen - 2.91.0-1 +- Update to 2.91.0 + +* Wed Sep 29 2010 jkeating - 2.90.1-6.gitf3bbee7 +- Rebuilt for gcc bug 634757 + +* Sat Sep 25 2010 Owen Taylor - 2.90.1-5.gitf3bbee7 +- Bump and rebuild for gtk3 ABI changes + +* Tue Sep 21 2010 Matthias Clasen - 2.90.1-4.gitf3bbee7 +- git snapshot +- Rebuild against newer gobject-introspection + +* Mon Aug 30 2010 Tomas Bzatek - 2.90.1-2 +- Require gsettings-desktop-schemas (#628273) + +* Tue Aug 24 2010 Matthias Clasen - 2.90.1-1 +- Update to 2.31.91 + +* Wed Aug 18 2010 Tomas Bzatek - 2.31.90-1 +- Update to 2.31.90 + +* Thu Aug 12 2010 Tomas Bzatek - 2.31.6-1 +- Update to 2.31.6 + +* Fri Aug 6 2010 Tomas Bzatek - 2.31.5-3.really.2.30.1 +- Revert back (temporarily) to 2.30.1 and mask it as 2.31.5 due to recent gnome3 changes + +* Thu Jul 15 2010 Colin Walters - 2.31.5-2 +- Rebuild with new gobject-introspection + +* Mon Jul 12 2010 Matthias Clasen 2.31.5-1 +- Update to 2.31.5 + +* Mon Jun 28 2010 Matthias Clasen 2.31.4-1 +- Update to 2.31.4 + +* Wed Jun 23 2010 Bastien Nocera 2.31.3-4.20100618git +- Fix libnautilus-extensions pkg-config files + +* Wed Jun 23 2010 Matthias Clasen - 2.31.3-3.20100618git +- Rebuild to get rid of mixed gtk deps + +* Fri Jun 18 2010 Matthias Clasen - 2.31.3-2.20100618git +- git snapshot that builds against GLib 2.25.9 and GTK+ 2.90.3 + +* Tue Jun 8 2010 Matthias Clasen - 2.31.3-1 +- Update to 2.31.3 + +* Mon May 24 2010 Tomas Bzatek - 2.31.2-1 +- Update to 2.31.2 + +* Tue May 4 2010 Tomas Bzatek - 2.31.1-1 +- Update to 2.31.1 + +* Tue May 4 2010 Tomas Bzatek - 2.30.1-3 +- Remove .desktop entry in applications > system tools (#583790) + +* Mon Apr 26 2010 Tomas Bzatek - 2.30.1-2 +- Do not show Unmount when showing Eject/Safe removal + +* Mon Apr 26 2010 Tomas Bzatek - 2.30.1-1 +- Update to 2.30.1 + +* Sat Apr 24 2010 Matthias Clasen - 2.30.0-3 +- Also obsolete eel2-devel (#583722) + +* Tue Apr 13 2010 Seth Vidal - 2.30.0-2 +- fix obsoletes/provides for eel2 to not include pkg name in ver/rel + +* Mon Mar 29 2010 Tomas Bzatek - 2.30.0-1 +- Update to 2.30.0 + +* Mon Mar 15 2010 Tomas Bzatek - 2.29.92.1-1 +- Update to 2.29.92.1 +- Fix eel2 obsoletion + +* Mon Mar 8 2010 Tomas Bzatek - 2.29.92-1 +- Update to 2.29.92 + +* Mon Feb 22 2010 Matthias Clasen - 2.29.91-1 +- Update to 2.29.91 + +* Wed Feb 17 2010 Tomas Bzatek - 2.29.90-2 +- Explicitly require exact nautilus-extensions package (#565802) + +* Tue Feb 9 2010 Tomas Bzatek - 2.29.90-1 +- Update to 2.29.90 + +* Thu Jan 28 2010 Jesse Keating - 2.29.2-2 +- Add a requires to keep nautilus-extensions updated if nautilus gets updated + +* Mon Jan 25 2010 Tomas Bzatek - 2.29.2-1 +- Update to 2.29.2 + +* Sun Jan 17 2010 Matthias Clasen - 2.29.1-2 +- Rebuild + +* Fri Dec 18 2009 Tomas Bzatek - 2.29.1-1 +- Update to 2.29.1 + +* Thu Dec 10 2009 Jon McCann - 2.28.2-3 +- Update the monitor changes patch (gnome #147808) + +* Tue Dec 8 2009 Tomas Bzatek - 2.28.2-2 +- Fix some memory leaks + +* Mon Nov 30 2009 Alexander Larsson - 2.28.2-1 +- Update to 2.28.2 + +* Wed Nov 18 2009 Tomas Bzatek - 2.28.1-4 +- Proper fix for crash in the infopanel (#531826) + +* Mon Nov 9 2009 Matthias Clasen - 2.28.1-3 +- Handle monitor changes when drawing the background (gnome #147808) + +* Mon Nov 2 2009 Tomas Bzatek - 2.28.1-2 +- Don't crash in infopanel on invalid selection (#531826) + +* Wed Oct 21 2009 Tomas Bzatek - 2.28.1-1 +- Update to 2.28.1 + +* Thu Sep 24 2009 Matthias Clasen - 2.28.0-3 +- Avoid lingering menuitems (#518570) + +* Wed Sep 23 2009 Ray Strode 2.28.0-2 +- Fix crossfade + +* Mon Sep 21 2009 Tomas Bzatek - 2.28.0-1 +- Update to 2.28.0 + +* Wed Sep 9 2009 Matthias Clasen - 2.27.92-2 +- Fix desktop files to be valid + +* Mon Sep 7 2009 Tomas Bzatek - 2.27.92-1 +- Update to 2.27.92 + +* Sun Sep 6 2009 Matthias Clasen - 2.27.91-3 +- Fix uninhibiting when long-running operations are over + +* Wed Aug 26 2009 Matthias Clasen - 2.27.91-2 +- Make nautilus-file-management-properties not crash on start + +* Mon Aug 24 2009 Matthias Clasen - 2.27.91-1 +- Update to 2.27.91 + +* Wed Aug 12 2009 Matthias Clasen - 2.27.4-5 +- Turn off autorun for x-content/software + +* Mon Aug 3 2009 Matthias Clasen - 2.27.4-4 +- Show icons for bookmarks and similar in menus + +* Sun Aug 2 2009 Matthias Clasen - 2.27.4-3 +- Drop desktop-backgrounds-basic dep that we've carried for 9 years + without ever making use of it + +* Sat Jul 25 2009 Fedora Release Engineering - 2.27.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue Jul 14 2009 Matthias Clasen - 2.27.4-1 +- Update to 2.27.4 + +* Mon Jun 15 2009 Tomas Bzatek - 2.27.2-1 +- Update to 2.27.2 + +* Tue May 5 2009 Tomas Bzatek - 2.27.1-1 +- Update to 2.27.1 + +* Mon Apr 27 2009 Matthias Clasen - 2.26.2-3 +- Don't drop schemas translations from po files anymore + +* Thu Apr 16 2009 Alexander Larsson - 2.26.2-2 +- Fix whitespace on the right in icon view when zooming + +* Mon Apr 13 2009 Alexander Larsson - 2.26.2-1 +- Update to 2.26.2 + +* Mon Apr 6 2009 Tomas Bzatek - 2.26.1-2 +- Fix dragging files via NFS moves instead of copy (#456515) + +* Thu Apr 2 2009 Tomas Bzatek - 2.26.1-1 +- Update to 2.26.1 + +* Mon Mar 16 2009 Tomas Bzatek - 2.26.0-1 +- Update to 2.26.0 + +* Thu Mar 12 2009 Matthias Clasen - 2.25.93-2 +- Avoid respawning in a loop when not showing the desktop (#485375) + +* Wed Mar 11 2009 Tomas Bzatek - 2.25.93-1 +- Update to 2.25.93 + +* Mon Mar 2 2009 Tomas Bzatek - 2.25.92-1 +- Update to 2.25.92 + +* Wed Feb 25 2009 Fedora Release Engineering - 2.25.91-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Thu Feb 19 2009 Tomas Bzatek - 2.25.91-2 +- Workaround for broken gcc optimization (#486088) + +* Mon Feb 16 2009 Tomas Bzatek - 2.25.91-1 +- Update to 2.25.91 + +* Mon Feb 2 2009 Tomas Bzatek - 2.25.4-1 +- Update to 2.25.4 + +* Tue Jan 20 2009 Matthias Clasen - 2.25.3-2 +- Reenable the translation size reduction + +* Tue Jan 20 2009 Tomas Bzatek - 2.25.3-1 +- Update to 2.25.3 + +* Mon Jan 19 2009 Ray Strode - 2.25.2-7 +- Update fade patch to work with updated gnome-desktop api +- Fix fade start pixmap + +* Wed Jan 7 2009 Ray Strode - 2.25.2-6 +- Don't crash when closing spatial window very quickly after + opening it (gnome bug 552859) + +* Thu Dec 18 2008 Matthias Clasen - 2.25.2-5 +- Fix spec + +* Thu Dec 18 2008 - Ray Strode - 2.25.2-4 +- Add eel crossfade patch + +* Wed Dec 17 2008 - Bastien Nocera - 2.25.2-3 +- Rebuild for new libgnome-desktop + +* Tue Dec 16 2008 Matthias Clasen - 2.25.2-2 +- Drop the eel2 Obsoletes temporarily to give people some time + to port away + +* Tue Dec 16 2008 Matthias Clasen - 2.25.2-1 +- Update to 2.25.2 +- Clean up Requires +- Obsolete eel2 +- Drop hard dependency on gvfs backends. + These are pulled in by comps, anyway + +* Fri Dec 5 2008 Matthias Clasen - 2.25.1-5 +- Obsolete gnome-volume-manager + +* Fri Dec 5 2008 Tomas Bzatek - 2.25.1-4 +- Properly open new windows after long mount operation +- Fix callback connection to the GtkMountOperation dialog + +* Thu Dec 4 2008 Tomas Bzatek - 2.25.1-3 +- Fix BuildRequires + +* Thu Dec 4 2008 Tomas Bzatek - 2.25.1-2 +- Rediff the XDS patch + +* Tue Dec 2 2008 Tomas Bzatek - 2.25.1-1 +- Update to 2.25.1 + +* Wed Nov 26 2008 Tomas Bzatek - 2.24.2-1 +- Update to 2.24.2 + +* Fri Nov 21 2008 Matthias Clasen - 2.24.1-5 +- Better URL +- Tweak %%description + +* Thu Nov 13 2008 Matthias Clasen - 2.24.1-4 +- Rebuild + +* Mon Oct 27 2008 Tomas Bzatek - 2.24.1-3 +- Updated XDS support in tree view patch (sync with gnomebz #171655) + +* Fri Oct 24 2008 Alexander Larsson - 2.24.1-2 +- Manually check for fallback file icon since we're not + always returning that from gio anymore (from upstream) + +* Mon Oct 20 2008 Tomas Bzatek - 2.24.1-1 +- Update to 2.24.1 + +* Tue Oct 14 2008 Matthias Clasen - 2.24.0-3 +- Remove debug flags + +* Thu Sep 25 2008 Matthias Clasen - 2.24.0-2 +- Save some space + +* Sun Sep 21 2008 Matthias Clasen - 2.24.0-1 +- Update to 2.24.0 + +* Sat Sep 20 2008 Matthias Clasen - 2.23.92-3 +- Plug some memory leaks + +* Fri Sep 19 2008 Matthias Clasen - 2.23.92-2 +- Plug some memory leaks + +* Mon Sep 8 2008 Matthias Clasen - 2.23.92-1 +- Update to 2.23.92 + +* Tue Sep 02 2008 Tomas Bzatek - 2.23.91-1 +- Update to 2.23.91 + +* Sat Aug 30 2008 Matthias Clasen - 2.23.90-4 +- Plug a few small memory leaks + +* Thu Aug 28 2008 Matthias Clasen - 2.23.90-3 +- Pull in split-off gvfs backends + +* Wed Aug 27 2008 - Bastien Nocera - 2.23.90-2 +- Fix typo in the schemas file + +* Sat Aug 23 2008 Matthias Clasen - 2.23.90-1 +- Update to 2.23.90 + +* Mon Aug 4 2008 Tomas Bzatek - 2.23.6.1-1 +- Update to 2.23.6.1 +- Dropped upstreamed patches + +* Mon Aug 4 2008 Tomas Bzatek - 2.23.6-1 +- Update to 2.23.6 + +* Sun Jul 27 2008 Matthias Clasen - 2.23.5-3 +- More icon name fixes + +* Sun Jul 27 2008 Matthias Clasen - 2.23.5-2 +- Use standard icon names + +* Tue Jul 22 2008 Tomas Bzatek - 2.23.5.1-1 +- Update to 2.23.5.1 + +* Tue Jul 22 2008 Matthias Clasen - 2.23.5-1 +- Update to 2.23.5 + +* Tue Jun 17 2008 Tomas Bzatek - 2.23.4-1 +- Update to 2.23.4 + +* Thu Jun 12 2008 Tomas Bzatek - 2.23.3-2 +- Fix DnD segfaults (#450416, #450449) + +* Wed Jun 4 2008 Tomas Bzatek - 2.23.3-1 +- Update to 2.23.3 + +* Fri May 30 2008 Tomas Bzatek - 2.23.2-3 +- Add DnD support to drop files onto archive files with help + of file-roller (gnomebz #377157) +- Add fix preventing crash on bad GFileInfos (gnomebz #519743) + +* Fri May 16 2008 Tomas Bzatek - 2.23.2-2 +- Add treeview XDS drag&drop support (#446760) + +* Tue May 13 2008 Tomas Bzatek - 2.23.2-1 +- Update to 2.23.2 + +* Fri May 2 2008 David Zeuthen - 2.23.1-4 +- Default to "Ask what to do" for all actions (#444639) + +* Fri May 2 2008 Tomas Bzatek - 2.23.1-3 +- Mask file moving to nautilus-cd-burner window as copy operation (#443944) +- Don't allow recursive move/copy into itself (gnomebz #530720) + +* Thu Apr 24 2008 Tomas Bzatek - 2.23.1-2 +- Add SELinux patch (gnomebz #529694) + +* Wed Apr 23 2008 Tomas Bzatek - 2.23.1-1 +- Update to 2.23.1 + +* Thu Apr 17 2008 Matthias Clasen - 2.22.2-5 +- Make "Open Folder" work as expected for media handling + +* Thu Apr 17 2008 David Zeuthen - 2.22.2-4 +- Put X-Gnome-Vfs-System=gio into desktop files (See #442835) + +* Wed Apr 16 2008 David Zeuthen - 2.22.2-3 +- Revert Fedora livecd mount (fix is in latest gvfs packages) and + add a patch to avoid trying to autorun mounts that are mounted + from outside Nautilus (#442189) + +* Fri Apr 11 2008 Tomas Bzatek - 2.22.2-2 +- Hide Fedora livecd mount (#439166) + +* Mon Apr 7 2008 Matthias Clasen - 2.22.2-1 +- Update to 2.22.2 + +* Sun Apr 6 2008 Matthias Clasen - 2.22.1-6 +- Backport a patch from upstream svn thats needed for file-roller + +* Fri Apr 4 2008 Matthias Clasen - 2.22.1-5 +- Fix beagle support some more + +* Thu Apr 3 2008 Tomas Bzatek - 2.22.1-4 +- Fix SELinux attributes display issue (#439686) + +* Wed Apr 2 2008 Matthias Clasen - 2.22.1-3 +- Fix the build to include tracker and beagle support again + +* Mon Mar 31 2008 Ray Strode - 2.22.1-2 +- Over the releases we've accumulated default.png, default-wide.png default-5_4.png + and default.jpg. We haven't been able to drop them because it would leave some + users with white backgrounds on upgrade. This patch just falls back to the + default image if the user's background doesn't exist. + + +* Fri Mar 28 2008 Tomas Bzatek - 2.22.1-1 +- Update to 2.22.1 + +* Thu Mar 13 2008 Tomas Bzatek - 2.22.0-2 +- Don't create application/x-ext- types for known mimetypes (patch from head) +- Fix a crash in the Properties dialog while changing owner (patch from head) + +* Mon Mar 10 2008 Matthias Clasen - 2.22.0-1 +- Update to 2.22.0 + +* Tue Feb 26 2008 Tomas Bzatek - 2.21.92-2 +- Change libbeagle .so name for libbeagle-0.3.0 in nautilus-2.21.1-dynamic-search-r2.patch (#434722) + +* Tue Feb 26 2008 Tomas Bzatek - 2.21.92-1 +- Update to 2.21.92 + +* Tue Feb 12 2008 Matthias Clasen - 2.21.91-1 +- Update to 2.21.91 + +* Tue Jan 29 2008 Matthias Clasen - 2.21.90-1 +- Update to 2.21.90 + +* Mon Jan 21 2008 Matthias Clasen - 2.21.6-1 +- Update to 2.21.6 + +* Mon Jan 14 2008 Matthias Clasen - 2.21.5-1 +- Update to 2.21.5 + +* Tue Jan 8 2008 Matthias Clasen - 2.21.2-1 +- Update to 2.21.2 + +* Sun Dec 23 2007 Matthias Clasen - 2.21.1-2 +- Fix extensiondir + +* Fri Dec 21 2007 Matthias Clasen - 2.21.1-1 +- Upodate to 2.21.1 + +* Wed Dec 19 2007 - Bastien Nocera - 2.20.0-7 +- Update audio preview patch to check for aliases (#381401) + +* Tue Oct 30 2007 - Bastien Nocera - 2.20.0-6 +- Fix audio preview command-line to use decodebin so playbin doesn't + pop up a window for videos detected as audio + +* Tue Oct 16 2007 - Bastien Nocera - 2.20.0-5 +- Add patch from upstream to get audio preview working again + (#332251) + +* Wed Oct 3 2007 Matthias Clasen - 2.20.0-4 +- Move /usr/lib/nautilus/extensions-1.0 to the extensions package + +* Tue Oct 2 2007 Matthias Clasen - 2.20.0-3 +- Fix a crash with small fonts (#242350) + +* Tue Oct 2 2007 Alexander Larsson - 2.20.0-1 +- Backport fixes for async thumbnail loading from svn + +* Fri Sep 28 2007 Ray Strode - 2.20.0-2 +- drop redhat-artwork dep. Alex says we don't need it anymore + +* Tue Sep 18 2007 Matthias Clasen - 2.20.0-1 +- Update to 2.20.0 + +* Mon Sep 3 2007 Matthias Clasen - 2.19.91-1 +- Update to 2.19.91 + +* Mon Aug 13 2007 Matthias Clasen - 2.19.90-1 +- Update to 2.19.90 + +* Fri Aug 10 2007 Matthias Clasen - 2.19.6-3 +- Bump gnome-vfs requirement (#251306) + +* Fri Aug 3 2007 Matthias Clasen - 2.19.6-2 +- Update license field + +* Mon Jul 30 2007 Matthias Clasen - 2.19.6-1 +- Update to 2.19.6 + +* Wed Jul 25 2007 Jesse Keating - 2.19.5-3 +- Rebuild for RH #249435 + +* Mon Jul 23 2007 Matthias Clasen - 2.19.5-2 +- Port to new GTK+ tooltips API + +* Tue Jul 10 2007 Matthias Clasen - 2.19.5-1 +- Update to 2.19.5 + +* Fri Jul 6 2007 Matthias Clasen - 2.19.4-2 +- Fix directory ownership issues + +* Mon Jun 18 2007 Matthias Clasen - 2.19.4-1 +- Update to 2.19.4 + +* Tue Jun 5 2007 Matthias Clasen - 2.19.3-1 +- Update to 2.19.3 + +* Sat May 19 2007 Matthias Clasen - 2.19.2-1 +- Update to 2.19.2 + +* Wed Apr 11 2007 Alexander Larsson - 2.18.1-2 +- Fix memleak (#235696) + +* Wed Apr 11 2007 Alexander Larsson - 2.18.1-1 +- Update to 2.18.1 + +* Mon Mar 26 2007 Matthias Clasen - 2.18.0.1-2 +- Update icon caches (#234020) + +* Mon Mar 12 2007 Alexander Larsson - 2.18.0.1-1 +- Update to 2.18.0.1 + +* Tue Mar 6 2007 Alexander Larsson - 2.17.92-3 +- Update xdg-user-dirs patch, now handle renaming desktop dir + +* Thu Mar 1 2007 Alexander Larsson - 2.17.92-2 +- Add xdg-user-dirs patch + +* Tue Feb 27 2007 Matthias Clasen - 2.17.92-1 +- Update to 2.17.92 + +* Tue Feb 13 2007 Matthias Clasen - 2.17.91-1 +- Update to 2.17.91 + +* Wed Feb 7 2007 Matthias Clasen - 2.17.90-4 +- Add DesktopSettings category to nautilus-file-management-properties.desktop + +* Tue Feb 6 2007 Alexander Larsson - 2.17.90-3 +- update tracker dynamic search patch to new .so name + +* Tue Jan 23 2007 Alexander Larsson - 2.17.90-2 +- Fix gnome bug #362302 in selinux patch + +* Mon Jan 22 2007 Matthias Clasen - 2.17.90-1 +- Update to 2.17.90 + +* Tue Dec 19 2006 Matthias Clasen - 2.17.1-1 +- Update to 2.17.1 + +* Wed Nov 22 2006 Alexander Larsson - 2.16.2-7 +- Look for beagle before tracker, because tracker autostarts + This lets us support having both installed at the same time. +- Remove buildreqs for beagle, as they are not necessary with + the dynamic work. + +* Tue Nov 14 2006 Matthias Clasen - 2.16.2-6 +- Detect tracker dynamically, too + +* Mon Nov 13 2006 Alexander Larsson - 2.16.2-5.fc7 +- Fix commonly reported NautilusDirectory crash + +* Wed Nov 8 2006 Alexander Larsson - 2.16.2-4.fc7 +- Revert upstream icon placement patch as it seems broken + +* Tue Nov 7 2006 Alexander Larsson - 2.16.2-2.fc7 +- Update to 2.16.2 + +* Sat Oct 21 2006 Matthias Clasen - 2.16.1-1 +- Update to 2.16.1 + +* Wed Oct 18 2006 Matthias Clasen - 2.16.0-6 +- Fix scripts according to the packaging guidelines +- Require GConf2 for the scripts +- Require pkgconfig for the -devel package + +* Sun Oct 01 2006 Jesse Keating - 2.16.0-5 +- rebuilt for unwind info generation, broken in gcc-4.1.1-21 + +* Tue Sep 19 2006 Alexander Larsson - 2.16.0-4 +- Support changing selinux contexts (#204030) + +* Thu Sep 14 2006 Alexander Larsson - 2.16.0-3 +- Fix crash when opening custom icon dialog (#205352) + +* Tue Sep 5 2006 Matthias Clasen - 2.16.0-2 +- Add a %%preun script (#205260) + +* Mon Sep 4 2006 Alexander Larsson - 2.16.0-1 +- Update to 2.16.0 + +* Fri Aug 25 2006 Alexander Larsson - 2.15.92.1-2 +- Omit self check code in build + +* Tue Aug 22 2006 Alexander Larsson - 2.15.92.1-1 +- update to 2.15.92.1 + +* Mon Aug 21 2006 Matthias Clasen - 2.15.92-1.fc6 +- Update to 2.15.92 + +* Sat Aug 12 2006 Matthias Clasen - 2.15.91-2.fc6 +- Don't Provide/Obsolete nautilus-devel from the main package (#202322) + +* Thu Aug 10 2006 Alexander Larsson - 2.15.91-1.fc6 +- Update to 2.15.91 +- Split package into devel and extensions (#201967) + +* Thu Aug 3 2006 Matthias Clasen - 2.15.90-1.fc6 +- Update to 2.15.90 + +* Tue Jul 18 2006 Matthias Clasen - 2.15.4-3 +- Spec file cleanups + +* Wed Jul 12 2006 Matthias Clasen - 2.15.4-2 +- Don't require nautilus-cd-burner, to avoid a + BuildRequires-Requires loop + +* Wed Jul 12 2006 Matthias Clasen - 2.15.4-1 +- Update to 2.15.4 + +* Wed Jul 12 2006 Jesse Keating - 2.15.2-1.1 +- rebuild + +* Tue Jun 13 2006 Matthias Clasen - 2.15.2-1 +- Update to 2.15.1 + +* Sun May 21 2006 Matthias Clasen - 2.15.1-2 +- Add missing BuildRequires (#129184) + +* Wed May 17 2006 Matthias Clasen - 2.15.1-1 +- Update to 2.15.1 + +* Fri May 12 2006 Matthias Clasen - 2.14.1-3 +- Close the about dialog + +* Tue Apr 11 2006 Matthias Clasen - 2.14.1-2 +- Update to 2.14.1 + +* Mon Mar 13 2006 Matthias Clasen - 2.14.0-1 +- Update to 2.14.0 + +* Mon Mar 6 2006 Matthias Clasen - 2.13.92-2 +- Reinstate the format patch which was accidentally dropped + +* Mon Feb 27 2006 Matthias Clasen - 2.13.92-1 +- Update to 2.13.92 + +* Mon Feb 13 2006 Matthias Clasen - 2.13.91-1 +- Update to 2.13.91 + +* Fri Feb 10 2006 Jesse Keating - 2.13.90-2.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 2.13.90-2.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Mon Feb 6 2006 Matthias Clasen - 2.13.90-2 +- Avoid delays in rendering the background + +* Tue Jan 31 2006 Matthias Clasen - 2.13.90-1 +- Update to 2.13.90 + +* Tue Jan 17 2006 Matthias Clasen - 2.13.4-1 +- Update to 2.13.4 + +* Mon Jan 9 2006 Alexander Larsson - 2.13.3-2 +- Buildrequire libbeagle + +* Tue Dec 13 2005 Alexander Larsson 2.13.3-1 +- Update to 2.13.3 + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Fri Dec 2 2005 Matthias Clasen 2.13.2-1 +- Update to 2.13.2 +- Update patches + +* Tue Nov 1 2005 Alexander Larsson - 2.12.1-6 +- Switch XFree86-devel buildrequirement to libX11-devel + +* Fri Oct 28 2005 Matthias Clasen 2.12.1-5 +- Implement icon stretching keynav +- Support formatting non-floppy devices + +* Sat Oct 22 2005 Matthias Clasen 2.12.1-4 +- Improve icon stretching ui + +* Fri Oct 21 2005 Matthias Clasen 2.12.1-3 +- Only show the "Format menu item if gfloppy is present + +* Fri Oct 21 2005 Matthias Clasen 2.12.1-2 +- Add a "Format" context menu item to the floppy in "Computer" + +* Thu Oct 6 2005 Matthias Clasen 2.12.1-1 +- Update to 2.12.1 + +* Wed Sep 7 2005 Matthias Clasen 2.12.0-1 +- Update to 2.12.0 + +* Tue Aug 16 2005 Matthias Clasen +- New upstream release + +* Wed Aug 3 2005 Matthias Clasen 2.11.90-1 +- New upstream release + +* Mon Jul 11 2005 Matthias Clasen 2.11.3-1 +- Update to 2.11.3 + +* Wed May 11 2005 David Zeuthen 2.10.0-4 +- Fix default font for zh_TW (#154185) + +* Sun Apr 3 2005 David Zeuthen 2.10.0-3 +- Include patches for desktop background memory saving (GNOME bug #169347) +- Obsoletes: nautilus-media (#153223) + +* Mon Mar 28 2005 Matthias Clasen 2.10.0-2 +- Rebuild against newer libexif + +* Mon Mar 21 2005 David Zeuthen 2.10.0-1 +- Update to latest upstream version; tweak requires + +* Thu Mar 3 2005 Alex Larsson 2.9.91-2 +- Rebuild + +* Fri Feb 11 2005 Matthias Clasen - 2.9.91-1 +- Update to 2.9.91 + +* Tue Nov 9 2004 Marco Pesenti Gritti - 2.8.1-5 +- Remove eog dependency. The bonobo component is no more used. + +* Mon Oct 18 2004 Marco Pesenti Gritti - 2.8.1-4 +- #135824 Fix throbber position + +* Fri Oct 15 2004 Alexander Larsson - 2.8.1-3 +- Slightly less bad error dialog when there is no handler for a file. + Not ideal, but this change doesn't change any strings. + +* Tue Oct 12 2004 Alexander Larsson - 2.8.1-2 +- Fix open with menu on mime mismatch +- Create desktop links ending with .desktop (#125104) +- Remove old cruft from specfile + +* Mon Oct 11 2004 Alexander Larsson - 2.8.1-1 +- update to 2.8.1 + +* Fri Oct 8 2004 Alexander Larsson - 2.8.0-3 +- Backport more fixes from cvs + +* Mon Oct 4 2004 Alexander Larsson - 2.8.0-2 +- Backport various bugfixes from HEAD + +* Mon Sep 13 2004 Alexander Larsson - 2.8.0-1 +- Update to 2.8.0 + +* Fri Sep 10 2004 Alexander Larsson - 2.7.92-3 +- Don't require eject on s390(x), since there is none (#132228) + +* Tue Sep 7 2004 Alexander Larsson - 2.7.92-2 +- Add patch to fix desktop keynav (#131894) + +* Tue Aug 31 2004 Alex Larsson 2.7.92-1 +- update to 2.7.92 + +* Thu Aug 26 2004 Alexander Larsson - 2.7.4-3 +- Added requires eject +- Depend on gnome-vfs2-smb instead of -extras + +* Tue Aug 24 2004 Alexander Larsson - 2.7.4-2 +- backport cvs fixes, including default view fix + +* Thu Aug 19 2004 Alex Larsson 2.7.4-1 +- update to 2.7.4 + +* Fri Aug 6 2004 Ray Strode 2.7.2-1 +- update to 2.7.2 + +* Tue Aug 3 2004 Matthias Clasen 2.6.0-7 +- rebuilt + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Fri May 21 2004 Matthias Clasen 2.6.0-5 +- rebuild + +* Wed Apr 14 2004 Alexander Larsson 2.6.0-4 +- update cvs backport, now handles kde trash dir better + +* Wed Apr 14 2004 Alexander Larsson 2.6.0-3 +- add cvs backport + +* Wed Apr 7 2004 Alex Larsson 2.6.0-2 +- Make network servers go to network:// again + +* Thu Apr 1 2004 Alex Larsson 2.6.0-1 +- update to 2.6.0 + +* Tue Mar 16 2004 Mike A. Harrisn 2.5.91-2 +- Changed BuildRequires: XFree86-libs >= 4.2.99 to BuildRequires: XFree86-devel +- Fixed BuildRoot to use _tmppath instead of /var/tmp + +* Mon Mar 15 2004 Alex Larsson 2.5.91-1 +- update to 2.5.91 + +* Mon Mar 8 2004 Alexander Larsson 2.5.90-1 +- update to 2.5.90 + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Wed Feb 25 2004 Alexander Larsson +- update libgnomeui required version to 2.5.3 (#116229) + +* Tue Feb 24 2004 Alexander Larsson 2.5.8-1 +- update to 2.5.8 + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Alexander Larsson 2.5.7-1 +- update to 2.5.7 + +* Fri Jan 30 2004 Alexander Larsson 2.5.6-1 +- update to 2.5.6 + +* Tue Jan 27 2004 Alexander Larsson 2.5.5-1 +- update to 2.5.5 + +* Tue Oct 28 2003 Than Ngo 2.4.0-7 +- fix start-here desktop file + +* Mon Oct 27 2003 Than Ngo 2.4.0-6 +- rebuild against new librsvg2 + +* Fri Oct 3 2003 Alexander Larsson 2.4.0-5 +- Update cvs backport, now have the better desktop icon layout + +* Mon Sep 29 2003 Alexander Larsson 2.4.0-4 +- Update cvs backport, fixes #105869 + +* Fri Sep 19 2003 Alexander Larsson 2.4.0-3 +- Backport bugfixes from the gnome-2-4 branch + +* Tue Sep 16 2003 Alexander Larsson 2.4.0-2 +- Add patch that fixes crash when deleting in listview + +* Tue Sep 9 2003 Alexander Larsson 2.4.0-1 +- 2.4.0 + +* Thu Sep 4 2003 Alexander Larsson 2.3.90-2 +- Add desktop icons patch + +* Tue Sep 2 2003 Alexander Larsson 2.3.90-1 +- update to 2.3.90 + +* Tue Aug 26 2003 Alexander Larsson 2.3.9-1 +- update +- Add patch to ignore kde desktop links +- Re-enable kdesktop detection hack. + kde doesn't seem to support the manager selection yet + +* Wed Aug 20 2003 Alexander Larsson 2.3.8-2 +- don't require fontilus + +* Mon Aug 18 2003 Alexander Larsson 2.3.8-1 +- update to gnome 2.3 + +* Wed Aug 6 2003 Elliot Lee 2.2.4-5 +- Fix libtool + +* Tue Jul 8 2003 Alexander Larsson 2.2.4-4.E +- Rebuild + +* Tue Jul 8 2003 Alexander Larsson 2.2.4-4 +- Backport fixes from cvs +- Change some default configurations + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Tue May 27 2003 Alexander Larsson 2.2.4-2 +- Add performance increase backport +- Add desktop manager selection backport + +* Mon May 19 2003 Alexander Larsson 2.2.4-1 +- update to 2.2.4 + +* Tue May 6 2003 Alexander Larsson 2.2.3-2 +- Fix scrollkeeper pre-requires + +* Mon Mar 31 2003 Alexander Larsson 2.2.3-1 +- Update to 2.2.3 + +* Tue Feb 25 2003 Alexander Larsson 2.2.1-5 +- Change the default new window size to fit in 800x600 (#85037) + +* Thu Feb 20 2003 Alexander Larsson +- Require gnome-vfs2-extras, since network menu item uses it (#84145) + +* Tue Feb 18 2003 Alexander Larsson +- Update to the latest bugfixes from cvs. +- Fixes #84291 for nautilus, context menu duplication and some other small bugs. + +* Thu Feb 13 2003 Alexander Larsson 2.2.1-2 +- Add a patch to fix the forkbomb-under-kde bug (#81520) +- Add a patch to fix thumbnail memory leak +- require libXft.so.2 instead of Xft, since that changed in the XFree86 package + +* Tue Feb 11 2003 Alexander Larsson 2.2.1-1 +- 2.2.1, lots of bugfixes + +* Fri Jan 31 2003 Alexander Larsson 2.2.0.2-2 +- remove nautilus-server-connect since it broke without editable vfolders + +* Fri Jan 31 2003 Alexander Larsson 2.2.0.2-1 +- Update to 2.2.0.2, fixes bg crasher +- parallelize build +- Added patch from cvs that fixes password hang w/ smb + +* Thu Jan 23 2003 Alexander Larsson 2.2.0.1-1 +- Update to 2.2.0.1 + +* Wed Jan 22 2003 Tim Powers 2.2.0-2 +- rebuilt + +* Tue Jan 21 2003 Alexander Larsson 2.2.0-1 +- update to 2.2.0 + +* Fri Jan 17 2003 Alexander Larsson 2.1.91-8 +- Add requirement on fontilus and nautilus-cd-burner to get them + on an upgrade. + +* Fri Jan 17 2003 Alexander Larsson 2.1.91-7 +- Added patch to enable the look for kde desktop hack +- Removed patches that were fixed upstream + +* Fri Jan 17 2003 Alexander Larsson 2.1.91-6 +- Removed the requirement of nautilus-cd-burner, since + that is now on by default in comps + +* Thu Jan 16 2003 Alexander Larsson 2.1.91-5 +- Require(post,postun) scrollkeeper (#67340) +- Add dot to end of summary + +* Tue Jan 14 2003 Havoc Pennington 2.1.91-4 +- use system-group.png not network-server.png for "Network Servers" + +* Tue Jan 14 2003 Alexander Larsson 2.1.91-3 +- Correct filename in last change + +* Tue Jan 14 2003 Alexander Larsson 2.1.91-2 +- change the network menu item to go to smb: + +* Tue Jan 14 2003 Alexander Larsson 2.1.91-1 +- Update to 2.1.91 +- Updated URL + +* Tue Jan 14 2003 Havoc Pennington +- perl-munge the icon names in a couple desktop files + to find redhat-network-server.png and redhat-file-manager.png. + Upstream icon names here were weird and seem broken. + +* Thu Jan 9 2003 Alexander Larsson +- 2.1.6 +- Removed mp3 stripping script. Thats gone upstream now. + +* Wed Dec 18 2002 Alexander Larsson 2.1.5-2 +- Add cdburn patch. +- Remove nautilus-1.1.19-starthere-hang-hackaround.patch +- Require nautilus-cd-burner + +* Mon Dec 16 2002 Alexander Larsson 2.1.5-1 +- Update to 2.1.5. Require gnome-icon-theme >= 0.1.5, gnome-vfs >= 2.1.5 + +* Tue Dec 3 2002 Havoc Pennington +- add explicit startup-notification dependency because build system is + dumb +- 2.1.3 + +* Wed Nov 13 2002 Havoc Pennington +- 2.1.2 + +* Thu Oct 10 2002 Havoc Pennington +- 2.0.7 +- remove patches that are upstream + +* Tue Sep 3 2002 Alexander Larsson 2.0.6-6 +- Add badhack to make weblinks on desktop work + +* Mon Sep 2 2002 Havoc Pennington +- fix #70667 assertion failures +- fix triple click patch + +* Mon Sep 2 2002 Jonathan Blandford +- don't activate on double click + +* Sat Aug 31 2002 Havoc Pennington +- put button press mask in triple-click patch, maybe it will work +- remove html-hack patch as it does nothing useful + +* Sat Aug 31 2002 Havoc Pennington +- require newer redhat-artwork, -menus, eel2, gnome-vfs2 to avoid + bogus bug reports +- add hack for HTML mime type handling in a web browser, not + nautilus + +* Thu Aug 29 2002 Alexander Larsson +- Updated to 2.0.6. Removed the patches I put upstream. +- Added patch that fixes #72410 + +* Wed Aug 28 2002 Owen Taylor +- Add a simple patch so that redhat-config-packages can disable + the new window behavior for mounted CDs behavior. + +* Wed Aug 28 2002 Alexander Larsson 2.0.5-4 +- Add patch to fix bug #70667 + +* Sun Aug 25 2002 Havoc Pennington +- remove mp3 + +* Fri Aug 23 2002 Havoc Pennington +- ignore the "add_to_session" preference as it only broke stuff +- pad the left margin a bit to cope with poor word wrapping + +* Fri Aug 23 2002 Alexander Larsson 2.0.5-1 +- Update to 2.0.5, remove topleft icon patch + +* Thu Aug 15 2002 Alexander Larsson 2.0.4-2 +- Add patch to fix the bug where desktop icons get + stuck in the top left corner on startup + +* Wed Aug 14 2002 Alexander Larsson 2.0.4-1 +- 2.0.4 + +* Tue Aug 13 2002 Havoc Pennington +- obsolete nautilus-mozilla < 2.0 #69839 + +* Mon Aug 12 2002 Havoc Pennington +- add rhconfig patch to Bluecurve theme and disable sidebar by default + +* Wed Aug 7 2002 Havoc Pennington +- drop start here files, require redhat-menus that has them + +* Tue Aug 6 2002 Havoc Pennington +- 2.0.3 + +* Sat Jul 27 2002 Havoc Pennington +- build for new eel2, gail + +* Wed Jul 24 2002 Havoc Pennington +- and add the libexec components, mumble + +* Wed Jul 24 2002 Havoc Pennington +- put the components in the file list, were moved upstream + +* Tue Jul 23 2002 Havoc Pennington +- 2.0.1 + +* Thu Jun 27 2002 Owen Taylor +- Relibtoolize to fix relink problems for solib components +- Add LANG=en_US to %%makeinstall as well +- Back out previous change, force locale to en_US to prevent UTF-8 problems +- Add workaround for intltool-merge bug on ia64 + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Sun Jun 16 2002 Havoc Pennington +- 2.0.0 +- use desktop-file-install +- require desktop-backgrounds-basic + +* Wed Jun 12 2002 Havoc Pennington +- add wacky hack in hopes of fixing the hang-on-login thing + +* Sat Jun 8 2002 Havoc Pennington +- add build requires on new gail +- rebuild to try to lose broken libgailutil.so.13 dependency + +* Sat Jun 08 2002 Havoc Pennington +- rebuild in different environment + +* Wed Jun 5 2002 Havoc Pennington +- 1.1.19 + +* Fri May 31 2002 Havoc Pennington +- rebuild in different environment + +* Thu May 30 2002 Havoc Pennington +- really remove nautilus-devel if we are going to obsolete it +- don't require hwbrowser + +* Sun May 26 2002 Tim Powers +- automated rebuild + +* Tue May 21 2002 Havoc Pennington +- rebuild in different environment + +* Tue May 21 2002 Havoc Pennington +- 1.1.17 + +* Fri May 3 2002 Havoc Pennington +- 1.1.14 + +* Thu Apr 25 2002 Havoc Pennington +- require eog +- obsolete nautilus-devel +- fix name of schemas file in post + +* Mon Apr 22 2002 Alex Larsson +- Update to 1.1.13 + +* Fri Apr 19 2002 Havoc Pennington +- put tree view in file list + +* Thu Apr 18 2002 Havoc Pennington +- nautilus for gnome 2 +- clean up the spec file and file list a bit + +* Mon Apr 15 2002 Havoc Pennington +- merge translations + +* Thu Apr 4 2002 Alex Larsson +- Add patch to fix trash crash + +* Mon Apr 1 2002 Havoc Pennington +- fix for metadata tmp race +- backport thumbnail speed fix and thumbnail inf. loop fix + +* Mon Mar 25 2002 Havoc Pennington +- add some fixes from CVS version, including one for #61819 and a couple segfaults + +* Wed Mar 20 2002 Havoc Pennington +- fix thumbnails for files with future timestamp, #56862 + +* Mon Mar 11 2002 Havoc Pennington +- buildrequires intltool #60633 +- apply Alex's pixbuf cache patch to save a few megs #60581 + +* Wed Feb 27 2002 Havoc Pennington +- drop Milan-specific features, including png10 and ac25 patches +- copy in 1.0.5 help component to avoid large risky patch +- remove .la files +- drop mozilla from ia64 again +- remove oaf file from nautilus-mozilla that was also in the base + package + +* Mon Jan 28 2002 Bill Nottingham +- enable mozilla support on ia64 + +* Fri Dec 28 2001 Christopher Blizzard +- require Mozilla 0.9.7 +- Add patch that puts mozilla profile startup before embedding is initialized + +* Tue Nov 20 2001 Havoc Pennington +- 1.0.6, require Mozilla 0.9.6 + +* Tue Oct 23 2001 Alex Larsson +- Update to 1.0.5 + +* Thu Sep 6 2001 Owen Taylor +- Fix handling of GnomeVFSFileInfo structure (#53315) + +* Wed Sep 5 2001 Owen Taylor +- Change handling of names on unmount to fix #52325 + +* Tue Sep 4 2001 Havoc Pennington +- put nautilus-help.desktop in file list; #53109 + +* Fri Aug 31 2001 Havoc Pennington +- Add po files from sources.redhat.com + +* Mon Aug 27 2001 Havoc Pennington +- Add po files from sources.redhat.com + +* Thu Aug 23 2001 Alex Larsson 1.0.4-38 +- Added patch to fix the .directory issuer + +* Thu Aug 23 2001 Havoc Pennington +- I screwed up the build yesterday, so it didn't actually contain the + fixes mentioned. This build should contain them. + +* Wed Aug 22 2001 Havoc Pennington +- fix bug causing 32000 stats or so in large directories, + should speed things up somewhat +- fix #52104 via gruesome kdesktop-detection hack and setting + window type hint on our desktop window +- fix so Start Here icon displays in sidebar +- don't load non-local .desktop files + +* Mon Aug 20 2001 Havoc Pennington +- make Programs icon into a link, to match the other .desktop files +- own various directories #51164 +- web page titles in Japanese, #51709 +- tree defaults to only directories #51850 + +* Wed Aug 15 2001 Havoc Pennington +- make start here icon work again +- kill some warning spew, #51661 +- cache getpwnam() results to speed things up a bit + +* Tue Aug 14 2001 Owen Taylor +- Fix problem with missing desktop starthere.desktop file +- New snapshot from our branch, fixes: + - On upgrade, icons migrated from GNOME desktop are not properly lined up + (#51436) + - icons dropped on the desktop don't end up where dropped. (#51441) + - Nautilus shouldn't have fam monitor read-only windows. This + keeps CDROMS from being unmounted until you close all + + nautilus windows pointing to them. (#51442) + - Warnings about 'cannot statfs...' when moving items to trash. +- Use separate start-here.desktop for panel, since the one used + for the root window only works from Nautilus. + +* Fri Aug 10 2001 Alexander Larsson +- Changed starthere .desktop files to be links instead +- of spawning a new nautilus. This makes start-here: +- much faster. + +* Thu Aug 9 2001 Alexander Larsson +- Added hwbrowser dependency +- New snapshot, fixes the mozilla-view submit form problem + +* Wed Aug 8 2001 Jonathan Blandford +- Rebuild with new xml-i18n-tools +- fix crash in creating new desktop files + +* Tue Aug 7 2001 Jonathan Blandford +- Fix up DnD code some more + +* Thu Aug 02 2001 Havoc Pennington +- Sync our CVS version; fixes some MUSTFIX + (the one about drawing background on startup, + properly translate desktop files, etc.) + +* Wed Aug 1 2001 Alexander Larsson 1.0.4-24 +- Fix 64bit cleanness issue +- Fix NULL mimetype crash +- Disable additional_text for .desktop files + +* Tue Jul 31 2001 Alexander Larsson 1.0.4-23 +- Fix unmounting devices. + +* Tue Jul 31 2001 Alexander Larsson 1.0.4-22 +- Make it depend on gnome-vfs-1.0.1-13. Needed for .desktop +- mimetype sniffing. + +* Mon Jul 30 2001 Alexander Larsson 1.0.4-21 +- Remove the "don't run as root" warning. +- Remove eazel from bookmarks +- langified (again? did someone change it?) + +* Fri Jul 27 2001 Alexander Larsson +- Apply a patch that makes nautilus dnd reset work with the latest +- eel release. + +* Thu Jul 26 2001 Alexander Larsson +- Build on ia64 without the mozilla component. + +* Wed Jul 25 2001 Havoc Pennington +- Fix crash-on-startup showstopper +- Fix can't-find-images bug (this one was only showing up + when built with debug symbols, since it was an uninitialized memory + read) + +* Tue Jul 24 2001 Havoc Pennington +- sync new tarball from our CVS branch, + fixes some drag-and-drop, changes URI scheme names, + etc. + +* Tue Jul 24 2001 Owen Taylor +- Add BuildRequires (#49539, 49537) +- Fix %%post, %%postun (#49720) +- Background efficiency improvements and hacks + +* Fri Jul 13 2001 Alexander Larsson +- Don't launch esd on each mouseover. + +* Wed Jul 11 2001 Havoc Pennington +- move first time druid patch into my "CVS outstanding" patch +- try to really remove Help/Feedback +- try to really fix Help/Community Support +- try again to get Start Here in the Go menu +- try again to get Start Here on the desktop +- don't show file sizes for .desktop files + +* Tue Jul 10 2001 Havoc Pennington +- add newline to ends of .desktop files that were missing them + +* Tue Jul 10 2001 Havoc Pennington +- update to my latest 'cvs diff -u' (adds default + Start Here link, displays .directory name in sidebar) +- include /etc/X11/* links (starthere, sysconfig, serverconfig) + +* Tue Jul 10 2001 Jonathan Blandford +- Patch to remove firsttime druid and flash + +* Mon Jul 09 2001 Havoc Pennington +- add hacks for displaying desktop files +- add hack to turn off the "unwriteable" emblem + +* Sun Jul 8 2001 Tim Powers +- added defattr to the files lists to be (-,root,root) +- languified + +* Sat Jul 7 2001 Alexander Larsson +- Need to run autoheader too. + +* Fri Jul 6 2001 Alexander Larsson +- Make the fam dependency a real runtime dependency +- by linking to libfam (nautilus-1.0.4-fam-lib.patch) +- Cleaned up specfile. + +* Fri Jul 6 2001 Alexander Larsson +- Change default background and rubberband color. +- Use the sidebar tabs from the default theme +- BuildDepend on fam-devel, depend on fam +- Disable the eazel update pages in the first-time druid. +- Remove the eazel logo from the first-time druid + +* Thu Jul 05 2001 Havoc Pennington +- 1.0.4, removes eazel services icon and wizard page +- Eazel logo is still in startup wizard for now, needs fixing + +* Tue Jul 03 2001 Havoc Pennington +- fix group (s/Desktop/Desktops/) #47134 +- remove ammonite dependency + +* Wed Jun 27 2001 Havoc Pennington +- add a different default theme +- clean up file list overspecificity a bit + +* Tue Jun 26 2001 Havoc Pennington +- move to a CVS snapshot of nautilus for now + (Darin is my hero for having distcheck work out of CVS) + +* Thu May 10 2001 Jonathan Blandford +- clean up defaults a bit + +* Wed May 9 2001 Jonathan Blandford +- New version + +* Tue Apr 17 2001 Gregory Leblanc +- Added BuildRequires lines +- Changed Source to point to ftp.gnome.org instead of just the tarball name +- Moved %%description sections closer to their %%package sections +- Moved %%changelog to the end, where so that it's not in the way +- Changed configure and make install options to allow moving of + libraries, includes, binaries more easily +- Removed hard-coded paths (don't define %%prefix or %%docdir) +- replace %%{prefix}/bin with %%{_bindir} +- replace %%{prefix}/share with %%{_datadir} +- replace %%{prefix}/lib with %%{_libdir} +- replace %%{prefix}/include with %%{_includedir} + +* Tue Oct 10 2000 Robin Slomkowski +- removed obsoletes from sub packages and added mozilla and trilobite +subpackages + +* Wed Apr 26 2000 Ramiro Estrugo +- created this thing