-
Bug
-
Resolution: Won't Fix
-
P3
-
1.4.2_05
-
generic
-
linux_suse_sles_8.2
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2107667 | 6 | Yuri Nesterenko | P3 | Resolved | Fixed | b40 |
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 *****
================================================
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 *****
- backported by
-
JDK-2107667 KP_Separator handled wrong in KeyEvents
- Resolved
- relates to
-
JDK-5064016 NumPad Del key works incorrectly with Shift
- Open
-
JDK-4960727 xkb (X Keyboard Extension) support should be fixed in XAWT.
- Resolved
-
JDK-4725203 key on the numpad does not generate any key events on danish/swedish keyboards
- Resolved