Return full path here as expected, not just the basename.

2008-06-15  Carlos Garnacho  <carlos@imendio.com>

        * gtk/gtkfilechooser.c (gtk_file_chooser_get_filename): Return full
        path here as expected, not just the basename.

        * gtk/gtkfilechooserdefault.c
        (gtk_file_chooser_default_update_current_folder): Ensure that we keep
        a reference to file, since it can be destroyed when switching back to
        browse mode.

        * gtk/gtkfilesystem.c (get_icon_for_special_directory): Removed, home
        and desktop directories are dealt by the filechooser as normal files,
        not volumes, so the icon for these is handled directly by GIO.
        (_gtk_file_system_volume_render_icon): Update caller.

svn path=/trunk/; revision=20393
This commit is contained in:
Carlos Garnacho 2008-06-15 23:32:11 +00:00 committed by Carlos Garnacho
parent 4d15d77fc5
commit bfe00f9b9b
4 changed files with 22 additions and 57 deletions

View File

@ -1,3 +1,18 @@
2008-06-15 Carlos Garnacho <carlos@imendio.com>
* gtk/gtkfilechooser.c (gtk_file_chooser_get_filename): Return full
path here as expected, not just the basename.
* gtk/gtkfilechooserdefault.c
(gtk_file_chooser_default_update_current_folder): Ensure that we keep
a reference to file, since it can be destroyed when switching back to
browse mode.
* gtk/gtkfilesystem.c (get_icon_for_special_directory): Removed, home
and desktop directories are dealt by the filechooser as normal files,
not volumes, so the icon for these is handled directly by GIO.
(_gtk_file_system_volume_render_icon): Update caller.
2008-06-15 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkcellrendererpixbuf.c: Add a gicon property.

View File

@ -454,7 +454,7 @@ gtk_file_chooser_get_filename (GtkFileChooser *chooser)
if (file)
{
result = g_file_get_basename (file);
result = g_file_get_path (file);
g_object_unref (file);
}

View File

@ -6982,6 +6982,8 @@ gtk_file_chooser_default_update_current_folder (GtkFileChooser *chooser,
profile_start ("start", NULL);
g_object_ref (file);
switch (impl->operation_mode)
{
case OPERATION_MODE_SEARCH:
@ -7001,6 +7003,7 @@ gtk_file_chooser_default_update_current_folder (GtkFileChooser *chooser,
GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
_("Cannot change to folder because it is not local"));
g_object_unref (file);
profile_end ("end - not local", NULL);
return FALSE;
}
@ -7024,6 +7027,7 @@ gtk_file_chooser_default_update_current_folder (GtkFileChooser *chooser,
data);
set_busy_cursor (impl, TRUE);
g_object_unref (file);
profile_end ("end", NULL);
return TRUE;

View File

@ -1662,50 +1662,6 @@ get_pixbuf_from_gicon (GIcon *icon,
return pixbuf;
}
static GIcon *
get_icon_for_special_directory (GFile *file)
{
const gchar *special_dir;
GFile *special_file;
special_dir = g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP);
special_file = g_file_new_for_path (special_dir);
if (g_file_equal (file, special_file))
{
const char *names[] = {
"user-desktop",
"gnome-fs-desktop",
"folder",
"gtk-directory",
NULL
};
g_object_unref (special_file);
return g_themed_icon_new_from_names ((char **)names, -1);
}
g_object_unref (special_file);
special_dir = g_get_home_dir ();
special_file = g_file_new_for_path (special_dir);
if (g_file_equal (file, special_file))
{
const char *names[] = {
"user-home",
"gnome-fs-home",
"folder",
"gtk-directory",
NULL
};
g_object_unref (special_file);
return g_themed_icon_new_from_names ((char **)names, -1);
}
g_object_unref (special_file);
return NULL;
}
GdkPixbuf *
_gtk_file_system_volume_render_icon (GtkFileSystemVolume *volume,
GtkWidget *widget,
@ -1724,23 +1680,13 @@ _gtk_file_system_volume_render_icon (GtkFileSystemVolume *volume,
DEBUG ("volume_get_icon_name");
if (IS_ROOT_VOLUME (volume))
icon = g_themed_icon_new_from_names ((char **)harddisk_icons, -1);
icon = g_themed_icon_new_from_names ((char **) harddisk_icons, -1);
else if (G_IS_DRIVE (volume))
icon = g_drive_get_icon (G_DRIVE (volume));
else if (G_IS_VOLUME (volume))
icon = g_volume_get_icon (G_VOLUME (volume));
else if (G_IS_MOUNT (volume))
{
GMount *mount = G_MOUNT (volume);
GFile *file;
file = g_mount_get_root (mount);
icon = get_icon_for_special_directory (file);
g_object_unref (file);
if (!icon)
icon = g_mount_get_icon (mount);
}
icon = g_mount_get_icon (G_MOUNT (volume));
if (!icon)
return NULL;