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..e177a7c
--- /dev/null
+++ b/SOURCES/files-view-Backport-translations.patch
@@ -0,0 +1,156 @@
+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-06-20 17:02:58.239093717 +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-files-view-context-menus.ui:24
++msgid "_Copy Location"
++msgstr "_Copia la ubicació"
+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-06-20 17:02:58.276093695 +0200
+@@ -5716,3 +5716,7 @@
+
+ #~ msgid "org.gnome.Nautilus"
+ #~ msgstr "org.gnome.Nautilus"
++
++#: src/resources/ui/nautilus-files-view-context-menus.ui:24
++msgid "_Copy Location"
++msgstr "Ort _kopieren"
+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-06-20 17:02:58.309093676 +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-files-view-context-menus.ui:24
++msgid "_Copy Location"
++msgstr "Copiar _ubicación"
+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-06-20 17:02:58.327093666 +0200
+@@ -10082,3 +10082,7 @@
+
+ #~ msgid "C_ancel Remove"
+ #~ msgstr "ان_صراف از حذف"
++
++#: src/resources/ui/nautilus-files-view-context-menus.ui:24
++msgid "_Copy Location"
++msgstr "_رونوشت از مکان"
+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-06-20 17:02:58.339093659 +0200
+@@ -5975,3 +5975,7 @@
+
+ #~ msgid "Copying “%B” to “%B”"
+ #~ msgstr "Copie de « %B » vers « %B »"
++
++#: src/resources/ui/nautilus-files-view-context-menus.ui:34
++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-06-20 17:02:58.348093654 +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:24
++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-06-20 17:02:58.366093644 +0200
+@@ -7429,3 +7429,8 @@
+
+ #~ msgid "Error autorunning software"
+ #~ msgstr "Produciuse un erro ao autoexecutar o software"
++
++#: src/resources/ui/nautilus-files-view-context-menus.ui:24
++#| msgid "Location"
++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-06-20 17:02:58.387093632 +0200
+@@ -10468,3 +10468,7 @@
+
+ #~ msgid "Question"
+ #~ msgstr "שאלה"
++
++#: src/resources/ui/nautilus-files-view-context-menus.ui:34
++msgid "_Copy Location"
++msgstr "ה_עתקת מיקום"
+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-06-20 17:02:58.523093554 +0200
+@@ -6999,3 +6999,7 @@
+
+ #~ msgid "Rename “%s”"
+ #~ msgstr "Renomenar lo fichièr « %s »"
++
++#: src/resources/ui/nautilus-files-view-context-menus.ui:34
++msgid "_Copy Location"
++msgstr "_Copiar l'emplaçament"
+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-06-20 17:02:58.627093494 +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-files-view-context-menus.ui:34
++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-06-20 17:02:58.652093480 +0200
+@@ -6177,3 +6177,7 @@
+ #~ msgctxt "Bookmark"
+ #~ msgid "_Name"
+ #~ msgstr "_Имя"
++
++#: src/resources/ui/nautilus-files-view-context-menus.ui:34
++msgid "_Copy Location"
++msgstr "_Копировать адрес"
+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-06-20 17:02:58.776093409 +0200
+@@ -6188,3 +6188,7 @@
+
+ #~ msgid "D_efault zoom level:"
+ #~ msgstr "Ön_tanımlı yaklaştırma seviyesi:"
++
++#: src/resources/ui/nautilus-files-view-context-menus.ui:24
++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-06-20 17:02:58.808093390 +0200
+@@ -7967,3 +7967,7 @@
+
+ #~ msgid "Set the zoom level of the current view"
+ #~ msgstr "Встановити рівень масштабування поточного вікна"
++
++#: src/resources/ui/nautilus-files-view-context-menus.ui:34
++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-06-20 17:02:58.865093358 +0200
+@@ -5495,3 +5495,7 @@
+
+ #~ msgid "Zoom In"
+ #~ msgstr "放大"
++
++#: src/resources/ui/nautilus-files-view-context-menus.ui:34
++msgid "_Copy Location"
++msgstr "复制位置(_C)"
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/SPECS/nautilus.spec b/SPECS/nautilus.spec
index a678837..6cef126 100644
--- a/SPECS/nautilus.spec
+++ b/SPECS/nautilus.spec
@@ -8,7 +8,7 @@
Name: nautilus
Version: 3.28.1
-Release: 17%{?dist}
+Release: 20%{?dist}
Summary: File manager for GNOME
License: GPLv3+
@@ -77,6 +77,13 @@ 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
+
BuildRequires: gtk-doc
BuildRequires: meson
BuildRequires: gcc
@@ -189,6 +196,15 @@ desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/*.desktop
%{_datadir}/gir-1.0/*.gir
%changelog
+* 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)