JRE-365 [Windows] When I enter Chinese character, the candidate box appears in the lower right corner
backport JDK-8147842 fix from JDK9
diff --git a/src/windows/native/sun/windows/awt_Component.cpp b/src/windows/native/sun/windows/awt_Component.cpp
index 71c0a3f..6faa8f3 100644
--- a/src/windows/native/sun/windows/awt_Component.cpp
+++ b/src/windows/native/sun/windows/awt_Component.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -3846,7 +3846,10 @@
HWND hWnd = GetHWnd();
HWND hTop = GetTopLevelParentForWindow(hWnd);
::ClientToScreen(hTop, &p);
-
+ if (!m_bitsCandType) {
+ SetCandidateWindow(m_bitsCandType, x - p.x, y - p.y);
+ return;
+ }
for (int iCandType=0; iCandType<32; iCandType++, bits<<=1) {
if ( m_bitsCandType & bits )
SetCandidateWindow(iCandType, x - p.x, y - p.y);
@@ -3864,7 +3867,7 @@
HIMC hIMC = ImmGetContext(hwnd);
CANDIDATEFORM cf;
cf.dwIndex = iCandType;
- cf.dwStyle = CFS_CANDIDATEPOS;
+ cf.dwStyle = CFS_POINT;
cf.ptCurrentPos.x = x;
cf.ptCurrentPos.y = y;
@@ -3896,8 +3899,12 @@
MsgRouting AwtComponent::WmImeNotify(WPARAM subMsg, LPARAM bitsCandType)
{
- if (!m_useNativeCompWindow && subMsg == IMN_OPENCANDIDATE) {
- m_bitsCandType = bitsCandType;
+ if (!m_useNativeCompWindow) {
+ if (subMsg == IMN_OPENCANDIDATE) {
+ m_bitsCandType = subMsg;
+ } else if (subMsg != IMN_SETCANDIDATEPOS) {
+ m_bitsCandType = 0;
+ }
InquireCandidatePosition();
return mrConsume;
}
@@ -4165,7 +4172,7 @@
if (mr != mrConsume) {
HWND proxy = GetProxyFocusOwner();
if (proxy != NULL && ::IsWindowEnabled(proxy)) {
- retVal = ComCtl32Util::GetInstance().DefWindowProc(NULL, proxy, message, wParam, lParam);
+ retVal = ::DefWindowProc(proxy, message, wParam, lParam);
mr = mrConsume;
}
}