RFR: 8289115: Touch events is not dispatched after upgrade to JAVAFX17+

Kevin Rushforth kcr at openjdk.org
Wed May 22 12:20:06 UTC 2024


On Wed, 22 May 2024 08:10:16 GMT, Jose Pereda <jpereda at openjdk.org> wrote:

>> This PR fixes a bug ([JDK-8289115](https://bugs.openjdk.org/browse/JDK-8289115)) that was introduced with #394, which changed the following line in the `NotifyTouchInput` function (ViewContainer.cpp):
>> 
>> - const bool isDirect = true;
>> + const bool isDirect = IsTouchEvent();
>> 
>> 
>> `IsTouchEvent` is a small utility function that uses the Windows SDK function `GetMessageExtraInfo` to distinguish between mouse events and pen events as described in this article: https://learn.microsoft.com/en-us/windows/win32/tablet/system-events-and-mouse-messages
>> 
>> I think that using this function to distinguish between touchscreen events and pen events is erroneous. The linked article states:
>> _"When your application receives a **mouse message** (such as WM_LBUTTONDOWN) [...]"_
>> 
>> But we are not receiving a mouse message in `NotifyTouchInput`, we are receiving a `WM_TOUCH` message.
>> I couldn't find any information on whether this API usage is also supported for `WM_TOUCH` messages, but my testing shows that that's probably not the case (I tested this with a XPS 15 touchscreen laptop, where `GetMessageExtraInfo` returns 0 for `WM_TOUCH` messages).
>> 
>> My suggestion is to check the `TOUCHEVENTF_PEN` flag of the `TOUCHINPUT` structure instead:
>> 
>> const bool isDirect = (ti->dwFlags & TOUCHEVENTF_PEN) == 0;
>
> Yes, I'll do that, I still have it around.

Reviewer: @jperedadnr

-------------

PR Comment: https://git.openjdk.org/jfx/pull/1459#issuecomment-2124650489


More information about the openjfx-dev mailing list