--- old/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp 2017-09-18 20:54:10.816343400 +0530 +++ new/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp 2017-09-18 20:54:09.813682100 +0530 @@ -582,6 +582,11 @@ /* Subclass the window now so that we can snoop on its messages */ SubclassHWND(); + AwtToolkit& tk = AwtToolkit::GetInstance(); + if (tk.IsWin8OrLater()) { + tk.TIEnableMouseInPointer(true); + } + /* * Fix for 4046446. */ @@ -1713,6 +1718,76 @@ break; } break; + + /* WM_POINTER is enabled for the TOUCH type 'pointer' input + This touch typed 'pointer' would map to the mouse functionality */ + case WM_POINTERENTER: + { + AwtToolkit& tk = AwtToolkit::GetInstance(); + UINT32 pointerId = GET_POINTERID_WPARAM(wParam); + POINTER_INFO pinfo; + + if(tk.TIGetPointerInfo(pointerId, &pinfo)) { + if (pinfo.pointerType == PT_TOUCH) { + POINT pdDnPoint = pinfo.ptPixelLocation; + if(::ScreenToClient(GetHWnd(), &pdDnPoint)) { + mr = WmMouseEnter(static_cast(wParam), pdDnPoint.x, pdDnPoint.y); + } + } + } + } + break; + case WM_POINTERLEAVE: + { + AwtToolkit& tk = AwtToolkit::GetInstance(); + UINT32 pointerId = GET_POINTERID_WPARAM(wParam); + POINTER_INFO pinfo; + + if(tk.TIGetPointerInfo(pointerId, &pinfo)) { + if (pinfo.pointerType == PT_TOUCH) { + POINT pdDnPoint = pinfo.ptPixelLocation; + if(::ScreenToClient(GetHWnd(), &pdDnPoint)) { + mr = WmMouseExit(static_cast(wParam), pdDnPoint.x, pdDnPoint.y); + } + } + } + } + break; + case WM_POINTERDOWN: + { + AwtToolkit& tk = AwtToolkit::GetInstance(); + UINT32 pointerId = GET_POINTERID_WPARAM(wParam); + POINTER_INFO pinfo; + + if(tk.TIGetPointerInfo(pointerId, &pinfo)) { + if (pinfo.pointerType == PT_TOUCH) { + POINT pdDnPoint = pinfo.ptPixelLocation; + if(::ScreenToClient(GetHWnd(), &pdDnPoint)) { + mr = WmMouseDown(static_cast(wParam), pdDnPoint.x, pdDnPoint.y, + LEFT_BUTTON); + } + } + } + } + break; + case WM_POINTERUP: + { + AwtToolkit& tk = AwtToolkit::GetInstance(); + UINT32 pointerId = GET_POINTERID_WPARAM(wParam); + POINTER_INFO pinfo; + + if(tk.TIGetPointerInfo(pointerId, &pinfo)) { + if (pinfo.pointerType == PT_TOUCH) { + POINT pdUpPoint = pinfo.ptPixelLocation; + if(::ScreenToClient(GetHWnd(), &pdUpPoint)) { + mr = WmMouseUp(static_cast(wParam), pdUpPoint.x, pdUpPoint.y, + LEFT_BUTTON); + } + } + } + } + break; + case WM_SETCURSOR: mr = mrDoDefault; if (LOWORD(lParam) == HTCLIENT) {