fix(xkb): text not being None when composing

When composing the text was not reset to `None` leading to input in
some applications e.g. alacritty.

Links: https://github.com/alacritty/alacritty/issues/7806
This commit is contained in:
Kirill Chibisov 2024-03-05 18:19:39 +04:00
parent 99e238065e
commit 4a8050289d
2 changed files with 10 additions and 4 deletions

View File

@ -11,6 +11,7 @@ Unreleased` header.
# Unreleased # Unreleased
- On X11/Wayland, fix `text` and `text_with_all_modifiers` not being `None` during compose.
- On Wayland, don't reapply cursor grab when unchanged. - On Wayland, don't reapply cursor grab when unchanged.
- Deprecate `EventLoop::run` in favor of `EventLoop::run_app`. - Deprecate `EventLoop::run` in favor of `EventLoop::run_app`.
- Deprecate `EventLoopExtRunOnDemand::run_on_demand` in favor of `EventLoop::run_app_on_demand`. - Deprecate `EventLoopExtRunOnDemand::run_on_demand` in favor of `EventLoop::run_app_on_demand`.

View File

@ -373,10 +373,15 @@ impl<'a, 'b> KeyEventResults<'a, 'b> {
fn composed_text(&mut self) -> Result<Option<SmolStr>, ()> { fn composed_text(&mut self) -> Result<Option<SmolStr>, ()> {
match self.compose { match self.compose {
ComposeStatus::Accepted(xkb_compose_status::XKB_COMPOSE_COMPOSED) => { ComposeStatus::Accepted(status) => match status {
xkb_compose_status::XKB_COMPOSE_COMPOSED => {
let state = self.context.compose_state1.as_mut().unwrap(); let state = self.context.compose_state1.as_mut().unwrap();
Ok(state.get_string(self.context.scratch_buffer)) Ok(state.get_string(self.context.scratch_buffer))
} }
xkb_compose_status::XKB_COMPOSE_COMPOSING
| xkb_compose_status::XKB_COMPOSE_CANCELLED => Ok(None),
xkb_compose_status::XKB_COMPOSE_NOTHING => Err(()),
},
_ => Err(()), _ => Err(()),
} }
} }