Dismiss Recent Projects & VCS modals on ESC (#3671)

Piotr Osiewicz created

Release Notes:

- N/A

Change summary

crates/recent_projects2/src/recent_projects.rs | 5 ++++-
crates/vcs_menu2/src/lib.rs                    | 9 +++++++--
2 files changed, 11 insertions(+), 3 deletions(-)

Detailed changes

crates/recent_projects2/src/recent_projects.rs 🔗

@@ -76,7 +76,10 @@ impl RecentProjects {
                         let delegate =
                             RecentProjectsDelegate::new(weak_workspace, workspace_locations, true);
 
-                        RecentProjects::new(delegate, cx)
+                        let modal = RecentProjects::new(delegate, cx);
+                        cx.subscribe(&modal.picker, |_, _, _, cx| cx.emit(DismissEvent))
+                            .detach();
+                        modal
                     });
                 } else {
                     workspace.show_notification(0, cx, |cx| {

crates/vcs_menu2/src/lib.rs 🔗

@@ -65,8 +65,13 @@ impl ModalBranchList {
     ) -> Result<()> {
         // Modal branch picker has a longer trailoff than a popover one.
         let delegate = BranchListDelegate::new(workspace, cx.view().clone(), 70, cx)?;
-        workspace.toggle_modal(cx, |cx| ModalBranchList {
-            picker: cx.build_view(|cx| Picker::new(delegate, cx)),
+        workspace.toggle_modal(cx, |cx| {
+            let modal = ModalBranchList {
+                picker: cx.build_view(|cx| Picker::new(delegate, cx)),
+            };
+            cx.subscribe(&modal.picker, |_, _, _, cx| cx.emit(DismissEvent))
+                .detach();
+            modal
         });
 
         Ok(())