diff -ur xfdesktop-4.8.0/src/xfdesktop-file-icon-manager.c xfdesktop-4.8.0.new/src/xfdesktop-file-icon-manager.c --- xfdesktop-4.8.0/src/xfdesktop-file-icon-manager.c 2011-01-16 16:39:03.000000000 +0000 +++ xfdesktop-4.8.0.new/src/xfdesktop-file-icon-manager.c 2011-02-27 17:18:29.000000000 +0000 @@ -2384,6 +2384,55 @@ } static void +xfdesktop_file_icon_manager_mount_added(GVolumeMonitor *monitor, + GMount *mount, + gpointer user_data) +{ + GVolume *volume = g_mount_get_volume(mount); + XfdesktopVolumeIcon *icon; + if ( volume ){ + XfdesktopFileIconManager *fmanager = + XFDESKTOP_FILE_ICON_MANAGER(user_data); + icon = g_hash_table_lookup(fmanager->priv->removable_icons, volume); + xfdesktop_volume_icon_refresh_volume(icon); + g_object_unref(volume); + } +} + +static void +xfdesktop_file_icon_manager_mount_removed(GVolumeMonitor *monitor, + GMount *mount, + gpointer user_data) +{ + GVolume *volume; + GList *volumes; + GList *l; + GMount *vol_mount; + XfdesktopFileIconManager *fmanager = + XFDESKTOP_FILE_ICON_MANAGER(user_data); + volumes = g_volume_monitor_get_volumes(monitor); + char *name; + XfdesktopVolumeIcon *icon; + /* we don't know which volume was unmounted so test all volumes + and refresh all unmounted volume icons */ + for(l = volumes; l; l = l->next) { + volume = l->data; + vol_mount = g_volume_get_mount(volume); + if ( ! vol_mount ) { + icon = g_hash_table_lookup(fmanager->priv->removable_icons, + volume); + if (icon ) { + name = g_volume_get_name(volume); + xfdesktop_volume_icon_refresh_volume(icon); + g_free(name); + } + } + g_object_unref(l->data); + } + g_list_free(volumes); +} + +static void xfdesktop_file_icon_manager_volume_added(GVolumeMonitor *monitor, GVolume *volume, gpointer user_data) @@ -2442,6 +2491,13 @@ g_signal_connect(G_OBJECT(fmanager->priv->volume_monitor), "volume-removed", G_CALLBACK(xfdesktop_file_icon_manager_volume_removed), fmanager); + g_signal_connect(G_OBJECT(fmanager->priv->volume_monitor),"mount-added", + G_CALLBACK(xfdesktop_file_icon_manager_mount_added), + fmanager); + g_signal_connect(G_OBJECT(fmanager->priv->volume_monitor), + "mount-removed", + G_CALLBACK(xfdesktop_file_icon_manager_mount_removed), + fmanager); } static void diff -ur xfdesktop-4.8.0/src/xfdesktop-volume-icon.c xfdesktop-4.8.0.new/src/xfdesktop-volume-icon.c --- xfdesktop-4.8.0/src/xfdesktop-volume-icon.c 2011-01-16 16:39:03.000000000 +0000 +++ xfdesktop-4.8.0.new/src/xfdesktop-volume-icon.c 2011-02-27 16:44:31.000000000 +0000 @@ -835,3 +835,45 @@ g_return_val_if_fail(XFDESKTOP_IS_VOLUME_ICON(icon), NULL); return icon->priv->volume; } + +gboolean +xfdesktop_volume_icon_refresh_volume(XfdesktopVolumeIcon *icon) +{ + GMount *mount; + GVolume *volume; + g_return_val_if_fail(XFDESKTOP_IS_VOLUME_ICON(icon), FALSE); + volume = icon->priv->volume; + mount = g_volume_get_mount(volume); + if ( mount ){ + if ( icon->priv->file ) + g_object_unref(icon->priv->file); + icon->priv->file = g_mount_get_root(mount); + if (icon->priv->file_info) + g_object_unref(icon->priv->file_info); + icon->priv->file_info = g_file_query_info(icon->priv->file, + XFDESKTOP_FILE_INFO_NAMESPACE, G_FILE_QUERY_INFO_NONE, + NULL, NULL); + if (icon->priv->filesystem_info) + g_object_unref(icon->priv->filesystem_info); + icon->priv->filesystem_info = + g_file_query_filesystem_info(icon->priv->file, + XFDESKTOP_FILESYSTEM_INFO_NAMESPACE, + NULL, NULL); + + g_object_unref(mount); + } else { + if (icon->priv->file) + g_object_unref(icon->priv->file); + icon->priv->file = NULL; + if (icon->priv->file_info) + g_object_unref(icon->priv->file_info); + icon->priv->file_info = NULL; + if (icon->priv->filesystem_info) + g_object_unref(icon->priv->filesystem_info); + icon->priv->filesystem_info = NULL; + g_free(icon->priv->tooltip); + icon->priv->tooltip = NULL; + } + return TRUE; +} + diff -ur xfdesktop-4.8.0/src/xfdesktop-volume-icon.h xfdesktop-4.8.0.new/src/xfdesktop-volume-icon.h --- xfdesktop-4.8.0/src/xfdesktop-volume-icon.h 2011-01-16 16:39:03.000000000 +0000 +++ xfdesktop-4.8.0.new/src/xfdesktop-volume-icon.h 2011-02-27 16:45:08.000000000 +0000 @@ -56,6 +56,8 @@ GVolume *xfdesktop_volume_icon_peek_volume(XfdesktopVolumeIcon *icon); +gboolean xfdesktop_volume_icon_refresh_volume(XfdesktopVolumeIcon *icon); + G_END_DECLS #endif /* __XFDESKTOP_VOLUME_ICON_H__ */ Only in xfdesktop-4.8.0: xfdesktop.spec