Browse Source

Platform IME: [windows] call ImmSetCandidateWindow() to position candidate window.

ocornut 3 years ago
parent
commit
1cbfe93520
2 changed files with 11 additions and 5 deletions
  1. 1 0
      docs/CHANGELOG.txt
  2. 10 5
      imgui.cpp

+ 1 - 0
docs/CHANGELOG.txt

@@ -61,6 +61,7 @@ Other Changes:
 - Platform IME: changed io.ImeSetInputScreenPosFn() to io.SetPlatformImeDataFn() API,
   now taking a ImGuiPlatformImeData structure which we can more easily extend in the future.
 - Platform IME: moved io.ImeWindowHandle to GetMainViewport()->PlatformHandleRaw.
+- Platform IME: [windows] call ImmSetCandidateWindow() to position candidate window.
 - Backends: OpenGL3: Fixed a buffer overflow in imgui_impl_opengl3_loader.h init (added in 1.86). (#4468, #4830) [@dymk]
   It would generally not have noticeable side-effect at runtime but would be detected by runtime checkers.
 - Backends: Metal: Added Apple Metal C++ API support. (#4824, #4746) [@luigifcruz]

+ 10 - 5
imgui.cpp

@@ -11512,11 +11512,16 @@ static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport* viewport, ImGuiPlatf
 
     if (HIMC himc = ::ImmGetContext(hwnd))
     {
-        COMPOSITIONFORM cf;
-        cf.ptCurrentPos.x = (LONG)data->InputPos.x;
-        cf.ptCurrentPos.y = (LONG)data->InputPos.y;
-        cf.dwStyle = CFS_FORCE_POSITION;
-        ::ImmSetCompositionWindow(himc, &cf);
+        COMPOSITIONFORM composition_form = {};
+        composition_form.ptCurrentPos.x = (LONG)data->InputPos.x;
+        composition_form.ptCurrentPos.y = (LONG)data->InputPos.y;
+        composition_form.dwStyle = CFS_FORCE_POSITION;
+        ::ImmSetCompositionWindow(himc, &composition_form);
+        CANDIDATEFORM candidate_form = {};
+        candidate_form.dwStyle = CFS_CANDIDATEPOS;
+        candidate_form.ptCurrentPos.x = (LONG)data->InputPos.x;
+        candidate_form.ptCurrentPos.y = (LONG)data->InputPos.y;
+        ::ImmSetCandidateWindow(himc, &candidate_form);
         ::ImmReleaseContext(hwnd, himc);
     }
 }