From dbcfb48198d80e6b6315dd752466279d2d8ec616 Mon Sep 17 00:00:00 2001
From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com>
Date: Sun, 23 Nov 2025 19:40:33 -0300
Subject: [PATCH] Add mouse-based affordance to open a recent project in new
window (#43373)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes https://github.com/zed-industries/zed/issues/31796
Release Notes:
- N/A
---
crates/recent_projects/src/recent_projects.rs | 44 ++++++++++++-------
1 file changed, 28 insertions(+), 16 deletions(-)
diff --git a/crates/recent_projects/src/recent_projects.rs b/crates/recent_projects/src/recent_projects.rs
index 8aab66533c59b7dae17cc7864d6a7e716d3ee948..280bf17a385db09c10c2844ac7126b3aac7adafb 100644
--- a/crates/recent_projects/src/recent_projects.rs
+++ b/crates/recent_projects/src/recent_projects.rs
@@ -544,6 +544,32 @@ impl PickerDelegate for RecentProjectsDelegate {
paths,
};
+ let secondary_actions = h_flex()
+ .gap_px()
+ .child(
+ IconButton::new("open_new_window", IconName::ArrowUpRight)
+ .icon_size(IconSize::XSmall)
+ .tooltip(Tooltip::text("Open Project in New Window"))
+ .on_click(cx.listener(move |this, _event, window, cx| {
+ cx.stop_propagation();
+ window.prevent_default();
+ this.delegate.set_selected_index(ix, window, cx);
+ this.delegate.confirm(true, window, cx);
+ })),
+ )
+ .child(
+ IconButton::new("delete", IconName::Close)
+ .icon_size(IconSize::Small)
+ .tooltip(Tooltip::text("Delete from Recent Projects"))
+ .on_click(cx.listener(move |this, _event, window, cx| {
+ cx.stop_propagation();
+ window.prevent_default();
+
+ this.delegate.delete_recent_project(ix, window, cx)
+ })),
+ )
+ .into_any_element();
+
Some(
ListItem::new(ix)
.toggle_state(selected)
@@ -577,24 +603,10 @@ impl PickerDelegate for RecentProjectsDelegate {
}),
)
.map(|el| {
- let delete_button = div()
- .child(
- IconButton::new("delete", IconName::Close)
- .icon_size(IconSize::Small)
- .on_click(cx.listener(move |this, _event, window, cx| {
- cx.stop_propagation();
- window.prevent_default();
-
- this.delegate.delete_recent_project(ix, window, cx)
- }))
- .tooltip(Tooltip::text("Delete from Recent Projects...")),
- )
- .into_any_element();
-
if self.selected_index() == ix {
- el.end_slot::(delete_button)
+ el.end_slot(secondary_actions)
} else {
- el.end_hover_slot::(delete_button)
+ el.end_hover_slot(secondary_actions)
}
})
.tooltip(move |_, cx| {