< prev index next >

src/java.desktop/windows/native/libawt/windows/awt_Component.cpp

Print this page

        

@@ -3822,29 +3822,30 @@
     }
     for (int iCandType=0; iCandType<32; iCandType++, bits<<=1) {
         if ( m_bitsCandType & bits )
             SetCandidateWindow(iCandType, x - p.x, y - p.y);
     }
-    if (m_bitsCandType != 0) {
-        // REMIND: is there any chance GetProxyFocusOwner() returns NULL here?
-        ::DefWindowProc(ImmGetHWnd(),
-                        WM_IME_NOTIFY, IMN_OPENCANDIDATE, m_bitsCandType);
-    }
 }
 
 void AwtComponent::SetCandidateWindow(int iCandType, int x, int y)
 {
     HWND hwnd = ImmGetHWnd();
     HIMC hIMC = ImmGetContext(hwnd);
+    if (hIMC) {
     CANDIDATEFORM cf;
-    cf.dwIndex = iCandType;
     cf.dwStyle = CFS_POINT;
-    cf.ptCurrentPos.x = x;
-    cf.ptCurrentPos.y = y;
-
+        ImmGetCandidateWindow(hIMC, 0, &cf);
+        POINT curPos = cf.ptCurrentPos;
+        if (x != curPos.x || y != curPos.y) {
+            cf.dwIndex = iCandType;
+            cf.dwStyle = CFS_POINT | CFS_FORCE_POSITION;
+            cf.ptCurrentPos = {x, y};
+            cf.rcArea = {0, 0, 0, 0};
     ImmSetCandidateWindow(hIMC, &cf);
+        }
     ImmReleaseContext(hwnd, hIMC);
+    }
 }
 
 MsgRouting AwtComponent::WmImeSetContext(BOOL fSet, LPARAM *lplParam)
 {
     // If the Windows input context is disabled, do not let Windows

@@ -3868,21 +3869,18 @@
 }
 
 MsgRouting AwtComponent::WmImeNotify(WPARAM subMsg, LPARAM bitsCandType)
 {
     if (!m_useNativeCompWindow) {
-        if (subMsg == IMN_OPENCANDIDATE) {
+        if (subMsg == IMN_OPENCANDIDATE || subMsg == IMN_CHANGECANDIDATE) {
             m_bitsCandType = bitsCandType;
             InquireCandidatePosition();
         } else if (subMsg == IMN_OPENSTATUSWINDOW ||
-                   subMsg == WM_IME_STARTCOMPOSITION) {
-            m_bitsCandType = 0;
-            InquireCandidatePosition();
-        } else if (subMsg == IMN_SETCANDIDATEPOS) {
+                   subMsg == WM_IME_STARTCOMPOSITION ||
+                   subMsg == IMN_SETCANDIDATEPOS) {
             InquireCandidatePosition();
         }
-        return mrConsume;
     }
     return mrDoDefault;
 }
 
 MsgRouting AwtComponent::WmImeStartComposition()

@@ -3890,12 +3888,14 @@
     if (m_useNativeCompWindow) {
         RECT rc;
         ::GetClientRect(GetHWnd(), &rc);
         SetCompositionWindow(rc);
         return mrDoDefault;
-    } else
+    } else {
+        InquireCandidatePosition();
         return mrConsume;
+    }
 }
 
 MsgRouting AwtComponent::WmImeEndComposition()
 {
     if (m_useNativeCompWindow)   return mrDoDefault;
< prev index next >