Make `Node::context` optional as well

Antonio Scandurra and Marshall created

This was an oversight in d09dfe0.

Co-Authored-By: Marshall <marshall@zed.dev>

Change summary

crates/gpui2/src/key_dispatch.rs | 10 +++++-----
crates/gpui2/src/window.rs       |  8 ++++----
2 files changed, 9 insertions(+), 9 deletions(-)

Detailed changes

crates/gpui2/src/key_dispatch.rs 🔗

@@ -28,7 +28,7 @@ pub(crate) struct DispatchTree {
 pub(crate) struct DispatchNode {
     pub key_listeners: SmallVec<[KeyListener; 2]>,
     pub action_listeners: SmallVec<[DispatchActionListener; 16]>,
-    pub context: KeyContext,
+    pub context: Option<KeyContext>,
     parent: Option<DispatchNodeId>,
 }
 
@@ -70,14 +70,14 @@ impl DispatchTree {
         });
         self.node_stack.push(node_id);
         if let Some(context) = context {
-            self.active_node().context = context.clone();
+            self.active_node().context = Some(context.clone());
             self.context_stack.push(context);
         }
     }
 
     pub fn pop_node(&mut self) {
         let node_id = self.node_stack.pop().unwrap();
-        if !self.nodes[node_id.0].context.is_empty() {
+        if self.nodes[node_id.0].context.is_some() {
             self.context_stack.pop();
         }
     }
@@ -95,8 +95,8 @@ impl DispatchTree {
             self.context_stack.clear();
             for node_id in dispatch_path {
                 let node = self.node(node_id);
-                if !node.context.is_empty() {
-                    self.context_stack.push(node.context.clone());
+                if let Some(context) = node.context.clone() {
+                    self.context_stack.push(context);
                 }
 
                 if let Some((context_stack, matcher)) = old_tree

crates/gpui2/src/window.rs 🔗

@@ -1393,8 +1393,8 @@ impl<'a> WindowContext<'a> {
         for node_id in &dispatch_path {
             let node = self.window.current_frame.dispatch_tree.node(*node_id);
 
-            if !node.context.is_empty() {
-                context_stack.push(node.context.clone());
+            if let Some(context) = node.context.clone() {
+                context_stack.push(context);
             }
 
             for key_listener in node.key_listeners.clone() {
@@ -1418,7 +1418,7 @@ impl<'a> WindowContext<'a> {
 
             // Match keystrokes
             let node = self.window.current_frame.dispatch_tree.node(*node_id);
-            if !node.context.is_empty() {
+            if node.context.is_some() {
                 if let Some(key_down_event) = event.downcast_ref::<KeyDownEvent>() {
                     if let Some(found) = self
                         .window
@@ -1563,7 +1563,7 @@ impl<'a> WindowContext<'a> {
         let context_stack = dispatch_tree
             .dispatch_path(node_id)
             .into_iter()
-            .map(|node_id| dispatch_tree.node(node_id).context.clone())
+            .filter_map(|node_id| dispatch_tree.node(node_id).context.clone())
             .collect();
         dispatch_tree.bindings_for_action(action, &context_stack)
     }