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