Fix a bug where the modal layer could not be dismissed by the mouse

Mikayla Maki created

Change summary

crates/workspace/src/modal_layer.rs | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)

Detailed changes

crates/workspace/src/modal_layer.rs 🔗

@@ -1,4 +1,7 @@
-use gpui::{AnyView, DismissEvent, Entity, FocusHandle, Focusable as _, ManagedView, Subscription};
+use gpui::{
+    AnyView, DismissEvent, Entity, FocusHandle, Focusable as _, ManagedView, MouseButton,
+    Subscription,
+};
 use ui::prelude::*;
 
 #[derive(Debug)]
@@ -172,11 +175,13 @@ impl Render for ModalLayer {
                 let mut background = cx.theme().colors().elevated_surface_background;
                 background.fade_out(0.2);
                 el.bg(background)
-                    .occlude()
-                    .on_mouse_down_out(cx.listener(|this, _, window, cx| {
-                        this.hide_modal(window, cx);
-                    }))
             })
+            .on_mouse_down(
+                MouseButton::Left,
+                cx.listener(|this, _, window, cx| {
+                    this.hide_modal(window, cx);
+                }),
+            )
             .child(
                 v_flex()
                     .h(px(0.0))
@@ -185,7 +190,14 @@ impl Render for ModalLayer {
                     .flex_col()
                     .items_center()
                     .track_focus(&active_modal.focus_handle)
-                    .child(h_flex().occlude().child(active_modal.modal.view())),
+                    .child(
+                        h_flex()
+                            .occlude()
+                            .child(div().child(active_modal.modal.view()))
+                            .on_mouse_down(MouseButton::Left, |_, _, cx| {
+                                cx.stop_propagation();
+                            }),
+                    ),
             )
     }
 }