Skip to content

Commit

Permalink
x11: don't forward key events to IME when it's disabled
Browse files Browse the repository at this point in the history
Fixes #3815.
  • Loading branch information
kchibisov committed Oct 8, 2024
1 parent da2268a commit 553596f
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
1 change: 1 addition & 0 deletions src/changelog/unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,3 +187,4 @@ changelog entry.
- On macOS, fix `WindowEvent::Moved` sometimes being triggered unnecessarily on resize.
- On MacOS, package manifest definitions of `LSUIElement` will no longer be overridden with the
default activation policy, unless explicitly provided during initialization.
- On X11, key events forward to IME anyway, even when it's disabled.
12 changes: 9 additions & 3 deletions src/platform_impl/linux/x11/event_processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,15 @@ impl EventProcessor {
F: FnMut(&ActiveEventLoop, Event),
{
let event_type = xev.get_type();

if self.filter_event(xev) {
if event_type == xlib::KeyPress || event_type == xlib::KeyRelease {
let key_event = event_type == xlib::KeyPress || event_type == xlib::KeyRelease;
let has_ime = self.target.ime.is_some();

// If we have IME disabled, don't try to `filter_event`, since only IME can consume them
// and forward back. This is not desired for e.g. games since some IMEs may delay the input
// and game can toggle IME back when e.g. typing into some text-box where latency won't
// really matter.
if (key_event && has_ime || !key_event) && self.filter_event(xev) {
if key_event {
let xev: &XKeyEvent = xev.as_ref();
if self.xmodmap.is_modifier(xev.keycode as u8) {
// Don't grow the buffer past the `MAX_MOD_REPLAY_LEN`. This could happen
Expand Down

0 comments on commit 553596f

Please sign in to comment.