in native/desktop-linux-sample/src/sample_linux.rs [492:519]
fn on_text_input(event: &TextInputEvent, app_ptr: AppPtr<'_>, window_id: WindowId, window_state: &mut WindowState) {
window_state.composed_text.clear();
if event.has_delete_surrounding_text {
let cursor_pos = window_state.text.len();
let range = (cursor_pos - event.delete_surrounding_text.before_length_in_bytes as usize)
..(cursor_pos + event.delete_surrounding_text.after_length_in_bytes as usize);
window_state.text.drain(range);
}
if event.has_commit_string
&& let Some(commit_string) = event.commit_string.as_optional_str().unwrap()
{
debug!("{window_id:?} commit_string: {commit_string}");
window_state.text += commit_string;
}
if event.has_delete_surrounding_text || event.has_commit_string {
update_text_input_context(app_ptr, &window_state.text, true);
}
if event.has_preedit_string {
if event.preedit_string.cursor_begin_byte_pos == -1 && event.preedit_string.cursor_end_byte_pos == -1 {
// TODO: hide cursor
} else if let Some(preedit_string) = event.preedit_string.text.as_optional_str().unwrap() {
window_state.composed_text.push_str(preedit_string);
}
}
debug!("{window_id:?} : {} : {:?}", window_state.text.len(), window_state);
}