Index: src/xfdesktop-file-icon-manager.c =================================================================== --- src/xfdesktop-file-icon-manager.c (revision 21473) +++ src/xfdesktop-file-icon-manager.c (working copy) @@ -339,11 +339,28 @@ XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(icon); ThunarVfsMimeApplication *mime_app; const ThunarVfsInfo *info = xfdesktop_file_icon_peek_info(file_icon); + ThunarVfsVolume *volume = xfdesktop_file_icon_peek_volume(file_icon); gboolean succeeded = FALSE; - GList *path_list = g_list_prepend(NULL, info->path); TRACE("entering"); + /* Unmounted volume icon */ + if (volume && !thunar_vfs_volume_is_mounted(volume)) { + GError *error = NULL; + GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view)); + gboolean result = thunar_vfs_volume_mount (volume, toplevel, &error); + ThunarVfsPath *new_path = thunar_vfs_volume_get_mount_point(volume); + if(!info || !thunar_vfs_path_equal(info->path, new_path)) { + ThunarVfsInfo *new_info = thunar_vfs_info_new_for_path(new_path, + NULL); + if(new_info) { + xfdesktop_file_icon_update_info(file_icon, new_info); + info = new_info; + thunar_vfs_info_unref(new_info); + } + } + } + if(info->type == THUNAR_VFS_FILE_TYPE_DIRECTORY) { succeeded = xfdesktop_file_icon_launch_external(file_icon, fmanager->priv->gscreen); @@ -360,19 +377,20 @@ info->mime_info); if(mime_app) { DBG("executing"); + GList *path_list = g_list_prepend(NULL, info->path); succeeded = thunar_vfs_mime_handler_exec(THUNAR_VFS_MIME_HANDLER(mime_app), fmanager->priv->gscreen, path_list, NULL); g_object_unref(G_OBJECT(mime_app)); + g_list_free(path_list); } else { succeeded = xfdesktop_file_icon_launch_external(file_icon, fmanager->priv->gscreen); } } - g_list_free(path_list); if(!succeeded) { GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view)); @@ -1855,7 +1873,7 @@ XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(icon); XfdesktopFileIconManager *fmanager = XFDESKTOP_FILE_ICON_MANAGER(user_data); const ThunarVfsInfo *info = xfdesktop_file_icon_peek_info(file_icon); - ThunarVfsMimeInfo *mime_info = info->mime_info; + ThunarVfsMimeInfo *mime_info = info ? info->mime_info : NULL; ThunarVfsVolume *volume = xfdesktop_file_icon_peek_volume(file_icon); GList *selected, *mime_apps, *l, *mime_actions = NULL; GtkWidget *menu, *mi, *img, *menu2; @@ -1878,6 +1896,9 @@ g_list_foreach(selected, (GFunc)g_object_ref, NULL); g_object_set_data(G_OBJECT(menu), "--xfdesktop-icon-list", selected); + if (volume && !thunar_vfs_volume_is_mounted(volume)) + goto is_volume; + if(multi_sel) { img = gtk_image_new_from_stock(GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU); gtk_widget_show(img); @@ -2058,6 +2079,8 @@ gtk_widget_show(mi); gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); +is_volume: + /* FIXME: need to handle multi-selection properly */ if(volume && !multi_sel) { mi = gtk_image_menu_item_new_with_mnemonic(_("_Mount Volume")); @@ -2139,7 +2162,8 @@ fmanager); } } - + + if (!(volume && !thunar_vfs_volume_is_mounted(volume))) { mi = gtk_separator_menu_item_new(); gtk_widget_show(mi); gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); @@ -2157,7 +2181,7 @@ G_CALLBACK(xfdesktop_file_icon_menu_properties), fmanager); } - + } mi = gtk_separator_menu_item_new(); gtk_widget_show(mi); gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);