@@ -194,7 +194,7 @@ impl TestServer {
themes: ThemeRegistry::new((), cx.font_cache()),
fs: fs.clone(),
build_window_options: |_, _, _| Default::default(),
- initialize_workspace: |_, _, _| unimplemented!(),
+ initialize_workspace: |_, _, _, _| unimplemented!(),
background_actions: || &[],
});
@@ -361,7 +361,7 @@ pub struct AppState {
pub fs: Arc<dyn fs::Fs>,
pub build_window_options:
fn(Option<WindowBounds>, Option<uuid::Uuid>, &dyn Platform) -> WindowOptions<'static>,
- pub initialize_workspace: fn(&mut Workspace, &Arc<AppState>, &mut ViewContext<Workspace>),
+ pub initialize_workspace: fn(&mut Workspace, bool, &Arc<AppState>, &mut ViewContext<Workspace>),
pub background_actions: BackgroundActions,
}
@@ -383,7 +383,7 @@ impl AppState {
fs,
languages,
user_store,
- initialize_workspace: |_, _, _| {},
+ initialize_workspace: |_, _, _, _| {},
build_window_options: |_, _, _| Default::default(),
background_actions: || &[],
})
@@ -733,6 +733,7 @@ impl Workspace {
let build_workspace =
|cx: &mut ViewContext<Workspace>,
serialized_workspace: Option<SerializedWorkspace>| {
+ let was_deserialized = serialized_workspace.is_some();
let mut workspace = Workspace::new(
serialized_workspace,
workspace_id,
@@ -740,7 +741,12 @@ impl Workspace {
app_state.clone(),
cx,
);
- (app_state.initialize_workspace)(&mut workspace, &app_state, cx);
+ (app_state.initialize_workspace)(
+ &mut workspace,
+ was_deserialized,
+ &app_state,
+ cx,
+ );
workspace
};
@@ -2734,7 +2740,7 @@ impl Workspace {
user_store: project.read(cx).user_store(),
fs: project.read(cx).fs().clone(),
build_window_options: |_, _, _| Default::default(),
- initialize_workspace: |_, _, _| {},
+ initialize_workspace: |_, _, _, _| {},
background_actions: || &[],
});
Self::new(None, 0, project, app_state, cx)
@@ -2998,28 +3004,11 @@ pub fn open_paths(
.await,
))
} else {
- let contains_directory =
- futures::future::join_all(abs_paths.iter().map(|path| app_state.fs.is_file(path)))
- .await
- .contains(&false);
-
- cx.update(|cx| {
- let task =
- Workspace::new_local(abs_paths, app_state.clone(), requesting_window_id, cx);
-
- cx.spawn(|mut cx| async move {
- let (workspace, items) = task.await;
-
- workspace.update(&mut cx, |workspace, cx| {
- if contains_directory {
- workspace.toggle_dock(DockPosition::Left, cx);
- }
- })?;
-
- anyhow::Ok((workspace, items))
+ Ok(cx
+ .update(|cx| {
+ Workspace::new_local(abs_paths, app_state.clone(), requesting_window_id, cx)
})
- })
- .await
+ .await)
}
})
}
@@ -3109,9 +3098,8 @@ pub fn join_remote_project(
let (_, workspace) = cx.add_window(
(app_state.build_window_options)(None, None, cx.platform().as_ref()),
|cx| {
- let mut workspace =
- Workspace::new(Default::default(), 0, project, app_state.clone(), cx);
- (app_state.initialize_workspace)(&mut workspace, &app_state, cx);
+ let mut workspace = Workspace::new(None, 0, project, app_state.clone(), cx);
+ (app_state.initialize_workspace)(&mut workspace, false, &app_state, cx);
workspace
},
);
@@ -35,7 +35,10 @@ use terminal_view::terminal_panel::{self, TerminalPanel};
use util::{channel::ReleaseChannel, paths, ResultExt};
use uuid::Uuid;
pub use workspace;
-use workspace::{create_and_open_local_file, open_new, AppState, NewFile, NewWindow, Workspace};
+use workspace::{
+ create_and_open_local_file, dock::PanelHandle, open_new, AppState, NewFile, NewWindow,
+ Workspace,
+};
#[derive(Deserialize, Clone, PartialEq)]
pub struct OpenBrowser {
@@ -279,6 +282,7 @@ pub fn init(app_state: &Arc<AppState>, cx: &mut gpui::AppContext) {
pub fn initialize_workspace(
workspace: &mut Workspace,
+ was_deserialized: bool,
app_state: &Arc<AppState>,
cx: &mut ViewContext<Workspace>,
) {
@@ -316,7 +320,21 @@ pub fn initialize_workspace(
workspace.set_titlebar_item(collab_titlebar_item.into_any(), cx);
let project_panel = ProjectPanel::new(workspace, cx);
+ let project_panel_position = project_panel.position(cx);
workspace.add_panel(project_panel, cx);
+ if !was_deserialized
+ && workspace
+ .project()
+ .read(cx)
+ .visible_worktrees(cx)
+ .any(|tree| {
+ tree.read(cx)
+ .root_entry()
+ .map_or(false, |entry| entry.is_dir())
+ })
+ {
+ workspace.toggle_dock(project_panel_position, cx);
+ }
let terminal_panel = cx.add_view(|cx| TerminalPanel::new(workspace, cx));
workspace.add_panel(terminal_panel, cx);