@@ -28,7 +28,8 @@ use ui::{KeyBinding, ListItem, ListItemSpacing, Tooltip, prelude::*, tooltip_con
2828use util:: { ResultExt , paths:: PathExt } ;
2929use workspace:: {
3030 CloseIntent , HistoryManager , ModalView , OpenOptions , PathList , SerializedWorkspaceLocation ,
31- WORKSPACE_DB , Workspace , WorkspaceId , with_active_or_new_workspace,
31+ WORKSPACE_DB , Workspace , WorkspaceId , notifications:: DetachAndPromptErr ,
32+ with_active_or_new_workspace,
3233} ;
3334use zed_actions:: { OpenRecent , OpenRemote } ;
3435
@@ -420,77 +421,79 @@ impl PickerDelegate for RecentProjectsDelegate {
420421 } else {
421422 !secondary
422423 } ;
423- workspace
424- . update ( cx, |workspace, cx| {
425- if workspace. database_id ( ) == Some ( * candidate_workspace_id) {
426- Task :: ready ( Ok ( ( ) ) )
427- } else {
428- match candidate_workspace_location. clone ( ) {
429- SerializedWorkspaceLocation :: Local => {
430- let paths = candidate_workspace_paths. paths ( ) . to_vec ( ) ;
431- if replace_current_window {
432- cx. spawn_in ( window, async move |workspace, cx| {
433- let continue_replacing = workspace
434- . update_in ( cx, |workspace, window, cx| {
435- workspace. prepare_to_close (
436- CloseIntent :: ReplaceWindow ,
437- window,
438- cx,
439- )
440- } ) ?
441- . await ?;
442- if continue_replacing {
424+ workspace. update ( cx, |workspace, cx| {
425+ if workspace. database_id ( ) == Some ( * candidate_workspace_id) {
426+ return ;
427+ }
428+ match candidate_workspace_location. clone ( ) {
429+ SerializedWorkspaceLocation :: Local => {
430+ let paths = candidate_workspace_paths. paths ( ) . to_vec ( ) ;
431+ if replace_current_window {
432+ cx. spawn_in ( window, async move |workspace, cx| {
433+ let continue_replacing = workspace
434+ . update_in ( cx, |workspace, window, cx| {
435+ workspace. prepare_to_close (
436+ CloseIntent :: ReplaceWindow ,
437+ window,
438+ cx,
439+ )
440+ } ) ?
441+ . await ?;
442+ if continue_replacing {
443+ workspace
444+ . update_in ( cx, |workspace, window, cx| {
443445 workspace
444- . update_in ( cx, |workspace, window, cx| {
445- workspace. open_workspace_for_paths (
446- true , paths, window, cx,
447- )
448- } ) ?
449- . await
450- } else {
451- Ok ( ( ) )
452- }
453- } )
446+ . open_workspace_for_paths ( true , paths, window, cx)
447+ } ) ?
448+ . await
454449 } else {
455- workspace . open_workspace_for_paths ( false , paths , window , cx )
450+ Ok ( ( ) )
456451 }
457- }
458- SerializedWorkspaceLocation :: Remote ( mut connection) => {
459- let app_state = workspace. app_state ( ) . clone ( ) ;
460-
461- let replace_window = if replace_current_window {
462- window. window_handle ( ) . downcast :: < Workspace > ( )
463- } else {
464- None
465- } ;
466-
467- let open_options = OpenOptions {
468- replace_window,
469- ..Default :: default ( )
470- } ;
471-
472- if let RemoteConnectionOptions :: Ssh ( connection) = & mut connection {
473- SshSettings :: get_global ( cx)
474- . fill_connection_options_from_settings ( connection) ;
475- } ;
476-
477- let paths = candidate_workspace_paths. paths ( ) . to_vec ( ) ;
478-
479- cx. spawn_in ( window, async move |_, cx| {
480- open_remote_project (
481- connection. clone ( ) ,
482- paths,
483- app_state,
484- open_options,
485- cx,
486- )
487- . await
488- } )
489- }
452+ } )
453+ } else {
454+ workspace. open_workspace_for_paths ( false , paths, window, cx)
490455 }
491456 }
492- } )
493- . detach_and_log_err ( cx) ;
457+ SerializedWorkspaceLocation :: Remote ( mut connection) => {
458+ let app_state = workspace. app_state ( ) . clone ( ) ;
459+
460+ let replace_window = if replace_current_window {
461+ window. window_handle ( ) . downcast :: < Workspace > ( )
462+ } else {
463+ None
464+ } ;
465+
466+ let open_options = OpenOptions {
467+ replace_window,
468+ ..Default :: default ( )
469+ } ;
470+
471+ if let RemoteConnectionOptions :: Ssh ( connection) = & mut connection {
472+ SshSettings :: get_global ( cx)
473+ . fill_connection_options_from_settings ( connection) ;
474+ } ;
475+
476+ let paths = candidate_workspace_paths. paths ( ) . to_vec ( ) ;
477+
478+ cx. spawn_in ( window, async move |_, cx| {
479+ open_remote_project (
480+ connection. clone ( ) ,
481+ paths,
482+ app_state,
483+ open_options,
484+ cx,
485+ )
486+ . await
487+ } )
488+ }
489+ }
490+ . detach_and_prompt_err (
491+ "Failed to open project" ,
492+ window,
493+ cx,
494+ |_, _, _| None ,
495+ ) ;
496+ } ) ;
494497 cx. emit ( DismissEvent ) ;
495498 }
496499 }
0 commit comments