<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><title>RE: <AWT Dev> <Swing Dev> [10] Review request for 8166772: Touch keyboard is not shown for text components on a screen touch</title><style><!--
/* Font Definitions */
@font-face
        {font-family:PMingLiU;
        panose-1:2 1 6 1 0 1 1 1 1 1;}
@font-face
        {font-family:Tunga;
        panose-1:0 0 4 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@PMingLiU";}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body bgcolor=white lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Thank you Anton for that information.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Thanks and regards,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Shashi<o:p></o:p></span></p><p class=MsoNormal><a name="_MailEndCompose"><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></a></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>From:</span></b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'> Anton Litvinov <br><b>Sent:</b> Thursday, September 14, 2017 5:51 PM<br><b>To:</b> Shashidhara Veerabhadraiah <shashidhara.veerabhadraiah@oracle.com>; Sergey Bylokhov <sergey.bylokhov@oracle.com>; awt-dev@openjdk.java.net; swing-dev@openjdk.java.net<br><b>Subject:</b> Re: <AWT Dev> <Swing Dev> [10] Review request for 8166772: Touch keyboard is not shown for text components on a screen touch<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'>Hello Shashi,<br><br>Thank you for attention to my review request. Win32 API provides different API sets dedicated to handling various types of user's touch input in different degree of deepness. For example:<br>1.  Windows Touch Input (WM_TOUCH messages)<br>2.  Windows Touch Gestures (WM_GESTURE messages)<br>    Official information about 2 API sets ab: <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/dd562100(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/dd562100(v=vs.85).aspx</a><br>3.  Touch Hit Testing - <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/hh437255(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/hh437255(v=vs.85).aspx</a><br><br>WM_POINTER may be yet another approach.<br><br>I chose to exploit API related to "WM_TOUCH" message, because this API, as I understand, provides more opportunities to control the touch input then other 2 APIs specified above, and it allows to handle multiple touch points, what may become necessary in future.<br><br>RESPONSE TO YOUR REMARK:<br>I cannot agree that "WM_TOUCH" is officially deprecated. In the official Win32 API specification there is no information that functions from this API are deprecated or obsolete. For example:<br>1.  RegisterTouchWindow - <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/dd317326(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/dd317326(v=vs.85).aspx</a><br>2.  GetTouchInputInfo - <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/dd371582(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/dd371582(v=vs.85).aspx</a><br>3.  TOUCHINPUT - <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/dd317334(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/dd317334(v=vs.85).aspx</a><br>4.  WM_TOUCH - <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/dd317341(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/dd317341(v=vs.85).aspx</a><br>    (There is some community comment, but community comments are written by anybody, deprecation is not announced in community comments. For example, the really deprecated function is "GetVersion" - (<a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx))">https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx))</a>.<br><br>The web page, whose reference you provided is just a forum, is not Win32 API specification or official announcement from Microsoft. So I would not rely on this information.<br><br>Additionally approach based on "WM_TOUCH" showed itself in my test environment reliably, WM_TOUCH are generated stably in MS Windows 10 OS, also I was able to successfully port the fix to JDK 8 and verify that it works. Currently I am working on addressing remarks from Sergey and do not plan to refuse from currently developed real basement of the whole fix, which uses WM_TOUCH.<br><br>Thank you,<br>Anton<o:p></o:p></p><div><p class=MsoNormal>On 14/09/2017 10:55, Shashidhara Veerabhadraiah wrote:<o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p><span style='font-family:"Calibri",sans-serif'>Hi Anton, I have</span> <span style='font-family:"Calibri",sans-serif'>a question to ask for. I was working on another bug and found that the</span> <span style='font-family:"Calibri",sans-serif'>WM_TOUCH</span> <span style='font-family:"Calibri",sans-serif'>has been deprecated and instead we should be using the WM_POINTER? Here is some info on that:</span> <a href="https://stackoverflow.com/questions/23790602/wm-touch-vs-wm-pointer"><span style='font-family:"Calibri",sans-serif;color:#0563C1'>https://stackoverflow.com/questions/23790602/wm-touch-vs-wm-pointer</span></a><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>Typically, the WM_POINTER types can handle following type of</span><i><u> </u></i><i><u><span style='font-family:"Calibri",sans-serif'>pointers</span></u></i><span style='font-family:"Calibri",sans-serif'>:</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>typedef enum tagPOINTER_INPUT_TYPE { </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>  PT_POINTER   = 0x00000001,</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>  PT_TOUCH     = 0x00000002,</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>  PT_PEN       = 0x00000003,</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>  PT_MOUSE     = 0x00000004,</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>  PT_TOUCHPAD  = 0x00000005</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>} POINTER_INPUT_TYPE;</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>Hope this is useful for</span> <span style='font-family:"Calibri",sans-serif'>your fix.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>Thanks and regards,</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>Shashi</span><o:p></o:p></p><p><a name=""></a><span style='font-family:"Calibri",sans-serif'>-----Original Message-----<br>From: Sergey Bylokhov<br>Sent: Tuesday, September 5, 2017 10:45 PM<br>To: Anton Litvinov <a href="mailto:anton.litvinov@oracle.com"><anton.litvinov@oracle.com></a>; <a href="mailto:awt-dev@openjdk.java.net">awt-dev@openjdk.java.net</a>; <a href="mailto:swing-dev@openjdk.java.net">swing-dev@openjdk.java.net</a><br>Subject: Re: <AWT Dev> <Swing Dev> [10] Review request for 8166772: Touch keyboard is not shown for text components on a screen touch</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>Hi, Anton.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>The fix looks good.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>  - But can you please recheck that is is not necessary to use additional synchronization in showOrHideTouchKeyboard() if a few EDT will be used.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>  - I suggest to invert the awt.touchKeyboardAutoShowIsEnabled and use true as default value, we will have more coverage and feedback in this case. This property will be used as a workaround if some bugs will be found.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>On 8/30/17 11:51, Anton Litvinov wrote:</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>> Hello dear reviewers,</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>> </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>> Could anybody please look at this review request?</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>> </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>> Thank you,</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>> Anton</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>> </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>> On 17/08/2017 13:20, Anton Litvinov wrote:</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Hello,</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Could you please review the following fix for the bug.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Bug:</span> <a href="https://bugs.openjdk.java.net/browse/JDK-8166772"><span style='font-family:"Calibri",sans-serif'>https://bugs.openjdk.java.net/browse/JDK-8166772</span></a><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Webrev:</span> <a href="http://cr.openjdk.java.net/%7Ealitvinov/8166772/jdk10/webrev.00"><span style='font-family:"Calibri",sans-serif'>http://cr.openjdk.java.net/~alitvinov/8166772/jdk10/webrev.00</span></a><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> The bug is the fact that, when a user touches any Swing or AWT text </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> component, for example "JTextField", "JTextArea", "TextField", </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> "TextArea", by means of a touch screen on a host with MS Windows</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> 10/8.1/8 OS, the system touch keyboard is not shown automatically. </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Please find a detailed description of the bug, screenshots depicting </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> the touch keyboard and a compilable test case with Swing/AWT text </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> components in JBS bug record. Also a summary of the done research of </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> the issue with a description of identified approaches for its </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> resolution are reported in my last comment in the bug record.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> THE FIX:</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> On a very abstract level the fix functioning can be presented by the </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> next 3 stages:</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Stage 1.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> The fix adds support of "WM_TOUCH" system window messages to AWT </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> native peer windows through C++ class "AwtComponent". It "processes"</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> "WM_TOUCH" message and marks "java.awt.event.MouseEvent", which is </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> created as a result of handling of the further coming </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> "WM_LBUTTONDOWN", "WM_LBUTTONUP" messages sent by the system in </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> substitution for this "WM_TOUCH" message, by the new private field </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> flag "MouseEvent.causedByTouchEvent".</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Stage 2.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Then on Java level the fix handles "MouseEvent", "FocusEvent" </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> received only by the instances of "java.awt.TextComponent", </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> "javax.swing.text.TextComponent" in </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> "WToolkit.showOrHideTouchKeyboard()" called from </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> "Component.dispatchEventImpl()" and shows or hides the touch keyboard </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> on "MouseEvent.MOUSE_RELEASED" and "FocusEvent.FOCUS_LOST" events by </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> calling corresponding native methods of "WToolkit" class.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Stage 3.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Showing of the touch keyboard is implemented in C++ class "AwtToolkit" </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> and is done by launching the system application "TabTip.exe" which </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> implements the system touch keyboard. This approach is described in </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> the bug record.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> FEATURES OF THE FIX:</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> 1. By default all native and Java parts of the fix do not function at </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> all - the fix is disabled. To enable the fix the application should </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> be run with "-Dawt.touchKeyboardAutoShowIsEnabled=true" option. </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Handling of this new property is implemented in "sun.awt.SunToolkit" class.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> 2. Native parts of the fix functions only on MS Window 8 or later.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> 3. The fix implements automatic showing of the touch keyboard for the </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> following 2 use cases:</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> ??? a.? The user touches the text components using the touch screen.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> ??? b.? The user does mouse clicks</span> <span style='font-family:"Calibri",sans-serif'>on the text components, while no </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> any keyboard is attached to the host.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> FIX LOGICAL STRUCTURE BY SOURCE CODE:</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> 1. Core of the fix:</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> ??? Native code:? awt_Toolkit.[h/cpp], awt_Component.[h/cpp], </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> awt_MouseEvent.[h/cpp], awt.h</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> ??? Java:? SunToolkit.java, WToolkit.java, Component.java, </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> MouseEvent.java, AWTAccessor.java</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> 2. Changes in all remaining Java files are connected with retaining </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> of the flag value "MouseEvent.causedByTouchEvent" during creation of </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> the new instances of "MouseEvent" class based on the original "MouseEvent"</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> instances.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Work of the fix was verified both in the environment with the real </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> touch screen device and in the environment with the emulated touch </span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> screen.</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>></span><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Thank you,</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>>> Anton</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>> </span><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p><span style='font-family:"Calibri",sans-serif'>--</span><o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>Best regards, Sergey.</span><o:p></o:p></p></blockquote><p class=MsoNormal><o:p> </o:p></p></div></body></html>