diff -u -r pristine/gtk/gtkfilechooserbutton.c gtk+-2.18.3/gtk/gtkfilechooserbutton.c --- pristine/gtk/gtkfilechooserbutton.c 2009-10-09 01:00:43.000000000 -0400 +++ gtk+-2.18.3/gtk/gtkfilechooserbutton.c 2009-11-10 19:25:55.257874597 -0500 @@ -1776,10 +1776,16 @@ GFile *base_file; base_file = _gtk_file_system_volume_get_root (volume); - if (base_file != NULL && !g_file_is_native (base_file)) + if (base_file != NULL) { - _gtk_file_system_volume_free (volume); - continue; + if (!g_file_is_native (base_file)) + { + g_object_unref (base_file); + _gtk_file_system_volume_free (volume); + continue; + } + else + g_object_unref (base_file); } } } diff -u -r pristine/gtk/gtkfilechooserdefault.c gtk+-2.18.3/gtk/gtkfilechooserdefault.c --- pristine/gtk/gtkfilechooserdefault.c 2009-10-16 10:35:45.000000000 -0400 +++ gtk+-2.18.3/gtk/gtkfilechooserdefault.c 2009-11-10 19:25:49.165873229 -0500 @@ -828,7 +828,7 @@ if (cancellable) g_cancellable_cancel (cancellable); - if (!(shortcut_type == SHORTCUT_TYPE_FILE || + if (!(shortcut_type == SHORTCUT_TYPE_FILE || shortcut_type == SHORTCUT_TYPE_VOLUME) || !col_data) return; @@ -840,12 +840,10 @@ volume = col_data; _gtk_file_system_volume_free (volume); } - else + if (shortcut_type == SHORTCUT_TYPE_FILE) { GFile *file; - g_assert (shortcut_type == SHORTCUT_TYPE_FILE); - file = col_data; g_object_unref (file); } @@ -2094,7 +2092,10 @@ } if (!base_is_native) - continue; + { + _gtk_file_system_volume_free (volume); + continue; + } } } @@ -3587,9 +3588,7 @@ if (shortcut_type == SHORTCUT_TYPE_SEPARATOR) return FALSE; else if (shortcut_type == SHORTCUT_TYPE_VOLUME) - { - return FALSE; - } + return FALSE; else if (shortcut_type == SHORTCUT_TYPE_FILE) { GFile *file; @@ -10794,6 +10793,9 @@ "standard::type", shortcuts_activate_get_info_cb, data); } + + if (volume) + _gtk_file_system_volume_free (volume); } else if (shortcut_type == SHORTCUT_TYPE_SEARCH) { diff -u -r pristine/gtk/gtkfilesystem.c gtk+-2.18.3/gtk/gtkfilesystem.c --- pristine/gtk/gtkfilesystem.c 2009-06-04 15:18:04.000000000 -0400 +++ gtk+-2.18.3/gtk/gtkfilesystem.c 2009-11-10 19:20:13.192873941 -0500 @@ -468,6 +468,8 @@ priv->volumes = g_slist_prepend (priv->volumes, g_object_ref (drive)); } + + g_object_unref (drive); } g_list_free (drives); @@ -499,6 +501,8 @@ /* see comment above in why we add an icon for a volume */ priv->volumes = g_slist_prepend (priv->volumes, g_object_ref (volume)); } + + g_object_unref (volume); } /* add mounts that has no volume (/etc/mtab mounts, ftp, sftp,...) */ @@ -520,11 +524,13 @@ */ if (mount_referenced_by_volume_activation_root (volumes, mount)) { + g_object_unref (mount); continue; } /* show this mount */ priv->volumes = g_slist_prepend (priv->volumes, g_object_ref (mount)); + g_object_unref (mount); } g_list_free (volumes); @@ -604,6 +610,7 @@ get_volumes_list (GTK_FILE_SYSTEM (file_system)); list = g_slist_copy (priv->volumes); + g_slist_foreach (list, (GFunc)g_object_ref, NULL); #ifndef G_OS_WIN32 /* Prepend root volume */ @@ -1025,6 +1032,8 @@ if (error) g_error_free (error); + + _gtk_file_system_volume_free (volume); } GCancellable *