diff --git a/src/lib.rs b/src/lib.rs index 2df1bc8c3498a3d96f506ab77a9bd9df5b923311..9cc36b28c82d0c74dced55f7b4007d81219425d7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -411,12 +411,17 @@ fn cosmic_editor_builder( mut commands: Commands, ) { for (entity, metrics) in added_editors.iter_mut() { - let buffer = Buffer::new( + let mut buffer = Buffer::new( &mut font_system.0, Metrics::new(metrics.font_size, metrics.line_height).scale(metrics.scale_factor), ); // buffer.set_wrap(&mut font_system.0, cosmic_text::Wrap::None); - let editor = Editor::new(buffer); + buffer.set_redraw(true); + let mut editor = Editor::new(buffer); + + let mut cursor = editor.cursor(); + cursor.color = Some(cosmic_text::Color::rgba(0, 0, 0, 0)); + editor.set_cursor(cursor); commands.entity(entity).insert(CosmicEditor(editor)); commands.entity(entity).insert(CosmicEditHistory::default()); diff --git a/src/render.rs b/src/render.rs index ee848914a285e5dc1b3683926cd62d6fd3b61864..cb585f6028b8818963b41d77aca7c4469d8f6b6b 100644 --- a/src/render.rs +++ b/src/render.rs @@ -403,14 +403,14 @@ pub(crate) fn hide_inactive_or_readonly_cursor( editor.0.buffer_mut().set_redraw(true); } - if active_editor.is_changed() || active_editor.0.is_none() { - return; - } - for (e, mut editor, readonly_opt) in &mut cosmic_editor_q_placeholder.iter_mut() { - if e != active_editor.0.unwrap() || readonly_opt.is_some() { + // filthy short circuiting instead of correct unwrapping + if active_editor.is_none() || e != active_editor.0.unwrap() || readonly_opt.is_some() { let editor = &mut editor.0; let mut cursor = editor.0.cursor(); + if cursor.color == Some(cosmic_text::Color::rgba(0, 0, 0, 0)) { + return; + } cursor.color = Some(cosmic_text::Color::rgba(0, 0, 0, 0)); editor.0.set_cursor(cursor); editor.0.buffer_mut().set_redraw(true); @@ -418,8 +418,11 @@ pub(crate) fn hide_inactive_or_readonly_cursor( } for (e, mut editor) in &mut cosmic_editor_q_editable.iter_mut() { - if e != active_editor.0.unwrap() { + if active_editor.is_none() || e != active_editor.0.unwrap() { let mut cursor = editor.0.cursor(); + if cursor.color == Some(cosmic_text::Color::rgba(0, 0, 0, 0)) { + return; + } cursor.color = Some(cosmic_text::Color::rgba(0, 0, 0, 0)); editor.0.set_cursor(cursor); editor.0.buffer_mut().set_redraw(true);