[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-openjfx-dev
Subject: Re: RFR: 8273743: KeyCharacterCombination for "+" does not work on US QWERTY keyboard layout [v5]
From: Martin Fox <duke () openjdk ! org>
Date: 2023-04-27 18:07:53
Message-ID: hQxaXr7HAn--nyUFbfLy7CFvK73oxxQ-o-Ugmr6MWGE=.b3a0d8db-933f-4806-82a3-d0ce03c4785a () github ! com
[Download RAW message or body]
> The algorithm in `KeyCharacterCombination.match` relies on the call \
> `Toolkit.getKeyCodeForChar` which is difficult to implement correctly. It defies \
> the way most keyboard API's work and no platform has got it right yet. In \
> particular the Mac and Linux implementations have to resort to a brute-force \
> approach which monitors keystrokes to learn the relationship between keys and \
> characters.
> This PR introduces an alternative mechanism which directly asks the platform \
> whether a given key can generate a specific character. It also allows the platform \
> to attach identifying key information to each KeyEvent to make it easier to answer \
> the question (much, much easier).
> This is mostly dumb plumbing. On the front-end there's a new call \
> `View.notifyKeyEx` that takes an additional platform-specific `hardwareCode` \
> parameter. It also returns a boolean indicating whether the event was consumed or \
> not so I can fix JDK-8087863. If you want to follow the path visit the files in \
> this order:
> View.java
> GlassViewEventHandler.java
> TKSceneListener.java
> Scene.java
>
> The `KeyEvent` class has been expanded with an additional `hardwareCode` member \
> that can only be accessed internally. See KeyEvent.java and KeyEventHelper.java.
> On the back-end `KeyCharacterCombination.match` calls a new routine \
> `Toolkit.getKeyCanGenerateCharacter` which unpacks the `KeyEvent` information and \
> sends it on to the Application. The default implementation falls back to the old \
> `getKeyCodeForChar` call but platform specific Applications can send it on to the \
> native glass code.
> KeyCharacterCombination.java
> Toolkit.java
> QuantumToolkit.java
> Application.java
> GtkApplication.java
>
> The glass code can use the `hardwareCode` to answer the question directly. It also \
> has enough information to fall back on the old `getKeyCodeForChar` logic while also \
> enabling the keypad (a common complaint is that Ctrl+'+' only works on the main \
> keyboard and not the keypad, see JDK-8090275).
> This PR improves the situation for key events generated by keystrokes. Manually \
> constructed key events won't work any better or worse than they already do. Based \
> on the bug database I don't think this is an issue.
Martin Fox has updated the pull request incrementally with one additional commit \
since the last revision:
Updating classpath for Eclipse users
-------------
Changes:
- all: https://git.openjdk.org/jfx/pull/694/files
- new: https://git.openjdk.org/jfx/pull/694/files/5cd7e9a2..ddaf808c
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jfx&pr=694&range=04
- incr: https://webrevs.openjdk.org/?repo=jfx&pr=694&range=03-04
Stats: 5 lines in 1 file changed: 5 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jfx/pull/694.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/694/head:pull/694
PR: https://git.openjdk.org/jfx/pull/694
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic