From 4a8050289d1288b3115c5b076ee2a2937eb14bc7 Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Tue, 5 Mar 2024 18:19:39 +0400 Subject: [PATCH] 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 --- CHANGELOG.md | 1 + src/platform_impl/linux/common/xkb/mod.rs | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 774c632b5..7c428da5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ Unreleased` header. # 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. - Deprecate `EventLoop::run` in favor of `EventLoop::run_app`. - Deprecate `EventLoopExtRunOnDemand::run_on_demand` in favor of `EventLoop::run_app_on_demand`. diff --git a/src/platform_impl/linux/common/xkb/mod.rs b/src/platform_impl/linux/common/xkb/mod.rs index 734e344ca..572f7c829 100644 --- a/src/platform_impl/linux/common/xkb/mod.rs +++ b/src/platform_impl/linux/common/xkb/mod.rs @@ -373,10 +373,15 @@ impl<'a, 'b> KeyEventResults<'a, 'b> { fn composed_text(&mut self) -> Result, ()> { match self.compose { - ComposeStatus::Accepted(xkb_compose_status::XKB_COMPOSE_COMPOSED) => { - let state = self.context.compose_state1.as_mut().unwrap(); - Ok(state.get_string(self.context.scratch_buffer)) - } + ComposeStatus::Accepted(status) => match status { + xkb_compose_status::XKB_COMPOSE_COMPOSED => { + let state = self.context.compose_state1.as_mut().unwrap(); + 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(()), } }