<Swing Dev> <AWT Dev> [10] Review request for 8166772: Touch keyboard is not shown for text components on a screen touch
Shashidhara Veerabhadraiah
shashidhara.veerabhadraiah at oracle.com
Thu Sep 14 09:55:39 UTC 2017
Hi Anton, I have a question to ask for. I was working on another bug and found that the WM_TOUCH has been deprecated and instead we should be using the WM_POINTER? Here is some info on that: https://stackoverflow.com/questions/23790602/wm-touch-vs-wm-pointer
Typically, the WM_POINTER types can handle following type of pointers:
typedef enum tagPOINTER_INPUT_TYPE {
PT_POINTER = 0x00000001,
PT_TOUCH = 0x00000002,
PT_PEN = 0x00000003,
PT_MOUSE = 0x00000004,
PT_TOUCHPAD = 0x00000005
} POINTER_INPUT_TYPE;
Hope this is useful for your fix.
Thanks and regards,
Shashi
-----Original Message-----
From: Sergey Bylokhov
Sent: Tuesday, September 5, 2017 10:45 PM
To: Anton Litvinov <anton.litvinov at oracle.com>; awt-dev at openjdk.java.net; swing-dev at openjdk.java.net
Subject: Re: <AWT Dev> <Swing Dev> [10] Review request for 8166772: Touch keyboard is not shown for text components on a screen touch
Hi, Anton.
The fix looks good.
- But can you please recheck that is is not necessary to use additional synchronization in showOrHideTouchKeyboard() if a few EDT will be used.
- 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.
On 8/30/17 11:51, Anton Litvinov wrote:
> Hello dear reviewers,
>
> Could anybody please look at this review request?
>
> Thank you,
> Anton
>
> On 17/08/2017 13:20, Anton Litvinov wrote:
>> Hello,
>>
>> Could you please review the following fix for the bug.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8166772
>> Webrev: http://cr.openjdk.java.net/~alitvinov/8166772/jdk10/webrev.00
>>
>> The bug is the fact that, when a user touches any Swing or AWT text
>> component, for example "JTextField", "JTextArea", "TextField",
>> "TextArea", by means of a touch screen on a host with MS Windows
>> 10/8.1/8 OS, the system touch keyboard is not shown automatically.
>> Please find a detailed description of the bug, screenshots depicting
>> the touch keyboard and a compilable test case with Swing/AWT text
>> components in JBS bug record. Also a summary of the done research of
>> the issue with a description of identified approaches for its
>> resolution are reported in my last comment in the bug record.
>>
>> THE FIX:
>> On a very abstract level the fix functioning can be presented by the
>> next 3 stages:
>>
>> Stage 1.
>> The fix adds support of "WM_TOUCH" system window messages to AWT
>> native peer windows through C++ class "AwtComponent". It "processes"
>> "WM_TOUCH" message and marks "java.awt.event.MouseEvent", which is
>> created as a result of handling of the further coming
>> "WM_LBUTTONDOWN", "WM_LBUTTONUP" messages sent by the system in
>> substitution for this "WM_TOUCH" message, by the new private field
>> flag "MouseEvent.causedByTouchEvent".
>>
>> Stage 2.
>> Then on Java level the fix handles "MouseEvent", "FocusEvent"
>> received only by the instances of "java.awt.TextComponent",
>> "javax.swing.text.TextComponent" in
>> "WToolkit.showOrHideTouchKeyboard()" called from
>> "Component.dispatchEventImpl()" and shows or hides the touch keyboard
>> on "MouseEvent.MOUSE_RELEASED" and "FocusEvent.FOCUS_LOST" events by
>> calling corresponding native methods of "WToolkit" class.
>>
>> Stage 3.
>> Showing of the touch keyboard is implemented in C++ class "AwtToolkit"
>> and is done by launching the system application "TabTip.exe" which
>> implements the system touch keyboard. This approach is described in
>> the bug record.
>>
>> FEATURES OF THE FIX:
>> 1. By default all native and Java parts of the fix do not function at
>> all - the fix is disabled. To enable the fix the application should
>> be run with "-Dawt.touchKeyboardAutoShowIsEnabled=true" option.
>> Handling of this new property is implemented in "sun.awt.SunToolkit" class.
>>
>> 2. Native parts of the fix functions only on MS Window 8 or later.
>>
>> 3. The fix implements automatic showing of the touch keyboard for the
>> following 2 use cases:
>> ??? a.? The user touches the text components using the touch screen.
>> ??? b.? The user does mouse clicks on the text components, while no
>> any keyboard is attached to the host.
>>
>> FIX LOGICAL STRUCTURE BY SOURCE CODE:
>> 1. Core of the fix:
>> ??? Native code:? awt_Toolkit.[h/cpp], awt_Component.[h/cpp],
>> awt_MouseEvent.[h/cpp], awt.h
>> ??? Java:? SunToolkit.java, WToolkit.java, Component.java,
>> MouseEvent.java, AWTAccessor.java
>>
>> 2. Changes in all remaining Java files are connected with retaining
>> of the flag value "MouseEvent.causedByTouchEvent" during creation of
>> the new instances of "MouseEvent" class based on the original "MouseEvent"
>> instances.
>>
>> Work of the fix was verified both in the environment with the real
>> touch screen device and in the environment with the emulated touch
>> screen.
>>
>> Thank you,
>> Anton
>
--
Best regards, Sergey.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20170914/d60fce4d/attachment.html>
More information about the swing-dev
mailing list