Re: Nautilus location bar
- From: Виталий Ищенко <betalb gmail com>
- To: Alexander Larsson <alexl redhat com>
- Cc: nautilus-list gnome org
- Subject: Re: Nautilus location bar
- Date: Thu, 11 Jan 2007 22:19:11 +0300
В Чтв, 11/01/2007 в 12:12 +0100, Alexander Larsson пишет:
Really, we should have a function in gnome vfs that you pass the current
uri too so it correctly handles relative uris.
I though that gnome_vfs_uri_resolve_relative should do this kind of things...
But after reading doc's for this function, i can't understand following paragraph:
Otherwise, depending on its precise syntax, it
inherits some aspects of the parent URI, but the
parents' fragment and query components are ignored.
Does it means, that '..' & '.' won't be expanded?
Or we could assume, that:
1) ./path/to/smth - is valid
./../path/to/smth - is NOT valid (a simple test can find
this case and forbid it)
2) ../../../path/to/smth - is valid
../path/../to/smth - is NOT valid
./path/to/../smth - is NOT valid
Changing the cwd like
that is not threadsafe and quite ugly.
Yeah, I know it's ugly fix =)
Could nautilus_location_bar_get_location (...) look like this:
gboolean utf8;
const char *charset;
char *user_location_escaped, *locale_path, *user_location, *best_uri;
GnomeVFSURI *currentURI, *bestURI;
user_location = gtk_editable_get_chars (GTK_EDITABLE (bar->details->entry), 0, -1);
g_strstrip (user_location);
utf8 = vfs_get_filename_charset (&charset);
/* TODO: strip spaces at the end */
if (!utf8) {
locale_path = g_convert (user_location, -1, charset, "UTF-8", NULL, NULL, NULL);
if (locale_path != NULL) {
user_location_escaped = gnome_vfs_escape_path_string (locale_path);
g_free (locale_path);
} else {
return g_strdup(bar->details->last_location);
}
} else {
user_location_escaped = gnomr_vfs_escape_path_string (user_location);
}
currentURI = gnome_vfs_uri_new (bar->details->last_location);
bestURI = gnome_vfs_uri_resolve_relative (currentURI, user_location_escaped);
best_uri = g_strdup (gnome_vfs_uri_get_path (bestURI));
gnome_vfs_uri_unref (currentURI);
gnome_vfs_uri_unref (bestURI);
g_free (user_location_escaped);
g_free (user_location);
return best_uri;
Or i'm missing something?
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]