Opened 14 years ago
Closed 14 years ago
#183 closed defect (fixed)
Shift + numpad arrow keys produces numbers
Reported by: | Dmitry A. Kuminov | Owned by: | |
---|---|---|---|
Priority: | blocker | Milestone: | Qt 4.6.3 |
Component: | QtGui | Version: | 4.6.2 |
Severity: | low | Keywords: | |
Cc: |
Description
Reported by Alex Tailor in gmane.org.netlabs.qt.devel:
Attempting to mark text in any QT text control using Shift + the keypad
navigation keys results in numbers being printed instead. (In other
words, Shift has the effect of simulating NumLock instead of marking.)
This rather unfortunately makes it difficult to effectively use QT text controls...
Using 4.6.2.
I can confirm that.
Change History (3)
comment:1 by , 14 years ago
comment:2 by , 14 years ago
No, the NumLock inversion is not always undone by the standard apps (checked e.exe and PM entry fields) -- only the one happening when NumLock is OFF; when NumLock is ON, all inversions reach the application as is. AFAIU, this is done exactly to make the text selection work in NumLock OFF mode. So, we will also support only this case.
More over, undoing the inversion in NumLock ON mode (when digits are replaced with cursor movements) would not be actually possible because, strictly speaking, a character generated by a particular key depends on the current keyboard layout (e.g. this happens with the Del key in ru_RU locale: in Latin mode, it produces the '.' character while in National mode, it gives ',').
comment:3 by , 14 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Should be fixed in r802. Alex, please check and free to reopen the ticket if it still doesn't work as expected.
By default, we rely on flags when interpreting WM_CHAR messages. This, in particular, means that we interpret the key as a character only if it has the KC_CHAR flag set. In case of Shift, Control and numpad keys, I found a fancy dependency in WC_CHAR generation by the OS/2 keyboard driver:
It looks like Shift temporarily inverts the NumLock status for some curious reason. But this inversion is ignored by regular OS/2 software (and by PM classes) which seem to manually cancel it and build up the chr value on their own when necessary.
We will have to add the same exception to our code.