Skip to content

Commit

Permalink
Fix non-standard textbox behavior in Windows (#489)
Browse files Browse the repository at this point in the history
  • Loading branch information
RagibHasin authored Aug 6, 2024
1 parent 10387e9 commit 43ffdbf
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 18 deletions.
39 changes: 23 additions & 16 deletions masonry/src/text/edit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -200,23 +200,12 @@ impl<T: EditableText> TextEditor<T> {
}
Key::Named(_) => Handled::No,
Key::Character(c) => {
let selection = self.inner.selection.unwrap_or(Selection {
anchor: 0,
active: 0,
active_affinity: Affinity::Downstream,
h_pos: None,
});
self.text_mut().edit(selection.range(), &**c);
self.inner.selection = Some(Selection::caret(
selection.min() + c.len(),
// We have just added this character, so we are "affined" with it
Affinity::Downstream,
));
let contents = self.text().as_str().to_string();
ctx.submit_action(Action::TextChanged(contents));
Handled::Yes
self.insert_text(event.text.as_ref().unwrap_or(c), ctx)
}
Key::Unidentified(_) => Handled::No,
Key::Unidentified(_) => match event.text.as_ref() {
Some(text) => self.insert_text(text, ctx),
None => Handled::No,
},
Key::Dead(d) => {
eprintln!("Got dead key {d:?}. Will handle");
Handled::No
Expand Down Expand Up @@ -366,6 +355,24 @@ impl<T: EditableText> TextEditor<T> {
TextEvent::FocusChange(_) => Handled::No,
}
}

fn insert_text(&mut self, c: &winit::keyboard::SmolStr, ctx: &mut EventCtx) -> Handled {
let selection = self.inner.selection.unwrap_or(Selection {
anchor: 0,
active: 0,
active_affinity: Affinity::Downstream,
h_pos: None,
});
self.text_mut().edit(selection.range(), &**c);
self.inner.selection = Some(Selection::caret(
selection.min() + c.len(),
// We have just added this character, so we are "affined" with it
Affinity::Downstream,
));
let contents = self.text().as_str().to_string();
ctx.submit_action(Action::TextChanged(contents));
Handled::Yes
}
}

impl<T: EditableText> Deref for TextEditor<T> {
Expand Down
4 changes: 2 additions & 2 deletions masonry/src/text/selection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,8 @@ impl<T: Selectable> TextWithSelection<T> {
}
_ => Handled::No,
},
winit::keyboard::Key::Unidentified(_) => todo!(),
winit::keyboard::Key::Dead(_) => todo!(),
winit::keyboard::Key::Unidentified(_) => Handled::No,
winit::keyboard::Key::Dead(_) => Handled::No,
}
}
TextEvent::KeyboardKey(_, _) => Handled::No,
Expand Down

0 comments on commit 43ffdbf

Please sign in to comment.