debugger: Prevent pane context menu from showing on secondary mouse click in list entries (#30781)

Remco Smits created

This PR prevents the debug panel pane context menu from showing when you
click your secondary mouse button in **stackframe**, **breakpoint** and
**module** list entries.

Release Notes:

- N/A

Change summary

crates/debugger_ui/src/session/running/breakpoint_list.rs  | 20 +++++++
crates/debugger_ui/src/session/running/module_list.rs      |  3 +
crates/debugger_ui/src/session/running/stack_frame_list.rs |  6 ++
3 files changed, 27 insertions(+), 2 deletions(-)

Detailed changes

crates/debugger_ui/src/session/running/breakpoint_list.rs 🔗

@@ -21,8 +21,8 @@ use project::{
 use ui::{
     App, Clickable, Color, Context, Div, Icon, IconButton, IconName, Indicator, InteractiveElement,
     IntoElement, Label, LabelCommon, LabelSize, ListItem, ParentElement, Render, RenderOnce,
-    Scrollbar, ScrollbarState, SharedString, StatefulInteractiveElement, Styled, Window, div,
-    h_flex, px, v_flex,
+    Scrollbar, ScrollbarState, SharedString, StatefulInteractiveElement, Styled, Tooltip, Window,
+    div, h_flex, px, v_flex,
 };
 use util::{ResultExt, maybe};
 use workspace::Workspace;
@@ -259,6 +259,11 @@ impl LineBreakpoint {
                 dir, name, line
             )))
             .cursor_pointer()
+            .tooltip(Tooltip::text(if breakpoint.state.is_enabled() {
+                "Disable Breakpoint"
+            } else {
+                "Enable Breakpoint"
+            }))
             .on_click({
                 let weak = weak.clone();
                 let path = path.clone();
@@ -290,6 +295,9 @@ impl LineBreakpoint {
         )))
         .start_slot(indicator)
         .rounded()
+        .on_secondary_mouse_down(|_, _, cx| {
+            cx.stop_propagation();
+        })
         .end_hover_slot(
             IconButton::new(
                 SharedString::from(format!(
@@ -423,12 +431,20 @@ impl ExceptionBreakpoint {
             self.id
         )))
         .rounded()
+        .on_secondary_mouse_down(|_, _, cx| {
+            cx.stop_propagation();
+        })
         .start_slot(
             div()
                 .id(SharedString::from(format!(
                     "exception-breakpoint-ui-item-{}-click-handler",
                     self.id
                 )))
+                .tooltip(Tooltip::text(if self.is_enabled {
+                    "Disable Exception Breakpoint"
+                } else {
+                    "Enable Exception Breakpoint"
+                }))
                 .on_click(move |_, _, cx| {
                     list.update(cx, |this, cx| {
                         this.session.update(cx, |this, cx| {

crates/debugger_ui/src/session/running/stack_frame_list.rs 🔗

@@ -393,6 +393,9 @@ impl StackFrameList {
             .when(is_selected_frame, |this| {
                 this.bg(cx.theme().colors().element_hover)
             })
+            .on_any_mouse_down(|_, _, cx| {
+                cx.stop_propagation();
+            })
             .on_click(cx.listener(move |this, _, window, cx| {
                 this.selected_ix = Some(ix);
                 this.activate_selected_entry(window, cx);
@@ -480,6 +483,9 @@ impl StackFrameList {
             .when(is_selected, |this| {
                 this.bg(cx.theme().colors().element_hover)
             })
+            .on_any_mouse_down(|_, _, cx| {
+                cx.stop_propagation();
+            })
             .on_click(cx.listener(move |this, _, window, cx| {
                 this.selected_ix = Some(ix);
                 this.activate_selected_entry(window, cx);