1
0
mirror of https://gitlab.gnome.org/GNOME/nautilus synced 2024-07-02 16:31:15 +00:00

file: add parent param to remote+preview method

Allow passing a file's parent to get_filesystem_use_preview and
get_filesystem_remote. This resolves the multi-level parent checking
discussed in [1], by only checking one parent at most.

[1] https://gitlab.gnome.org/GNOME/nautilus/-/issues/3336
This commit is contained in:
Peter Eisenmann 2024-03-15 03:45:09 +01:00
parent 1517233558
commit 928055c842

View File

@ -4405,66 +4405,57 @@ get_default_file_icon (void)
}
static GFilesystemPreviewType
get_filesystem_use_preview (NautilusFile *file)
get_filesystem_use_preview (NautilusFile *file,
NautilusFile *parent)
{
if (file->details->filesystem_info_is_up_to_date)
{
return file->details->filesystem_use_preview;
}
else if (parent != NULL && parent->details->filesystem_info_is_up_to_date)
{
return parent->details->filesystem_use_preview;
}
else
{
g_autoptr (NautilusFile) parent = nautilus_file_get_parent (file);
if (parent != NULL && file->details->filesystem_info_is_up_to_date)
{
return parent->details->filesystem_use_preview;
}
return G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS;
}
return G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS;
}
static gboolean
get_filesystem_remote (NautilusFile *file)
get_filesystem_remote (NautilusFile *file,
NautilusFile *parent)
{
if (file->details->filesystem_info_is_up_to_date)
{
return file->details->filesystem_remote;
}
else
{
g_autoptr (NautilusFile) parent = NULL;
parent = nautilus_file_get_parent (file);
if (parent != NULL && file->details->filesystem_info_is_up_to_date)
{
return parent->details->filesystem_remote;
}
g_autoptr (NautilusFile) tmp_parent = NULL;
if (parent == NULL)
{
tmp_parent = nautilus_file_get_parent (file);
parent = tmp_parent;
}
return FALSE;
if (parent != NULL && parent->details->filesystem_info_is_up_to_date)
{
return parent->details->filesystem_remote;
}
else
{
return FALSE;
}
}
static gboolean
get_speed_tradeoff_preference_for_file (NautilusFile *file,
NautilusSpeedTradeoffValue value)
{
GFilesystemPreviewType use_preview;
g_autoptr (NautilusFile) parent = NULL;
NautilusFile *preffered_file = file;
g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
/* If the info is not already available, it's better to share the parent
* between the filesystem info check functions then to let both parse it
* twice. */
if (!file->details->filesystem_info_is_up_to_date)
{
parent = nautilus_file_get_parent (file);
preffered_file = parent != NULL ? parent : file;
}
use_preview = get_filesystem_use_preview (preffered_file);
g_autoptr (NautilusFile) parent = file->details->filesystem_info_is_up_to_date ?
NULL : nautilus_file_get_parent (file);
GFilesystemPreviewType use_preview = get_filesystem_use_preview (file, parent);
if (value == NAUTILUS_SPEED_TRADEOFF_ALWAYS)
{
@ -4496,7 +4487,7 @@ get_speed_tradeoff_preference_for_file (NautilusFile *file,
else
{
/* only local files */
return !get_filesystem_remote (preffered_file);
return !get_filesystem_remote (file, parent);
}
}
@ -7428,7 +7419,7 @@ nautilus_file_is_remote (NautilusFile *file)
{
g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
return get_filesystem_remote (file);
return get_filesystem_remote (file, NULL);
}
/**