Relates :
|
|
Relates :
|
|
Relates :
|
Summary: KP_Separator handled wrong in KeyEvents ================================================ Operating systems: ================== Linux : currently SuSE 8.2 but reproducible on any recent distribution. Solaris : tested on SunOS 5.8 Java version: ============= java version "1.5.0-beta" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-beta-b32c) Java HotSpot(TM) Client VM (build 1.5.0-beta-b32c, mixed mode) as well as all other VMs down to 1.3.1 System setup: ============= locale : de_DE Keyboard layout : standard german layout xkb_keymap { xkb_keycodes { include "xfree86+aliases(qwertz)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc/pc(pc105)+pc/de(nodeadkeys)" }; xkb_geometry { include "pc(pc105)" }; }; Description: ============ The key char obtained with ev.getKeyChar() from a KeyEvent.KEY_TYPED KeyEvent.KEY_PRESSED and KeyEvent.KEY_RELEASED events KP_Separator. The problem is independent from the key the KP_Separator symbol is assigned to. The key char obtained from the KeyEvent.KEY_PRESSED and KeyEvent.KEY_RELEASED events is incorrect and does reflect the assigned character but always yields '.' (KP_Decimal) although KP_Separator is commonly assigned ','. The key char obtained from the PRESSED and RELEASED events seems to be hardcoded and does not reflect the assigned keysyms in the XKB database for the numeric keypad. It does however reflect these assignments for other keys. This is at least inconsistent. Reproduction: ============= Case 1: ======= $ locale LANG=de_DE LC_CTYPE=de_DE LC_NUMERIC=de_DE LC_TIME=de_DE LC_COLLATE=de_DE LC_MONETARY=de_DE LC_MESSAGES=en_US LC_PAPER="de_DE" LC_NAME="de_DE" LC_ADDRESS="de_DE" LC_TELEPHONE="de_DE" LC_MEASUREMENT="de_DE" LC_IDENTIFICATION="de_DE" LC_ALL= $ xmodmap -pke | grep KP_ keycode 63 = KP_Multiply XF86_ClearGrab keycode 79 = KP_Home KP_7 keycode 80 = KP_Up KP_8 keycode 81 = KP_Prior KP_9 keycode 82 = KP_Subtract XF86_Prev_VMode keycode 83 = KP_Left KP_4 keycode 84 = KP_Begin KP_5 keycode 85 = KP_Right KP_6 keycode 86 = KP_Add XF86_Next_VMode keycode 87 = KP_End KP_1 keycode 88 = KP_Down KP_2 keycode 89 = KP_Next KP_3 keycode 90 = KP_Insert KP_0 keycode 91 = KP_Delete KP_Separator keycode 108 = KP_Enter keycode 112 = KP_Divide XF86_Ungrab $ java KeyboardTest.KeyboardTest focus the entry field then press the key with keycode 91 note the unprintable character entered into the field and see the following events: Event text : Tastenblock . Event type : KEY_PRESSED Event key code: 110 Event key char: . ============================================================ Event text : Unknown keyCode: 0x0 Event type : KEY_TYPED Event key code: 0 Event key char: ? ============================================================ Event text : Tastenblock . Event type : KEY_RELEASED Event key code: 110 Event key char: . ============================================================ key char '.' is not the assigned KP_Separator in PRESSED and RELEASED but KP_Decimal and the key char is garbled in TYPED. Case 2: ======= $ xmodmap -e 'keycode 91 = KP_Delete KP_Decimal' $ xmodmap -pke | grep KP_ keycode 63 = KP_Multiply XF86_ClearGrab keycode 79 = KP_Home KP_7 keycode 80 = KP_Up KP_8 keycode 81 = KP_Prior KP_9 keycode 82 = KP_Subtract XF86_Prev_VMode keycode 83 = KP_Left KP_4 keycode 84 = KP_Begin KP_5 keycode 85 = KP_Right KP_6 keycode 86 = KP_Add XF86_Next_VMode keycode 87 = KP_End KP_1 keycode 88 = KP_Down KP_2 keycode 89 = KP_Next KP_3 keycode 90 = KP_Insert KP_0 keycode 91 = KP_Delete KP_Decimal keycode 108 = KP_Enter keycode 112 = KP_Divide XF86_Ungrab $ java KeyboardTest.KeyboardTest focus the entry field then press the key with keycode 91 This case works by coincidence since the keycode 91 is assigned KP_Decimal a '.' is entered in the input field and you see the following events: Event text : Tastenblock . Event type : KEY_PRESSED Event key code: 110 Event key char: . ============================================================ Event text : Unknown keyCode: 0x0 Event type : KEY_TYPED Event key code: 0 Event key char: . ============================================================ Event text : Tastenblock . Event type : KEY_RELEASED Event key code: 110 Event key char: . ============================================================ note the difference to case 1, the PRESSED and RELEASED events are identical but the TYPED event is not garbled this time. Case 3: ======= $ xmodmap -e 'keycode 91 = KP_Delete A' $ xmodmap -pke | grep KP_ keycode 63 = KP_Multiply XF86_ClearGrab keycode 79 = KP_Home KP_7 keycode 80 = KP_Up KP_8 keycode 81 = KP_Prior KP_9 keycode 82 = KP_Subtract XF86_Prev_VMode keycode 83 = KP_Left KP_4 keycode 84 = KP_Begin KP_5 keycode 85 = KP_Right KP_6 keycode 86 = KP_Add XF86_Next_VMode keycode 87 = KP_End KP_1 keycode 88 = KP_Down KP_2 keycode 89 = KP_Next KP_3 keycode 90 = KP_Insert KP_0 keycode 91 = KP_Delete A keycode 108 = KP_Enter keycode 112 = KP_Divide XF86_Ungrab $ java KeyboardTest.KeyboardTest focus the entry field then press the key with keycode 91 nothing is entered in the input field and the TYPED event is missing. The pressed and RELEASED events are still wrong. Event text : Tastenblock . Event type : KEY_PRESSED Event key code: 110 Event key char: . ============================================================ Event text : Tastenblock . Event type : KEY_RELEASED Event key code: 110 Event key char: . ============================================================ Case 4: ======= revert to the standard key bindings $ xmodmap -pke | grep 'q Q' keycode 24 = q Q $ java KeyboardTest.KeyboardTest focus the entry field then press the key with keycode 24 together with Shift note that 'Q' is entered into the field and observe the following events: Event text : Umschalt Event type : KEY_PRESSED Event key code: 16 Event key char: ? ============================================================ Event text : Q Event type : KEY_PRESSED Event key code: 81 Event key char: Q ============================================================ Event text : Unknown keyCode: 0x0 Event type : KEY_TYPED Event key code: 0 Event key char: Q ============================================================ Event text : Q Event type : KEY_RELEASED Event key code: 81 Event key char: Q ============================================================ Event text : Umschalt Event type : KEY_RELEASED Event key code: 16 Event key char: ? ============================================================ in contrast after assigning 'A' to keycode 24 + Shift: $ xmodmap -e 'keycode 24 = q A' $ java KeyboardTest.KeyboardTest focus the entry field then press the key with keycode 24 together with Shift note that 'A' is entered and that key char reflects the assigned character in PRESSED and RELEASED events unlike cases 1 - 3. keycode 24 = q A Event text : Umschalt Event type : KEY_PRESSED Event key code: 16 Event key char: ? ============================================================ Event text : Q Event type : KEY_PRESSED Event key code: 81 Event key char: A ============================================================ Event text : Unknown keyCode: 0x0 Event type : KEY_TYPED Event key code: 0 Event key char: A ============================================================ Event text : Q Event type : KEY_RELEASED Event key code: 81 Event key char: A ============================================================ Event text : Umschalt Event type : KEY_RELEASED Event key code: 16 Event key char: ? ============================================================ Conclusion: =========== The numerical keypad is unusable for data entry since the defined keyboard layout is not respected and illegal KEY_TYPED events are generated. ***** This problem effects 1.3.1 - 1.5 beta on all platforms ***** ***** Please fix this problem in these releases since they ***** ***** are used in supportef SAP products *****
|