Merge remote-tracking branch 'origin/main' into assistant-2
This commit is contained in:
commit
9eb98122ec
59 changed files with 4270 additions and 1325 deletions
|
@ -10,7 +10,7 @@ mod persistence;
|
|||
pub mod searchable;
|
||||
// todo!()
|
||||
mod modal_layer;
|
||||
mod shared_screen;
|
||||
pub mod shared_screen;
|
||||
mod status_bar;
|
||||
mod toolbar;
|
||||
mod workspace_settings;
|
||||
|
@ -212,27 +212,31 @@ pub fn init(app_state: Arc<AppState>, cx: &mut AppContext) {
|
|||
init_settings(cx);
|
||||
notifications::init(cx);
|
||||
|
||||
// cx.add_global_action({
|
||||
// let app_state = Arc::downgrade(&app_state);
|
||||
// move |_: &Open, cx: &mut AppContext| {
|
||||
// let mut paths = cx.prompt_for_paths(PathPromptOptions {
|
||||
// files: true,
|
||||
// directories: true,
|
||||
// multiple: true,
|
||||
// });
|
||||
cx.on_action(Workspace::close_global);
|
||||
cx.on_action(restart);
|
||||
|
||||
// if let Some(app_state) = app_state.upgrade() {
|
||||
// cx.spawn(move |mut cx| async move {
|
||||
// if let Some(paths) = paths.recv().await.flatten() {
|
||||
// cx.update(|cx| {
|
||||
// open_paths(&paths, &app_state, None, cx).detach_and_log_err(cx)
|
||||
// });
|
||||
// }
|
||||
// })
|
||||
// .detach();
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
cx.on_action({
|
||||
let app_state = Arc::downgrade(&app_state);
|
||||
move |_: &Open, cx: &mut AppContext| {
|
||||
let mut paths = cx.prompt_for_paths(PathPromptOptions {
|
||||
files: true,
|
||||
directories: true,
|
||||
multiple: true,
|
||||
});
|
||||
|
||||
if let Some(app_state) = app_state.upgrade() {
|
||||
cx.spawn(move |mut cx| async move {
|
||||
if let Some(paths) = paths.await.log_err().flatten() {
|
||||
cx.update(|cx| {
|
||||
open_paths(&paths, &app_state, None, cx).detach_and_log_err(cx)
|
||||
})
|
||||
.ok();
|
||||
}
|
||||
})
|
||||
.detach();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
type ProjectItemBuilders =
|
||||
|
@ -1076,7 +1080,6 @@ impl Workspace {
|
|||
}
|
||||
}
|
||||
|
||||
// todo!(Non-window-actions)
|
||||
pub fn close_global(_: &CloseWindow, cx: &mut AppContext) {
|
||||
cx.windows().iter().find(|window| {
|
||||
window
|
||||
|
@ -1094,21 +1097,18 @@ impl Workspace {
|
|||
});
|
||||
}
|
||||
|
||||
pub fn close(
|
||||
&mut self,
|
||||
_: &CloseWindow,
|
||||
cx: &mut ViewContext<Self>,
|
||||
) -> Option<Task<Result<()>>> {
|
||||
pub fn close_window(&mut self, _: &CloseWindow, cx: &mut ViewContext<Self>) {
|
||||
let window = cx.window_handle();
|
||||
let prepare = self.prepare_to_close(false, cx);
|
||||
Some(cx.spawn(|_, mut cx| async move {
|
||||
cx.spawn(|_, mut cx| async move {
|
||||
if prepare.await? {
|
||||
window.update(&mut cx, |_, cx| {
|
||||
cx.remove_window();
|
||||
})?;
|
||||
}
|
||||
Ok(())
|
||||
}))
|
||||
anyhow::Ok(())
|
||||
})
|
||||
.detach_and_log_err(cx)
|
||||
}
|
||||
|
||||
pub fn prepare_to_close(
|
||||
|
@ -1855,13 +1855,13 @@ impl Workspace {
|
|||
})
|
||||
}
|
||||
|
||||
pub(crate) fn load_path(
|
||||
fn load_path(
|
||||
&mut self,
|
||||
path: ProjectPath,
|
||||
cx: &mut ViewContext<Self>,
|
||||
) -> Task<
|
||||
Result<(
|
||||
ProjectEntryId,
|
||||
Option<ProjectEntryId>,
|
||||
impl 'static + Send + FnOnce(&mut ViewContext<Pane>) -> Box<dyn ItemHandle>,
|
||||
)>,
|
||||
> {
|
||||
|
@ -2327,42 +2327,44 @@ impl Workspace {
|
|||
}))
|
||||
}
|
||||
|
||||
// pub fn follow_next_collaborator(
|
||||
// &mut self,
|
||||
// _: &FollowNextCollaborator,
|
||||
// cx: &mut ViewContext<Self>,
|
||||
// ) -> Option<Task<Result<()>>> {
|
||||
// let collaborators = self.project.read(cx).collaborators();
|
||||
// let next_leader_id = if let Some(leader_id) = self.leader_for_pane(&self.active_pane) {
|
||||
// let mut collaborators = collaborators.keys().copied();
|
||||
// for peer_id in collaborators.by_ref() {
|
||||
// if peer_id == leader_id {
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// collaborators.next()
|
||||
// } else if let Some(last_leader_id) =
|
||||
// self.last_leaders_by_pane.get(&self.active_pane.downgrade())
|
||||
// {
|
||||
// if collaborators.contains_key(last_leader_id) {
|
||||
// Some(*last_leader_id)
|
||||
// } else {
|
||||
// None
|
||||
// pub fn follow_next_collaborator(
|
||||
// &mut self,
|
||||
// _: &FollowNextCollaborator,
|
||||
// cx: &mut ViewContext<Self>,
|
||||
// ) {
|
||||
// let collaborators = self.project.read(cx).collaborators();
|
||||
// let next_leader_id = if let Some(leader_id) = self.leader_for_pane(&self.active_pane) {
|
||||
// let mut collaborators = collaborators.keys().copied();
|
||||
// for peer_id in collaborators.by_ref() {
|
||||
// if peer_id == leader_id {
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// collaborators.next()
|
||||
// } else if let Some(last_leader_id) =
|
||||
// self.last_leaders_by_pane.get(&self.active_pane.downgrade())
|
||||
// {
|
||||
// if collaborators.contains_key(last_leader_id) {
|
||||
// Some(*last_leader_id)
|
||||
// } else {
|
||||
// None
|
||||
// };
|
||||
|
||||
// let pane = self.active_pane.clone();
|
||||
// let Some(leader_id) = next_leader_id.or_else(|| collaborators.keys().copied().next())
|
||||
// else {
|
||||
// return None;
|
||||
// };
|
||||
// if Some(leader_id) == self.unfollow(&pane, cx) {
|
||||
// return None;
|
||||
// }
|
||||
// self.follow(leader_id, cx)
|
||||
// } else {
|
||||
// None
|
||||
// };
|
||||
|
||||
// let pane = self.active_pane.clone();
|
||||
// let Some(leader_id) = next_leader_id.or_else(|| collaborators.keys().copied().next())
|
||||
// else {
|
||||
// return;
|
||||
// };
|
||||
// if Some(leader_id) == self.unfollow(&pane, cx) {
|
||||
// return;
|
||||
// }
|
||||
// if let Some(task) = self.follow(leader_id, cx) {
|
||||
// task.detach();
|
||||
// }
|
||||
// }
|
||||
|
||||
pub fn follow(
|
||||
&mut self,
|
||||
|
@ -2411,6 +2413,18 @@ impl Workspace {
|
|||
self.start_following(leader_id, cx)
|
||||
}
|
||||
|
||||
// // if you're already following, find the right pane and focus it.
|
||||
// for (pane, state) in &self.follower_states {
|
||||
// if leader_id == state.leader_id {
|
||||
// cx.focus(pane);
|
||||
// return None;
|
||||
// }
|
||||
// }
|
||||
|
||||
// // Otherwise, follow.
|
||||
// self.start_following(leader_id, cx)
|
||||
// }
|
||||
|
||||
pub fn unfollow(&mut self, pane: &View<Pane>, cx: &mut ViewContext<Self>) -> Option<PeerId> {
|
||||
let state = self.follower_states.remove(pane)?;
|
||||
let leader_id = state.leader_id;
|
||||
|
@ -2627,8 +2641,6 @@ impl Workspace {
|
|||
update: proto::UpdateFollowers,
|
||||
cx: &mut AsyncWindowContext,
|
||||
) -> Result<()> {
|
||||
dbg!("process_leader_update", &update);
|
||||
|
||||
match update.variant.ok_or_else(|| anyhow!("invalid update"))? {
|
||||
proto::update_followers::Variant::UpdateActiveView(update_active_view) => {
|
||||
this.update(cx, |this, _| {
|
||||
|
@ -3223,13 +3235,8 @@ impl Workspace {
|
|||
|
||||
fn actions(&self, div: Div, cx: &mut ViewContext<Self>) -> Div {
|
||||
self.add_workspace_actions_listeners(div, cx)
|
||||
// cx.add_async_action(Workspace::open);
|
||||
// cx.add_async_action(Workspace::follow_next_collaborator);
|
||||
// cx.add_async_action(Workspace::close);
|
||||
.on_action(cx.listener(Self::close_inactive_items_and_panes))
|
||||
.on_action(cx.listener(Self::close_all_items_and_panes))
|
||||
// cx.add_global_action(Workspace::close_global);
|
||||
// cx.add_global_action(restart);
|
||||
.on_action(cx.listener(Self::save_all))
|
||||
.on_action(cx.listener(Self::add_folder_to_project))
|
||||
.on_action(cx.listener(|workspace, _: &Unfollow, cx| {
|
||||
|
@ -3278,6 +3285,9 @@ impl Workspace {
|
|||
workspace.close_all_docks(cx);
|
||||
}),
|
||||
)
|
||||
.on_action(cx.listener(Workspace::open))
|
||||
.on_action(cx.listener(Workspace::close_window))
|
||||
|
||||
// cx.add_action(Workspace::activate_pane_at_index);
|
||||
// cx.add_action(|workspace: &mut Workspace, _: &ReopenClosedItem, cx| {
|
||||
// workspace.reopen_closed_item(cx).detach();
|
||||
|
@ -3882,8 +3892,6 @@ impl WorkspaceStore {
|
|||
let leader_id = envelope.original_sender_id()?;
|
||||
let update = envelope.payload;
|
||||
|
||||
dbg!("handle_upate_followers");
|
||||
|
||||
this.update(&mut cx, |this, cx| {
|
||||
for workspace in &this.workspaces {
|
||||
workspace.update(cx, |workspace, cx| {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue