From b6d22da1be54f3a9ecc4c6885419b8d59a88ebfa Mon Sep 17 00:00:00 2001 From: sam edelsten <samedelsten1@gmail.com> Date: Fri, 27 Oct 2023 12:08:38 +0100 Subject: [PATCH] disable unicode in password inputs --- src/input.rs | 29 +++++++++++++++++++++++++---- src/render.rs | 11 +++++++---- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/input.rs b/src/input.rs index 3e1b84e..77347db 100644 --- a/src/input.rs +++ b/src/input.rs @@ -22,8 +22,8 @@ use wasm_bindgen_futures::JsFuture; use crate::{ get_node_cursor_pos, get_timestamp, get_x_offset_center, get_y_offset_center, save_edit_history, CosmicAttrs, CosmicEditHistory, CosmicEditor, CosmicFontSystem, - CosmicMaxChars, CosmicMaxLines, CosmicTextChanged, CosmicTextPosition, Focus, ReadOnly, - XOffset, + CosmicMaxChars, CosmicMaxLines, CosmicTextChanged, CosmicTextPosition, Focus, PasswordInput, + ReadOnly, XOffset, }; #[derive(Resource)] @@ -227,6 +227,7 @@ pub(crate) fn input_kb( &CosmicMaxChars, Entity, Option<&ReadOnly>, + Option<&PasswordInput>, )>, mut evw_changed: EventWriter<CosmicTextChanged>, mut font_system: ResMut<CosmicFontSystem>, @@ -234,8 +235,16 @@ pub(crate) fn input_kb( mut edits_duration: Local<Option<Duration>>, _channel: Option<Res<WasmPasteAsyncChannel>>, ) { - for (mut editor, mut edit_history, attrs, max_lines, max_chars, entity, readonly_opt) in - &mut cosmic_edit_query.iter_mut() + for ( + mut editor, + mut edit_history, + attrs, + max_lines, + max_chars, + entity, + readonly_opt, + password_opt, + ) in &mut cosmic_edit_query.iter_mut() { if active_editor.0 != Some(entity) { continue; @@ -425,6 +434,10 @@ pub(crate) fn input_kb( editor.0.action(&mut font_system.0, Action::Insert(c)); } } else { + if password_opt.is_some() && c.len_utf8() > 1 { + println!("Cannot input multi-byte char '{}' to password field! See https://github.com/StaffEngineer/bevy_cosmic_edit/pull/99#issuecomment-1782607486",c); + continue; + } editor.0.action(&mut font_system.0, Action::Insert(c)); } } @@ -496,6 +509,10 @@ pub(crate) fn input_kb( } editor.0.action(&mut font_system.0, Action::Backspace); } else if !command && (max_chars.0 == 0 || editor.get_text().len() < max_chars.0) { + if password_opt.is_some() && char_ev.char.len_utf8() > 1 { + println!("Cannot input multi-byte char '{}' to password field! See https://github.com/StaffEngineer/bevy_cosmic_edit/pull/99#issuecomment-1782607486",char_ev.char); + continue; + } editor .0 .action(&mut font_system.0, Action::Insert(char_ev.char)); @@ -695,6 +712,10 @@ pub fn poll_wasm_paste( editor.0.action(&mut font_system.0, Action::Insert(c)); } } else { + if password_opt.is_some() && char_ev.char.len_utf8() > 1 { + println!("Cannot input multi-byte char '{}' to password field! See https://github.com/StaffEngineer/bevy_cosmic_edit/pull/99#issuecomment-1782607486",char_ev.char); + continue; + } editor.0.action(&mut font_system.0, Action::Insert(c)); } } diff --git a/src/render.rs b/src/render.rs index ab125c9..4589d32 100644 --- a/src/render.rs +++ b/src/render.rs @@ -506,6 +506,7 @@ pub(crate) fn hide_password_text( mut editor_q: Query<(Entity, &mut CosmicEditor, &CosmicAttrs, &PasswordInput)>, mut font_system: ResMut<CosmicFontSystem>, mut password_input_states: ResMut<PasswordStates>, + active_editor: Res<Focus>, ) { for (entity, mut cosmic_editor, attrs, password) in editor_q.iter_mut() { let text = cosmic_editor.get_text(); @@ -537,13 +538,15 @@ pub(crate) fn hide_password_text( cursor.index *= char_len; - if cosmic_editor.0.buffer().lines[0].layout_opt().is_some() { - let lc = cosmic_editor.0.buffer().layout_cursor(&cursor); + cosmic_editor.0.set_select_opt(select_opt); - println!("{:?}", lc.glyph); + // Fixes stuck cursor on password inputs + if let Some(active) = active_editor.0 { + if entity != active { + cursor.color = Some(cosmic_text::Color::rgba(0, 0, 0, 0)); + } } - cosmic_editor.0.set_select_opt(select_opt); cosmic_editor.0.set_cursor(cursor); } -- GitLab