From 17a73f4dd4fa2d9fcc16ecb5dbbba5f26646d7d1 Mon Sep 17 00:00:00 2001 From: Kotomine Shiki <126475460+Touma-Kazusa2@users.noreply.github.com> Date: Sun, 1 Mar 2026 21:08:45 +0800 Subject: [PATCH] win32: fix ime setcontext lparam Fixes #3893. --- src/changelog/unreleased.md | 1 + src/platform_impl/windows/event_loop.rs | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/changelog/unreleased.md b/src/changelog/unreleased.md index 6dc9fe489..5ed7d6bb5 100644 --- a/src/changelog/unreleased.md +++ b/src/changelog/unreleased.md @@ -46,3 +46,4 @@ changelog entry. - On X11, fix `set_hittest` not working on some window managers. - On X11, fix debug mode overflow panic in `set_timestamp`. - On macOS, fix crash in `set_marked_text` when native Pinyin IME sends out-of-bounds `selected_range`. +- On Windows, fix `WM_IME_SETCONTEXT` IME UI flag masking on `lParam`. diff --git a/src/platform_impl/windows/event_loop.rs b/src/platform_impl/windows/event_loop.rs index 3771cb6c3..58b00ded9 100644 --- a/src/platform_impl/windows/event_loop.rs +++ b/src/platform_impl/windows/event_loop.rs @@ -1612,9 +1612,9 @@ unsafe fn public_window_callback_inner( }, WM_IME_SETCONTEXT => { - // Hide composing text drawn by IME. - let wparam = wparam & (!ISC_SHOWUICOMPOSITIONWINDOW as usize); - result = ProcResult::DefWindowProc(wparam); + // IME UI visibility flags are in lparam. + let lparam = lparam & !(ISC_SHOWUICOMPOSITIONWINDOW as isize); + result = ProcResult::Value(unsafe { DefWindowProcW(window, msg, wparam, lparam) }); }, // this is necessary for us to maintain minimize/restore state