Clear preedit if there is no pending preedit on Wayland

Fixes #2478.
This commit is contained in:
Weng Xuetian 2022-09-09 00:53:58 -07:00 committed by GitHub
parent fec52b028e
commit 92ddb3483e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 8 deletions

View file

@ -23,6 +23,7 @@ And please only add new entries to the top of this list, right below the `# Unre
- On Wayland, a new `wayland-csd-adwaita-crossfont` feature was added to use `crossfont` instead of `ab_glyph` for decorations. - On Wayland, a new `wayland-csd-adwaita-crossfont` feature was added to use `crossfont` instead of `ab_glyph` for decorations.
- On Wayland, if not otherwise specified use upstream automatic CSD theme selection. - On Wayland, if not otherwise specified use upstream automatic CSD theme selection.
- On Windows, fixed ALT+Space shortcut to open window menu. - On Windows, fixed ALT+Space shortcut to open window menu.
- On Wayland, fixed `Ime::Preedit` not being sent on IME reset.
# 0.27.2 (2022-8-12) # 0.27.2 (2022-8-12)

View file

@ -92,16 +92,22 @@ pub(super) fn handle_text_input(
event_sink.push_window_event(WindowEvent::Ime(Ime::Commit(text)), window_id); event_sink.push_window_event(WindowEvent::Ime(Ime::Commit(text)), window_id);
} }
// Push preedit string we've got after latest commit. // Always send preedit on `Done` events.
if let Some(preedit) = inner.pending_preedit.take() { let (text, range) = inner
.pending_preedit
.take()
.map(|preedit| {
let cursor_range = preedit let cursor_range = preedit
.cursor_begin .cursor_begin
.map(|b| (b, preedit.cursor_end.unwrap_or(b))); .map(|b| (b, preedit.cursor_end.unwrap_or(b)));
let event = Ime::Preedit(preedit.text, cursor_range); (preedit.text, cursor_range)
})
.unwrap_or_default();
let event = Ime::Preedit(text, range);
event_sink.push_window_event(WindowEvent::Ime(event), window_id); event_sink.push_window_event(WindowEvent::Ime(event), window_id);
} }
}
_ => (), _ => (),
} }
} }