search-directory: Create own file

There is no reason for nautilus-directory.c to include the header for
a subclass just to implement a virtual method the subclass could have
implemented itself.

So, have NautilusSearchDirectory create NautilusSearchDirectoryFile
and stop including unneeded headers in directory.c.

Also do precondition checking in the method, not the implementation.

This sets a pattern for upcoming new NautilusFile subclasses.
This commit is contained in:
António Fernandes 2024-05-25 18:12:22 +01:00
parent 3c23786c8c
commit c7d515942b
2 changed files with 27 additions and 34 deletions

View file

@ -33,9 +33,6 @@
#include "nautilus-hash-queue.h"
#include "nautilus-metadata.h"
#include "nautilus-scheme.h"
#include "nautilus-search-directory-file.h"
#include "nautilus-search-directory.h"
#include "nautilus-starred-directory.h"
#include "nautilus-vfs-directory.h"
#include "nautilus-vfs-file.h"
@ -124,37 +121,9 @@ real_new_file_from_filename (NautilusDirectory *directory,
const char *filename,
gboolean self_owned)
{
NautilusFile *file;
g_assert (NAUTILUS_IS_DIRECTORY (directory));
g_assert (filename != NULL);
g_assert (filename[0] != '\0');
if (NAUTILUS_IS_SEARCH_DIRECTORY (directory))
{
if (self_owned)
{
file = NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_SEARCH_DIRECTORY_FILE,
"directory", directory,
NULL));
}
else
{
/* This doesn't normally happen, unless the user somehow types in a uri
* that references a file like this. (See #349840) */
file = NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_VFS_FILE,
"directory", directory,
NULL));
}
}
else
{
file = NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_VFS_FILE,
"directory", directory,
NULL));
}
return file;
return NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_VFS_FILE,
"directory", directory,
NULL));
}
static gboolean
@ -692,6 +661,10 @@ nautilus_directory_new_file_from_filename (NautilusDirectory *directory,
const char *filename,
gboolean self_owned)
{
g_assert (NAUTILUS_IS_DIRECTORY (directory));
g_assert (filename != NULL);
g_assert (filename[0] != '\0');
return NAUTILUS_DIRECTORY_CLASS (G_OBJECT_GET_CLASS (directory))->new_file_from_filename (directory,
filename,
self_owned);

View file

@ -691,6 +691,24 @@ search_engine_finished (NautilusSearchEngine *engine,
}
}
static NautilusFile *
search_new_file_from_filename (NautilusDirectory *directory,
const char *filename,
gboolean self_owned)
{
if (!self_owned)
{
/* This doesn't normally happen, unless the user somehow types in a uri
* that references a file like this.
* See https://bugzilla.gnome.org/show_bug.cgi?id=349840 */
return NAUTILUS_DIRECTORY_CLASS (nautilus_search_directory_parent_class)->new_file_from_filename (directory, filename, self_owned);
}
return NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_SEARCH_DIRECTORY_FILE,
"directory", directory,
NULL));
}
static void
search_force_reload (NautilusDirectory *directory)
{
@ -929,6 +947,8 @@ nautilus_search_directory_class_init (NautilusSearchDirectoryClass *class)
oclass->get_property = search_get_property;
oclass->set_property = search_set_property;
directory_class->new_file_from_filename = search_new_file_from_filename;
directory_class->are_all_files_seen = search_are_all_files_seen;
directory_class->contains_file = search_contains_file;
directory_class->force_reload = search_force_reload;