Allow context menu to be cancelled after deploying it twice

Nathan Sobo created

Previously, two right clicks would cause an issue with cancelling the context menu via escape.

Change summary

crates/context_menu/src/context_menu.rs | 4 +++-
crates/gpui/src/app.rs                  | 4 ++++
2 files changed, 7 insertions(+), 1 deletion(-)

Detailed changes

crates/context_menu/src/context_menu.rs 🔗

@@ -169,7 +169,9 @@ impl ContextMenu {
             self.items = items.collect();
             self.position = position;
             self.visible = true;
-            self.previously_focused_view_id = cx.focused_view_id(cx.window_id());
+            if !cx.is_self_focused() {
+                self.previously_focused_view_id = cx.focused_view_id(cx.window_id());
+            }
             cx.focus_self();
         } else {
             self.visible = false;

crates/gpui/src/app.rs 🔗

@@ -3255,6 +3255,10 @@ impl<'a, T: View> ViewContext<'a, T> {
         self.app.focus(self.window_id, Some(self.view_id));
     }
 
+    pub fn is_self_focused(&self) -> bool {
+        self.app.focused_view_id(self.window_id) == Some(self.view_id)
+    }
+
     pub fn blur(&mut self) {
         self.app.focus(self.window_id, None);
     }