<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<META NAME="Generator" CONTENT="MS Exchange Server version rmj.rmm.rup.rpr">
<TITLE>RE: <AWT Dev> <Swing Dev> [10] Review request for 8166772: Touch keyboard is not shown for text components on a screen touch</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">Hi Anton, I have</FONT> <FONT FACE="Calibri">a question to ask for. I was working on another bug and found th</FONT><FONT FACE="Calibri">at the</FONT> <FONT FACE="Calibri">WM_TOUCH</FONT></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">has been deprecated and instead we should be using the WM_POINTER? Here is some info on that:</FONT><FONT FACE="Calibri"></FONT></SPAN><SPAN LANG="en-us"> </SPAN><A HREF="https://stackoverflow.com/questions/23790602/wm-touch-vs-wm-pointer"><SPAN LANG="en-us"><U><FONT COLOR="#0563C1" FACE="Calibri">https://stackoverflow.com/questions/23790602/wm-touch-vs-wm-pointer</FONT></U></SPAN><SPAN LANG="en-us"></SPAN></A><SPAN LANG="en-us"></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">Typically, the WM_POINTER types can handle following type of</FONT></SPAN><SPAN LANG="en-us"><I><U> <FONT FACE="Calibri">pointers</FONT></U></I></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">:</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">typedef enum tagPOINTER_INPUT_TYPE { </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri"> PT_POINTER = 0x00000001,</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri"> PT_TOUCH = 0x00000002,</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri"> PT_PEN = 0x00000003,</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri"> PT_MOUSE = 0x00000004,</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri"> PT_TOUCHPAD = 0x00000005</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">}</FONT><FONT FACE="Calibri"> POINTER_INPUT_TYPE;</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">Hope this is useful for</FONT></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">your</FONT></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> fix.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">Thanks and regards,</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">Shashi</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"></SPAN><A NAME=""><SPAN LANG="en-us"></SPAN></A></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">-----Original Message-----<BR>
</FONT><FONT FACE="Calibri">From:</FONT><FONT FACE="Calibri"> Sergey Bylokhov<BR>
</FONT><FONT FACE="Calibri">Sent:</FONT><FONT FACE="Calibri"> Tuesday, September 5, 2017 10:45 PM<BR>
</FONT><FONT FACE="Calibri">To:</FONT><FONT FACE="Calibri"> Anton Litvinov <anton.litvinov@oracle.com></FONT><FONT FACE="Calibri">; awt-dev@openjdk.java.net; swing-dev@openjdk.java.net<BR>
</FONT><FONT FACE="Calibri">Subject:</FONT><FONT FACE="Calibri"> Re: <AWT Dev> <Swing Dev> [10] Review request for 8166772: Touch keyboard is not shown for text components on a screen touch</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">Hi, Anton.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">The fix looks good.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri"> - But can you please recheck that is is not necessary to use additional synchronization in showOrHideTouchKeyboard() if a few EDT will be used.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri"> - I suggest to invert the awt.touchKeyboardAutoShowIsEnabled and use true as default val</FONT><FONT FACE="Calibri">ue, we will have more coverage and feedback in this case. This property will be used as a workaround if some bugs will be found.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">On 8/30/17 11:51, Anton Litvinov wrote:</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">> Hello dear reviewers,</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">> </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">> Could anybody please look at this review request?</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">> </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">> Th</FONT><FONT FACE="Calibri">ank you,</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">> Anton</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">> </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">> On 17/08/2017 13:20, Anton Litvinov wrote:</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Hello,</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Could you please review the following fix for the bug.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Bug:</FONT></SPAN><SPAN LANG="en-us"> </SPAN><A HREF="https://bugs.openjdk.java.net/browse/JDK-8166772"><SPAN LANG="en-us"><FONT FACE="Calibri">https://bugs.openjdk.java.net/browse/JDK-8166772</FONT></SPAN><SPAN LANG="en-us"></SPAN></A><SPAN LANG="en-us"></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Webrev:</FONT></SPAN><SPAN LANG="en-us"> </SPAN><A HREF="http://cr.openjdk.java.net/~alitvinov/8166772/jdk10/webrev.00"><SPAN LANG="en-us"><FONT FACE="Calibri">http://cr.openjdk.java.net/~alitvinov/8166772/jdk</FONT><FONT FACE="Calibri">10/webrev.00</FONT></SPAN><SPAN LANG="en-us"></SPAN></A><SPAN LANG="en-us"></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> The bug is the fact that, when a user touches any Swing or AWT text </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> component, for example "JTextField", "JTextArea", "TextField", </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> "TextArea", by means of a touch screen on a host with MS Windows</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> 10/8.1/8 OS, the system touch keyboard is not shown automatically. </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Please find a detailed description of the bug, screenshots depicting </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> the touch keyboard and a compilable test case with Swing/AWT text </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> components in JBS bug record. Also a su</FONT><FONT FACE="Calibri">mmary of the done research of </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> the issue with a description of identified approaches for its </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> resolution are reported in my last comment in the bug record.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> THE FIX:</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> On a very abstract level the fix functioning can be presented by the </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> nex</FONT><FONT FACE="Calibri">t 3 stages:</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Stage 1.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> The fix adds support of "WM_TOUCH" system window messages to AWT </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> native peer windows through C++ class "AwtComponent". It "processes"</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> "WM_TOUCH" message and marks "java.awt.event.MouseEvent", which is </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> created as a r</FONT><FONT FACE="Calibri">esult of handling of the further coming </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> "WM_LBUTTONDOWN", "WM_LBUTTONUP" messages sent by the system in </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> substitution for this "WM_TOUCH" message, by the new private field </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> flag "MouseEvent.causedByTouchEvent".</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Stage 2.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Then on Java leve</FONT><FONT FACE="Calibri">l the fix handles "MouseEvent", "FocusEvent" </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> received only by the instances of "java.awt.TextComponent", </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> "javax.swing.text.TextComponent" in </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> "WToolkit.showOrHideTouchKeyboard()" called from </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> "Component.dispatchEventImpl()" and shows or hides</FONT><FONT FACE="Calibri"> the touch keyboard </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> on "MouseEvent.MOUSE_RELEASED" and "FocusEvent.FOCUS_LOST" events by </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> calling corresponding native methods of "WToolkit" class.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Stage 3.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Showing of the touch keyboard is implemented in C++ class "AwtToolkit" </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> and is done by launching the system application "TabTip.exe" which </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> implements the system touch keyboard. This approach is described in </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> the bug record.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> FEATURES OF THE FIX:</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> 1. By default all native and Java parts of the fix do not functi</FONT><FONT FACE="Calibri">on at </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> all - the fix is disabled. To enable the fix the application should </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> be run with "-Dawt.touchKeyboardAutoShowIsEnabled=true" option. </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Handling of this new property is implemented in "sun.awt.SunToolkit" class.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> 2. Native parts of the f</FONT><FONT FACE="Calibri">ix functions only on MS Window 8 or later.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> 3. The fix implements automatic showing of the touch keyboard for the </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> following 2 use cases:</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> ??? a.? The user touches the text components using the touch screen.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> ??? b.? The user does mouse clicks</FONT> <FONT FACE="Calibri">on the text components, while no </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> any keyboard is attached to the host.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> FIX LOGICAL STRUCTURE BY SOURCE CODE:</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> 1. Core of the fix:</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> ??? Native code:? awt_Toolkit.[h/cpp], awt_Component.[h/cpp], </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> awt_MouseEvent.[h/cpp], awt.h</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> ??? Java:? S</FONT><FONT FACE="Calibri">unToolkit.java, WToolkit.java, Component.java, </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> MouseEvent.java, AWTAccessor.java</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> 2. Changes in all remaining Java files are connected with retaining </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> of the flag value "MouseEvent.causedByTouchEvent" during creation of </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> the new instances of "MouseEvent" class based on the original "MouseEvent"</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> instances.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Work of the fix was verified both in the environment with the real </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> touch screen device and in the environment with the emulated touch </FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> screen.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>></FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Th</FONT><FONT FACE="Calibri">ank you,</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">>> Anton</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">> </FONT></SPAN></P>
<BR>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">--</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">Best regards, Sergey.</FONT></SPAN></P>
<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>
</BODY>
</HTML>