> The JavaFX API does not provide a way to get the state of CAPS LOCK or NUM 
> LOCK on the keyboard. Being able to read the lock state would allow an 
> application to inform the user that caps lock was enabled for passwords or 
> other usages where the keyboard input might not be echoed. It would also 
> allow an application to do spell checking / auto-correction that might 
> ordinarily be skipped when typing all upper-case letters.
> 
> We need an equivalent JavaFX API to the existing AWT 
> `java.awt.ToolKit::getLockingKeyState` method. A natural place to put this in 
> JavaFX is in the `javafx.application.Platform` class, so we propose to create 
> a new `Platform::isKeyLocked` method, which will take a `KeyCode` -- either 
> `CAPS` or `NUM_LOCK` -- and return an `Optional<Boolean>` indicating whether 
> or not that key is in the locked or "on" state. If we can't read the key 
> state on a particular platform, we will return `Optional.empty()`, rather 
> than throwing a runtime exception as AWT does.
> 
> I have provided both an automated Robot test and a manual test. The latter is 
> needed primarily because we can't set the CAPS lock on Mac using Robot, but 
> also because we want  way to test the case where the user has enabled CAPS 
> lock before the program starts.

Kevin Rushforth has updated the pull request incrementally with one additional 
commit since the last revision:

  Use XkbGetNamedIndicator on Linux instead of relying on the (unreliable) GDK 
method.

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

Changes:
  - all: https://git.openjdk.java.net/jfx/pull/385/files
  - new: https://git.openjdk.java.net/jfx/pull/385/files/cb0e10a7..c4961b16

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jfx&pr=385&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jfx&pr=385&range=01-02

  Stats: 49 lines in 2 files changed: 30 ins; 3 del; 16 mod
  Patch: https://git.openjdk.java.net/jfx/pull/385.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/385/head:pull/385

PR: https://git.openjdk.java.net/jfx/pull/385

Reply via email to