We do move the windows using ImmSetCandidateWindow
and ImmSetCompositionWindow
. We also tell the IME not to show its own composition window by clearing ISC_SHOWUICOMPOSITIONWINDOW
in WM_IME_SETCONTEXT
before calling DefWindowProc
, however the Google IME is still showing its own composition window.
Neither responding to IMR_QUERYCHARPOSITION
nor using SetCaretPos
have helped with any of these weird positioning issues, and I’m currently out of ideas as to why (IMEs on Windows are troublesome things to deal with, as no two behave the same or respond to the API(s) (because there’s two of them, IMM and TSF) in the same way).
Our Windows IME implementation is in WindowsTextInputMethodSystem.cpp (Engine\Source\Runtime\ApplicationCore\Private\Windows) if you want to debug this further.