Exclude selections from editor splits in Editor::active_selection_sets

Antonio Scandurra created

Change summary

zed/src/editor.rs         | 9 ++++++---
zed/src/editor/element.rs | 3 +--
2 files changed, 7 insertions(+), 5 deletions(-)

Detailed changes

zed/src/editor.rs 🔗

@@ -1955,10 +1955,13 @@ impl Editor {
         &'a self,
         cx: &'a AppContext,
     ) -> impl 'a + Iterator<Item = SelectionSetId> {
-        self.buffer
-            .read(cx)
+        let buffer = self.buffer.read(cx);
+        let replica_id = buffer.replica_id();
+        buffer
             .selection_sets()
-            .filter(|(_, set)| set.active)
+            .filter(move |(set_id, set)| {
+                set.active && (set_id.replica_id != replica_id || **set_id == self.selection_set_id)
+            })
             .map(|(set_id, _)| *set_id)
     }
 

zed/src/editor/element.rs 🔗

@@ -450,7 +450,6 @@ impl Element for EditorElement {
         let mut selections = HashMap::new();
         let mut active_rows = BTreeMap::new();
         self.update_view(cx.app, |view, cx| {
-            let replica_id = view.replica_id(cx);
             for selection_set_id in view.active_selection_sets(cx).collect::<Vec<_>>() {
                 let mut set = Vec::new();
                 for selection in view.selections_in_range(
@@ -459,7 +458,7 @@ impl Element for EditorElement {
                     cx,
                 ) {
                     set.push(selection.clone());
-                    if selection_set_id.replica_id == replica_id {
+                    if selection_set_id == view.selection_set_id {
                         let is_empty = selection.start == selection.end;
                         let mut selection_start;
                         let mut selection_end;