From 4e7cf03c5efdd314d3bed38923c0ac21f2e39f17 Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Sun, 4 Jan 2026 14:51:18 -0300 Subject: [PATCH] ui: Make hitting enter also open the context menu submenu (#46032) This PR makes hitting `enter`/`return` in a submenu trigger also open and focus the submenu instead of closing the parent menu. Building on feedback from @SomeoneToIgnore: https://github.com/zed-industries/zed/pull/45882#issuecomment-3708275031. Release Notes: - N/A --- crates/ui/src/components/context_menu.rs | 28 +++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/crates/ui/src/components/context_menu.rs b/crates/ui/src/components/context_menu.rs index 05a70a1d20c934510d21b1c340e36d9297ae5d2a..7dae8c79a0f796a193b990b4107cd6eb4b43f91f 100644 --- a/crates/ui/src/components/context_menu.rs +++ b/crates/ui/src/components/context_menu.rs @@ -834,7 +834,33 @@ impl ContextMenu { } pub fn confirm(&mut self, _: &menu::Confirm, window: &mut Window, cx: &mut Context) { + let Some(ix) = self.selected_index else { + return; + }; + + if let Some(ContextMenuItem::Submenu { builder, .. }) = self.items.get(ix) { + self.open_submenu( + ix, + builder.clone(), + SubmenuOpenTrigger::Keyboard, + window, + cx, + ); + + if let SubmenuState::Open(open_submenu) = &self.submenu_state { + let focus_handle = open_submenu.entity.read(cx).focus_handle.clone(); + window.focus(&focus_handle, cx); + open_submenu.entity.update(cx, |submenu, cx| { + submenu.select_first(&SelectFirst, window, cx); + }); + } + + cx.notify(); + return; + } + let context = self.action_context.as_ref(); + if let Some( ContextMenuItem::Entry(ContextMenuEntry { handler, @@ -842,7 +868,7 @@ impl ContextMenu { .. }) | ContextMenuItem::CustomEntry { handler, .. }, - ) = self.selected_index.and_then(|ix| self.items.get(ix)) + ) = self.items.get(ix) { (handler)(context, window, cx) }