From 7842fdeb3200b9b783b7170fb9840019f562c9f5 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 7 Dec 2023 12:54:28 +0100 Subject: [PATCH] Fix confirming rename not working on editor2 --- crates/editor2/src/editor.rs | 24 +++---- crates/editor2/src/element.rs | 117 +++++++++++++++++----------------- 2 files changed, 71 insertions(+), 70 deletions(-) diff --git a/crates/editor2/src/editor.rs b/crates/editor2/src/editor.rs index 05b459803c..46d64fcf9d 100644 --- a/crates/editor2/src/editor.rs +++ b/crates/editor2/src/editor.rs @@ -1814,34 +1814,34 @@ impl Editor { this } - fn dispatch_context(&self, cx: &AppContext) -> KeyContext { - let mut dispatch_context = KeyContext::default(); - dispatch_context.add("Editor"); + fn key_context(&self, cx: &AppContext) -> KeyContext { + let mut key_context = KeyContext::default(); + key_context.add("Editor"); let mode = match self.mode { EditorMode::SingleLine => "single_line", EditorMode::AutoHeight { .. } => "auto_height", EditorMode::Full => "full", }; - dispatch_context.set("mode", mode); + key_context.set("mode", mode); if self.pending_rename.is_some() { - dispatch_context.add("renaming"); + key_context.add("renaming"); } if self.context_menu_visible() { match self.context_menu.read().as_ref() { Some(ContextMenu::Completions(_)) => { - dispatch_context.add("menu"); - dispatch_context.add("showing_completions") + key_context.add("menu"); + key_context.add("showing_completions") } Some(ContextMenu::CodeActions(_)) => { - dispatch_context.add("menu"); - dispatch_context.add("showing_code_actions") + key_context.add("menu"); + key_context.add("showing_code_actions") } None => {} } } for layer in self.keymap_context_layers.values() { - dispatch_context.extend(layer); + key_context.extend(layer); } if let Some(extension) = self @@ -1850,10 +1850,10 @@ impl Editor { .as_singleton() .and_then(|buffer| buffer.read(cx).file()?.path().extension()?.to_str()) { - dispatch_context.set("extension", extension.to_string()); + key_context.set("extension", extension.to_string()); } - dispatch_context + key_context } pub fn new_file( diff --git a/crates/editor2/src/element.rs b/crates/editor2/src/element.rs index 9447c3370b..ad66ed8090 100644 --- a/crates/editor2/src/element.rs +++ b/crates/editor2/src/element.rs @@ -275,36 +275,48 @@ impl EditorElement { register_action(view, cx, Editor::copy_relative_path); register_action(view, cx, Editor::copy_highlight_json); register_action(view, cx, |editor, action, cx| { - editor - .format(action, cx) - .map(|task| task.detach_and_log_err(cx)); + if let Some(task) = editor.format(action, cx) { + task.detach_and_log_err(cx); + } else { + cx.propagate(); + } }); register_action(view, cx, Editor::restart_language_server); register_action(view, cx, Editor::show_character_palette); register_action(view, cx, |editor, action, cx| { - editor - .confirm_completion(action, cx) - .map(|task| task.detach_and_log_err(cx)); + if let Some(task) = editor.confirm_completion(action, cx) { + task.detach_and_log_err(cx); + } else { + cx.propagate(); + } }); register_action(view, cx, |editor, action, cx| { - editor - .confirm_code_action(action, cx) - .map(|task| task.detach_and_log_err(cx)); + if let Some(task) = editor.confirm_code_action(action, cx) { + task.detach_and_log_err(cx); + } else { + cx.propagate(); + } }); register_action(view, cx, |editor, action, cx| { - editor - .rename(action, cx) - .map(|task| task.detach_and_log_err(cx)); + if let Some(task) = editor.rename(action, cx) { + task.detach_and_log_err(cx); + } else { + cx.propagate(); + } }); register_action(view, cx, |editor, action, cx| { - editor - .confirm_rename(action, cx) - .map(|task| task.detach_and_log_err(cx)); + if let Some(task) = editor.confirm_rename(action, cx) { + task.detach_and_log_err(cx); + } else { + cx.propagate(); + } }); register_action(view, cx, |editor, action, cx| { - editor - .find_all_references(action, cx) - .map(|task| task.detach_and_log_err(cx)); + if let Some(task) = editor.find_all_references(action, cx) { + task.detach_and_log_err(cx); + } else { + cx.propagate(); + } }); register_action(view, cx, Editor::next_copilot_suggestion); register_action(view, cx, Editor::previous_copilot_suggestion); @@ -2802,49 +2814,38 @@ impl Element for EditorElement { }; let focus_handle = editor.focus_handle(cx); - let dispatch_context = self.editor.read(cx).dispatch_context(cx); - cx.with_key_dispatch( - Some(dispatch_context), - Some(focus_handle.clone()), - |_, cx| { - self.register_actions(cx); - self.register_key_listeners(cx); + let key_context = self.editor.read(cx).key_context(cx); + cx.with_key_dispatch(Some(key_context), Some(focus_handle.clone()), |_, cx| { + self.register_actions(cx); + self.register_key_listeners(cx); - // We call with_z_index to establish a new stacking context. - cx.with_z_index(0, |cx| { - cx.with_content_mask(Some(ContentMask { bounds }), |cx| { - // Paint mouse listeners at z-index 0 so any elements we paint on top of the editor - // take precedence. - cx.with_z_index(0, |cx| { - self.paint_mouse_listeners( - bounds, - gutter_bounds, - text_bounds, - &layout, - cx, - ); - }); - let input_handler = - ElementInputHandler::new(bounds, self.editor.clone(), cx); - cx.handle_input(&focus_handle, input_handler); - - self.paint_background(gutter_bounds, text_bounds, &layout, cx); - if layout.gutter_size.width > Pixels::ZERO { - self.paint_gutter(gutter_bounds, &mut layout, cx); - } - self.paint_text(text_bounds, &mut layout, cx); - - if !layout.blocks.is_empty() { - cx.with_z_index(1, |cx| { - cx.with_element_id(Some("editor_blocks"), |cx| { - self.paint_blocks(bounds, &mut layout, cx); - }) - }) - } + // We call with_z_index to establish a new stacking context. + cx.with_z_index(0, |cx| { + cx.with_content_mask(Some(ContentMask { bounds }), |cx| { + // Paint mouse listeners at z-index 0 so any elements we paint on top of the editor + // take precedence. + cx.with_z_index(0, |cx| { + self.paint_mouse_listeners(bounds, gutter_bounds, text_bounds, &layout, cx); }); + let input_handler = ElementInputHandler::new(bounds, self.editor.clone(), cx); + cx.handle_input(&focus_handle, input_handler); + + self.paint_background(gutter_bounds, text_bounds, &layout, cx); + if layout.gutter_size.width > Pixels::ZERO { + self.paint_gutter(gutter_bounds, &mut layout, cx); + } + self.paint_text(text_bounds, &mut layout, cx); + + if !layout.blocks.is_empty() { + cx.with_z_index(1, |cx| { + cx.with_element_id(Some("editor_blocks"), |cx| { + self.paint_blocks(bounds, &mut layout, cx); + }) + }) + } }); - }, - ) + }); + }) } }