parent
09d7cc7767
commit
eced190d54
@ -0,0 +1,42 @@
|
||||
From e03d731e3dcb8d0f52ffbc6faa188802b742d1e9 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Holy <oholy@redhat.com>
|
||||
Date: Thu, 26 Jan 2023 13:20:51 +0100
|
||||
Subject: [PATCH] file-utilities: Prevent passing NULL to g_object_unref
|
||||
|
||||
The `nautilus_find_existing_uri_in_hierarchy` function calls the
|
||||
`g_object_unref` with a `NULL` pointer when `g_file_query_info` fails.
|
||||
This leads to a crash e.g. when parent directory of the currently
|
||||
opened location is removed. Let's port the code to use `g_autoptr` to
|
||||
avoid that.
|
||||
---
|
||||
src/nautilus-file-utilities.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/nautilus-file-utilities.c b/src/nautilus-file-utilities.c
|
||||
index e8f1ca2fb..1c913dbad 100644
|
||||
--- a/src/nautilus-file-utilities.c
|
||||
+++ b/src/nautilus-file-utilities.c
|
||||
@@ -598,7 +598,6 @@ nautilus_generate_unique_file_in_directory (GFile *directory,
|
||||
GFile *
|
||||
nautilus_find_existing_uri_in_hierarchy (GFile *location)
|
||||
{
|
||||
- GFileInfo *info;
|
||||
GFile *tmp;
|
||||
|
||||
g_assert (location != NULL);
|
||||
@@ -606,10 +605,11 @@ nautilus_find_existing_uri_in_hierarchy (GFile *location)
|
||||
location = g_object_ref (location);
|
||||
while (location != NULL)
|
||||
{
|
||||
+ g_autoptr (GFileInfo) info = NULL;
|
||||
+
|
||||
info = g_file_query_info (location,
|
||||
G_FILE_ATTRIBUTE_STANDARD_NAME,
|
||||
0, NULL, NULL);
|
||||
- g_object_unref (info);
|
||||
if (info != NULL)
|
||||
{
|
||||
return location;
|
||||
--
|
||||
2.40.0
|
||||
|
@ -0,0 +1,16 @@
|
||||
diff --git a/src/nautilus-pathbar.c b/src/nautilus-pathbar.c
|
||||
index 630b8ed33..2fe88fe1d 100644
|
||||
--- a/src/nautilus-pathbar.c
|
||||
+++ b/src/nautilus-pathbar.c
|
||||
@@ -2033,7 +2033,7 @@ button_data_file_changed (NautilusFile *file,
|
||||
if (g_file_has_prefix (current_location, location) ||
|
||||
g_file_equal (current_location, location))
|
||||
{
|
||||
- nautilus_path_bar_clear_buttons (self);
|
||||
+ /* Do nothing here, the view will set new path if needed. */
|
||||
}
|
||||
else if (g_file_has_prefix (location, current_location))
|
||||
{
|
||||
--
|
||||
2.40.0
|
||||
|
@ -0,0 +1,37 @@
|
||||
From 87d2f2cfd61baf813aee204be570172b78159281 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Holy <oholy@redhat.com>
|
||||
Date: Wed, 14 Jun 2023 12:52:02 +0200
|
||||
Subject: [PATCH] window-slot: Fix conditions to restore selection when
|
||||
reloading
|
||||
|
||||
Currently, the `nautilus_window_slot_force_reload` function doesn't
|
||||
preserve selection or position. However, there is a code that should do
|
||||
it. The code is executed only when `new_content_view != NULL`, but it
|
||||
is based on the `content_view` property. This seems to be a regression
|
||||
caused by the commit 9806d70e. Let's fix that condition in order to
|
||||
ensure that the selection and position are restored.
|
||||
---
|
||||
src/nautilus-window-slot.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
|
||||
index 2bfb3f3ce..8ceac9562 100644
|
||||
--- a/src/nautilus-window-slot.c
|
||||
+++ b/src/nautilus-window-slot.c
|
||||
@@ -2376,11 +2376,11 @@ nautilus_window_slot_force_reload (NautilusWindowSlot *self)
|
||||
g_object_ref (location);
|
||||
current_pos = NULL;
|
||||
|
||||
- if (priv->new_content_view)
|
||||
+ if (priv->content_view)
|
||||
{
|
||||
selection = nautilus_view_get_selection (priv->content_view);
|
||||
|
||||
- if (NAUTILUS_IS_FILES_VIEW (priv->new_content_view))
|
||||
+ if (NAUTILUS_IS_FILES_VIEW (priv->content_view))
|
||||
{
|
||||
current_pos = nautilus_files_view_get_first_visible_file (NAUTILUS_FILES_VIEW (priv->content_view));
|
||||
}
|
||||
--
|
||||
2.40.0
|
||||
|
@ -0,0 +1,43 @@
|
||||
From f68481d2d8393f1ba1a9b0a86a1b28b6ac303a63 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Holy <oholy@redhat.com>
|
||||
Date: Wed, 24 May 2023 13:09:35 +0200
|
||||
Subject: [PATCH] window-slot: Force reload current location when it reappears
|
||||
|
||||
When the currently opened location disappears, nautilus tries to
|
||||
reopen it thanks to the commit b0e28bc1. However, the
|
||||
`nautilus_window_slot_open_location_full` function doesn't begin the
|
||||
location change when the old location is the same as the new one. This
|
||||
is a problem because the old `NautilusFile` object is marked as gone
|
||||
and thus monitoring and perhaps some other stuff won't work. Let's use
|
||||
the `nautilus_window_slot_force_reload` function instead, in this case,
|
||||
to ensure that the underlying `NautilusFile` is updated.
|
||||
---
|
||||
src/nautilus-window-slot.c | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
|
||||
index 811152a21..561b34f12 100644
|
||||
--- a/src/nautilus-window-slot.c
|
||||
+++ b/src/nautilus-window-slot.c
|
||||
@@ -1458,7 +1458,17 @@ viewed_file_changed_callback (NautilusFile *file,
|
||||
go_to_file = g_file_new_for_path (g_get_home_dir ());
|
||||
}
|
||||
|
||||
- nautilus_window_slot_open_location_full (self, go_to_file, 0, NULL);
|
||||
+ if (g_file_equal (location, go_to_file))
|
||||
+ {
|
||||
+ /* Path gone by time out may have been remounted by
|
||||
+ * `nautilus_find_existing_uri_in_hierarchy()`.
|
||||
+ */
|
||||
+ nautilus_window_slot_force_reload (self);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ nautilus_window_slot_open_location_full (self, go_to_file, 0, NULL);
|
||||
+ }
|
||||
|
||||
g_object_unref (go_to_file);
|
||||
g_object_unref (location);
|
||||
--
|
||||
2.40.0
|
||||
|
@ -0,0 +1,72 @@
|
||||
From b0e28bc19c065b4bc1d6fdea922ae2c09115b0e6 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Holy <oholy@redhat.com>
|
||||
Date: Tue, 24 Jan 2023 12:13:15 +0100
|
||||
Subject: [PATCH] window-slot: Try current location even if it is marked as
|
||||
gone
|
||||
|
||||
When the current location is marked as gone, Nautilus jumps to the
|
||||
first existing parent currently (except for non-native locations and
|
||||
mount roots). This is fine in most cases, but not for autofs locations
|
||||
as Nautilus jumps to parent everytime autofs mount timeouted. It would
|
||||
be better to stay in the same folder in this case. Let's try the current
|
||||
location first even if it is marked as gone to ensure that. It would be
|
||||
perhaps even better to prevent autofs locations somehow from timeouting
|
||||
at all, or avoid immediate remounting at least, but those solutions
|
||||
don't look easy to implement.
|
||||
|
||||
Fixes: https://gitlab.gnome.org/GNOME/nautilus/-/issues/1514
|
||||
---
|
||||
src/nautilus-window-slot.c | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
|
||||
index c06dc3432..a1af61887 100644
|
||||
--- a/src/nautilus-window-slot.c
|
||||
+++ b/src/nautilus-window-slot.c
|
||||
@@ -1442,11 +1442,10 @@ viewed_file_changed_callback (NautilusFile *file,
|
||||
if (priv->viewed_file_seen)
|
||||
{
|
||||
GFile *go_to_file;
|
||||
- GFile *parent;
|
||||
GFile *location;
|
||||
GMount *mount;
|
||||
+ gboolean find_existing = FALSE;
|
||||
|
||||
- parent = NULL;
|
||||
location = nautilus_file_get_location (file);
|
||||
|
||||
if (g_file_is_native (location))
|
||||
@@ -1455,16 +1454,18 @@ viewed_file_changed_callback (NautilusFile *file,
|
||||
|
||||
if (mount == NULL)
|
||||
{
|
||||
- parent = g_file_get_parent (location);
|
||||
+ find_existing = TRUE;
|
||||
}
|
||||
|
||||
g_clear_object (&mount);
|
||||
}
|
||||
|
||||
- if (parent != NULL)
|
||||
+ if (find_existing)
|
||||
{
|
||||
- /* auto-show existing parent */
|
||||
- go_to_file = nautilus_find_existing_uri_in_hierarchy (parent);
|
||||
+ /* Verify also the current location to prevent jumps to parent
|
||||
+ * in case of autofs.
|
||||
+ */
|
||||
+ go_to_file = nautilus_find_existing_uri_in_hierarchy (location);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1473,7 +1474,6 @@ viewed_file_changed_callback (NautilusFile *file,
|
||||
|
||||
nautilus_window_slot_open_location_full (self, go_to_file, 0, NULL);
|
||||
|
||||
- g_clear_object (&parent);
|
||||
g_object_unref (go_to_file);
|
||||
g_object_unref (location);
|
||||
}
|
||||
--
|
||||
2.39.2
|
||||
|
Loading…
Reference in new issue