On Mon, 2005-01-03 at 23:28 +0000, Tor Lillqvist wrote:
> Owen Taylor writes:
> > Can we use/extend the GtkFileSystem abstraction here rather than
> > introducing #ifdef's?
>
> You mean like this: Adding the methods:
>
> int (*path_compare) (GtkFileSystem *file_system,
> const gchar *path1,
> const gchar *path2);
> char (*get_desktop) (GtkFileSystem *file_system);
>
> to the GtkFileSystemIface struct, and adding the functions:
>
> int gtk_file_system_path_compare (GtkFileSystem *file_system,
> const GtkFilePath *path1,
> const GtkFilePath *path2);
>
> GtkFilePath *gtk_file_system_get_desktop (GtkFileSystem *file_system);
For get_desktop(), yes. (const GtkFilePath *, I think). For file path
comparison, less sure.
> But what should be done with the gtk_file_path_compare(path1,path2)
> macro? Should that be made into a function in gtkfilesystem.c that
> uses an internal static GtkFileSystem object (of either the "Unix" or
> "Win32" variant) and calls gtk_file_system_path_compare()? Like this:
Hmm. Keeping GtkFilePath small and light is important. In the past
I considered allowing virtualization of GtkFilePath by doing
something like:
void
gtk_file_path_free (path)
{
g_free ((char *)path - sizeof(GtkFilePathClass *);
}
void
gtk_file_path_compare (path1, path2)
{
GtkFilePathClass *class = (GtkFilePathClass **)((char *)path -
GtkFilePathClass *);
if (class && class->compare)
return class->compare (path1, path2);
else
return strcmp (path1, path2);
}
But simply making path comparison a filesystem vfunction might be
simpler. One question before we go to far into solving this is when
is the current comparison a problem? When are we comparing a filename
in indeterminate case to a filename in the casing from the filesystem?
> int
> gtk_file_path_compare (const GtkFilePath *path1,
> const GtkFilePath *path2)
> {
> static GtkFileSystem *fs = NULL;
>
> if (fs == NULL)
> {
> #ifdef G_OS_WIN32
> fs = gtk_file_system_win32_new ();
> #else
> fs = gtk_file_system_unix_new ();
> #endif
> }
>
> return gtk_file_system_path_compare (fs, path1, path2);
> }
>
> Why BTW can there be several instances of GtkFileSystemUnix (and
> GtkFileSystemWin32)? Shouldn't these ideally be singletons? Or am I
> (very likely) missing something?
I suppose they could be singletons, but that would require
a fair bit of reworking. Having a single file system object per
file chooser also gives some limits to caching and hope that
memory might be eventually freed.
Regards,
Owen
Attachment:
signature.asc
Description: This is a digitally signed message part