The gtk_file_chooser_get_filename() returning relative path instead of absolute broke inkscape (#452648) 2008-06-15 Carlos Garnacho * 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. Index: trunk/gtk/gtkfilechooserdefault.c =================================================================== --- trunk/gtk/gtkfilechooserdefault.c (revision 20392) +++ trunk/gtk/gtkfilechooserdefault.c (revision 20393) @@ -6982,6 +6982,8 @@ profile_start ("start", NULL); + g_object_ref (file); + switch (impl->operation_mode) { case OPERATION_MODE_SEARCH: @@ -7001,6 +7003,7 @@ 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 @@ data); set_busy_cursor (impl, TRUE); + g_object_unref (file); profile_end ("end", NULL); return TRUE; Index: trunk/gtk/gtkfilesystem.c =================================================================== --- trunk/gtk/gtkfilesystem.c (revision 20392) +++ trunk/gtk/gtkfilesystem.c (revision 20393) @@ -1662,50 +1662,6 @@ 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,24 +1680,14 @@ 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; + icon = g_mount_get_icon (G_MOUNT (volume)); - 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); - } - if (!icon) return NULL; Index: trunk/gtk/gtkfilechooser.c =================================================================== --- trunk/gtk/gtkfilechooser.c (revision 20392) +++ trunk/gtk/gtkfilechooser.c (revision 20393) @@ -454,7 +454,7 @@ if (file) { - result = g_file_get_basename (file); + result = g_file_get_path (file); g_object_unref (file); }