Remove the set_selected_text_range method from the InputHandler trait

Max Brunsfeld created

Change summary

crates/editor/src/editor.rs  | 41 +++++++++++++++++++++----------------
crates/editor/src/element.rs |  2 
crates/gpui/src/app.rs       | 27 -------------------------
crates/gpui/src/platform.rs  |  3 -
4 files changed, 25 insertions(+), 48 deletions(-)

Detailed changes

crates/editor/src/editor.rs 🔗

@@ -5892,12 +5892,6 @@ impl View for Editor {
         Some(range.start.0..range.end.0)
     }
 
-    fn set_selected_text_range(&mut self, range_utf16: Range<usize>, cx: &mut ViewContext<Self>) {
-        self.change_selections(None, cx, |selections| {
-            selections.select_ranges([OffsetUtf16(range_utf16.start)..OffsetUtf16(range_utf16.end)])
-        });
-    }
-
     fn marked_text_range(&self, cx: &AppContext) -> Option<Range<usize>> {
         let range = self.text_highlights::<InputComposition>(cx)?.1.get(0)?;
         let snapshot = self.buffer.read(cx).read(cx);
@@ -5917,8 +5911,10 @@ impl View for Editor {
         cx: &mut ViewContext<Self>,
     ) {
         self.transact(cx, |this, cx| {
-            if let Some(range_utf16) = range_utf16.or_else(|| this.marked_text_range(cx)) {
-                this.set_selected_text_range(range_utf16, cx);
+            if let Some(range) = range_utf16.or_else(|| this.marked_text_range(cx)) {
+                this.change_selections(None, cx, |selections| {
+                    selections.select_ranges([OffsetUtf16(range.start)..OffsetUtf16(range.end)])
+                });
             }
             this.handle_input(text, cx);
             this.unmark_text(cx);
@@ -5933,15 +5929,22 @@ impl View for Editor {
         cx: &mut ViewContext<Self>,
     ) {
         self.transact(cx, |this, cx| {
-            if let Some(mut marked_range) = this.marked_text_range(cx) {
+            let range_to_replace = if let Some(mut marked_range) = this.marked_text_range(cx) {
                 if let Some(relative_range_utf16) = range_utf16.as_ref() {
                     marked_range.end = marked_range.start + relative_range_utf16.end;
                     marked_range.start += relative_range_utf16.start;
                 }
-
-                this.set_selected_text_range(marked_range, cx);
+                Some(marked_range)
             } else if let Some(range_utf16) = range_utf16 {
-                this.set_selected_text_range(range_utf16, cx);
+                Some(range_utf16)
+            } else {
+                None
+            };
+
+            if let Some(range) = range_to_replace {
+                this.change_selections(None, cx, |s| {
+                    s.select_ranges([OffsetUtf16(range.start)..OffsetUtf16(range.end)])
+                });
             }
 
             let selection = this.selections.newest_anchor();
@@ -5962,15 +5965,17 @@ impl View for Editor {
 
             this.handle_input(text, cx);
 
-            if let Some(new_selected_range) = new_selected_range_utf16 {
+            if let Some(mut new_selected_range) = new_selected_range_utf16 {
                 let snapshot = this.buffer.read(cx).read(cx);
                 let insertion_start = marked_range.start.to_offset_utf16(&snapshot).0;
+                new_selected_range.start += insertion_start;
+                new_selected_range.end += insertion_start;
                 drop(snapshot);
-                this.set_selected_text_range(
-                    insertion_start + new_selected_range.start
-                        ..insertion_start + new_selected_range.end,
-                    cx,
-                );
+                this.change_selections(None, cx, |selections| {
+                    selections
+                        .select_ranges([OffsetUtf16(new_selected_range.start)
+                            ..OffsetUtf16(new_selected_range.end)])
+                });
             }
         });
     }

crates/editor/src/element.rs 🔗

@@ -1,6 +1,6 @@
 use super::{
     display_map::{BlockContext, ToDisplayPoint},
-    Anchor, DisplayPoint, Editor, EditorMode, EditorSnapshot, Input, Scroll, Select, SelectPhase,
+    Anchor, DisplayPoint, Editor, EditorMode, EditorSnapshot, Scroll, Select, SelectPhase,
     SoftWrap, ToPoint, MAX_LINE_LEN,
 };
 use crate::{

crates/gpui/src/app.rs 🔗

@@ -72,7 +72,6 @@ pub trait View: Entity + Sized {
     fn selected_text_range(&self, _: &AppContext) -> Option<Range<usize>> {
         None
     }
-    fn set_selected_text_range(&mut self, _: Range<usize>, _: &mut ViewContext<Self>) {}
     fn marked_text_range(&self, _: &AppContext) -> Option<Range<usize>> {
         None
     }
@@ -391,14 +390,6 @@ impl InputHandler for WindowInputHandler {
         result
     }
 
-    fn set_selected_text_range(&mut self, range: Range<usize>) {
-        eprintln!("set_selected_text_range({range:?})");
-
-        self.update_focused_view(|window_id, view_id, view, cx| {
-            view.set_selected_text_range(range, cx, window_id, view_id);
-        });
-    }
-
     fn replace_text_in_range(&mut self, range: Option<Range<usize>>, text: &str) {
         eprintln!("replace_text_in_range({range:?}, {text:?})");
 
@@ -3321,13 +3312,6 @@ pub trait AnyView {
 
     fn text_for_range(&self, range: Range<usize>, cx: &AppContext) -> Option<String>;
     fn selected_text_range(&self, cx: &AppContext) -> Option<Range<usize>>;
-    fn set_selected_text_range(
-        &mut self,
-        range: Range<usize>,
-        cx: &mut MutableAppContext,
-        window_id: usize,
-        view_id: usize,
-    );
     fn marked_text_range(&self, cx: &AppContext) -> Option<Range<usize>>;
     fn unmark_text(&mut self, cx: &mut MutableAppContext, window_id: usize, view_id: usize);
     fn replace_text_in_range(
@@ -3406,17 +3390,6 @@ where
         View::selected_text_range(self, cx)
     }
 
-    fn set_selected_text_range(
-        &mut self,
-        range: Range<usize>,
-        cx: &mut MutableAppContext,
-        window_id: usize,
-        view_id: usize,
-    ) {
-        let mut cx = ViewContext::new(cx, window_id, view_id);
-        View::set_selected_text_range(self, range, &mut cx)
-    }
-
     fn marked_text_range(&self, cx: &AppContext) -> Option<Range<usize>> {
         View::marked_text_range(self, cx)
     }

crates/gpui/src/platform.rs 🔗

@@ -91,7 +91,7 @@ pub trait Dispatcher: Send + Sync {
 
 pub trait InputHandler {
     fn selected_text_range(&self) -> Option<Range<usize>>;
-    fn set_selected_text_range(&mut self, range_utf16: Range<usize>);
+    fn marked_text_range(&self) -> Option<Range<usize>>;
     fn text_for_range(&self, range_utf16: Range<usize>) -> Option<String>;
     fn replace_text_in_range(&mut self, replacement_range: Option<Range<usize>>, text: &str);
     fn replace_and_mark_text_in_range(
@@ -100,7 +100,6 @@ pub trait InputHandler {
         new_text: &str,
         new_selected_range: Option<Range<usize>>,
     );
-    fn marked_text_range(&self) -> Option<Range<usize>>;
     fn unmark_text(&mut self);
     fn rect_for_range(&self, range_utf16: Range<usize>) -> Option<RectF>;
 }