chromiumembedded / java-cef

Java Chromium Embedded Framework (JCEF). A simple framework for embedding Chromium-based browsers in other applications using the Java programming language.
https://bitbucket.org/chromiumembedded/java-cef
Other
648 stars 142 forks source link

Non-US keyboard layouts don't work properly in macOS in OSR mode #448

Open cijaaimee opened 1 year ago

cijaaimee commented 1 year ago

Describe the bug When a key event is sent to CEF using offscreen rendering, the native code will only bind keys in the standard US layout when in macOS. This is because the code in charge of obtaining the virtual keycode is hardcoded to only work with this layout.

To Reproduce Steps to reproduce the behavior:

  1. Create a browser in OSR mode.
  2. Type any key that isn't part of the US keyboard layout (e.g. á,ñ`). You'll see that the key is ignored. This does not occur when OSR is disabled.

Expected behavior When typing, the key event should be forwarded to CEF.

Screenshots

Versions (please complete the following information):

Additional context Does the problem reproduce with the JCEF simple or detailed sample application at the same version? Yes.

Does the problem reproduce with the CEF cefclient or cefsimple sample application at the same version? Yes.

Does the problem reproduce with Google Chrome at the same version? No.

Add any other context about the problem here. Here's an useful discussion on how to implement layout-independent char->keycode translation: https://stackoverflow.com/questions/1918841/how-to-convert-ascii-character-to-cgkeycode/1971027#1971027