From e96d0a9355713c07bbc3ad8b298b2c8ab0ab04d7 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Sat, 26 Feb 2022 14:03:14 -0700 Subject: [PATCH] Activate the *newest* existing project find view on cmd-shift-F --- crates/find/src/project_find.rs | 5 ++++- crates/workspace/src/workspace.rs | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/find/src/project_find.rs b/crates/find/src/project_find.rs index 293422486030b47aef296d0ca78fc54f9f33a13a..af2d1856ccdbdb97a7426a7032029ab5e492741f 100644 --- a/crates/find/src/project_find.rs +++ b/crates/find/src/project_find.rs @@ -386,7 +386,10 @@ impl ItemView for ProjectFindView { impl ProjectFindView { fn deploy(workspace: &mut Workspace, _: &Deploy, cx: &mut ViewContext) { - if let Some(existing) = workspace.item_of_type::(cx) { + if let Some(existing) = workspace + .items_of_type::(cx) + .max_by_key(|existing| existing.id()) + { workspace.activate_item(&existing, cx); } else { let model = cx.add_model(|cx| ProjectFind::new(workspace.project().clone(), cx)); diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index bff2d2f94616f7120a83dc8d8b061b675c7dc161..585695c520c757b3dddc851571a13c519373598e 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -826,6 +826,15 @@ impl Workspace { .find_map(|i| i.upgrade(cx).and_then(|i| i.to_any().downcast())) } + pub fn items_of_type<'a, T: Item>( + &'a self, + cx: &'a AppContext, + ) -> impl 'a + Iterator> { + self.items + .iter() + .filter_map(|i| i.upgrade(cx).and_then(|i| i.to_any().downcast())) + } + pub fn active_item(&self, cx: &AppContext) -> Option> { self.active_pane().read(cx).active_item() }