# HG changeset patch # User ssadetsky # Date 1464594632 -10800 # Node ID 5ca8adb8492cd19f88a59ba4140b3d2c6d9ccb55 # Parent 8992e2fc49aa951b1b8221218e43bf0aff97fd76 8147842: IME Composition Window is displayed at incorrect location Reviewed-by: alexsch diff -r 8992e2fc49aa -r 5ca8adb8492c jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp --- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp Sun May 29 02:34:28 2016 +0300 +++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp Mon May 30 10:50:32 2016 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2015, 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 @@ -3781,7 +3781,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); @@ -3799,7 +3802,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; @@ -3831,8 +3834,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; } @@ -4100,12 +4107,7 @@ if (mr != mrConsume) { HWND proxy = GetProxyFocusOwner(); if (proxy != NULL && ::IsWindowEnabled(proxy)) { - if (proxy != GetHWnd()) { - retVal = ::SendMessage(proxy, message, wParam, lParam); - } else { - retVal = ComCtl32Util::GetInstance().DefWindowProc(NULL, - proxy, message, wParam, lParam); - } + retVal = ::DefWindowProc(proxy, message, wParam, lParam); mr = mrConsume; } }