From efb233c201fe37a1f30e196c661182c3cbfaf32f Mon Sep 17 00:00:00 2001
From: StaffEngineer <111751109+StaffEngineer@users.noreply.github.com>
Date: Sun, 1 Oct 2023 08:44:52 +0100
Subject: [PATCH] move cursor on set_text (#60)

---
 src/lib.rs | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/src/lib.rs b/src/lib.rs
index 44eb743..747dcb8 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -104,6 +104,7 @@ impl CosmicEditor {
                     attrs.as_attrs(),
                     Shaping::Advanced,
                 );
+                editor.action(font_system, Action::BufferEnd);
             }
             CosmicText::MultiStyle(lines) => {
                 for line in lines {
@@ -192,15 +193,6 @@ fn update_buffer_text(
     }
 }
 
-fn update_cursor_position(
-    mut editor_q: Query<&mut CosmicEditor, Added<CosmicText>>,
-    mut font_system: ResMut<CosmicFontSystem>,
-) {
-    for mut editor in editor_q.iter_mut() {
-        editor.0.action(&mut font_system.0, Action::BufferEnd);
-    }
-}
-
 #[derive(Component)]
 pub struct CosmicAttrs(pub AttrsOwned);
 
@@ -382,7 +374,7 @@ impl Plugin for CosmicEditPlugin {
             .add_systems(
                 PreUpdate,
                 (
-                    (update_buffer_text, update_cursor_position).chain(),
+                    update_buffer_text,
                     cosmic_edit_bevy_events,
                     blink_cursor,
                     freeze_cursor_blink,
@@ -1443,16 +1435,23 @@ fn freeze_cursor_blink(
 }
 
 fn hide_inactive_or_readonly_cursor(
-    mut cosmic_editor_q: Query<(Entity, &mut CosmicEditor, Option<&ReadOnly>)>,
+    mut cosmic_editor_q_readonly: Query<&mut CosmicEditor, With<ReadOnly>>,
+    mut cosmic_editor_q_editable: Query<(Entity, &mut CosmicEditor), Without<ReadOnly>>,
     active_editor: Res<Focus>,
 ) {
-    if !active_editor.is_changed() || active_editor.0.is_none() {
+    for mut editor in &mut cosmic_editor_q_readonly.iter_mut() {
+        let mut cursor = editor.0.cursor();
+        cursor.color = Some(cosmic_text::Color::rgba(0, 0, 0, 0));
+        editor.0.set_cursor(cursor);
+        editor.0.buffer_mut().set_redraw(true);
+    }
+
+    if active_editor.is_changed() || active_editor.0.is_none() {
         return;
     }
 
-    for (e, mut editor, readonly_maybe) in &mut cosmic_editor_q.iter_mut() {
-        let readonly = readonly_maybe.is_some();
-        if e != active_editor.0.unwrap() || readonly {
+    for (e, mut editor) in &mut cosmic_editor_q_editable.iter_mut() {
+        if e != active_editor.0.unwrap() {
             let mut cursor = editor.0.cursor();
             cursor.color = Some(cosmic_text::Color::rgba(0, 0, 0, 0));
             editor.0.set_cursor(cursor);
-- 
GitLab