mirror of
https://github.com/gdamore/tcell.git
synced 2025-04-24 13:48:51 +08:00
Do not filter Ctrl+Alt in non-rune cases
Ctrl+Alt seems to be the same as AltGr and AltGr usually switches the keyboard layout to level 3. This is not true for keys combos like: Ctrl + Alt + [Up, Down, Left, Right, Home, End, PageUp, PageDown, Delete, Backspace] or mouse clicks.
This commit is contained in:
parent
88b9c25c3c
commit
573bc14c91
@ -666,14 +666,14 @@ func geti16(v []byte) int16 {
|
||||
}
|
||||
|
||||
// Convert windows dwControlKeyState to modifier mask
|
||||
func mod2mask(cks uint32) ModMask {
|
||||
func mod2mask(cks uint32, filter_ctrl_alt bool) ModMask {
|
||||
mm := ModNone
|
||||
// Left or right control
|
||||
ctrl := (cks & (0x0008 | 0x0004)) != 0
|
||||
// Left or right alt
|
||||
alt := (cks & (0x0002 | 0x0001)) != 0
|
||||
// Filter out ctrl+alt (it means AltGr)
|
||||
if !(ctrl && alt) {
|
||||
if !filter_ctrl_alt || !(ctrl && alt) {
|
||||
if ctrl {
|
||||
mm |= ModCtrl
|
||||
}
|
||||
@ -788,10 +788,10 @@ func (s *cScreen) getConsoleInput() error {
|
||||
// synthesized key code
|
||||
for krec.repeat > 0 {
|
||||
// convert shift+tab to backtab
|
||||
if mod2mask(krec.mod) == ModShift && krec.ch == vkTab {
|
||||
if mod2mask(krec.mod, false) == ModShift && krec.ch == vkTab {
|
||||
s.postEvent(NewEventKey(KeyBacktab, 0, ModNone))
|
||||
} else {
|
||||
s.postEvent(NewEventKey(KeyRune, rune(krec.ch), mod2mask(krec.mod)))
|
||||
s.postEvent(NewEventKey(KeyRune, rune(krec.ch), mod2mask(krec.mod, true)))
|
||||
}
|
||||
krec.repeat--
|
||||
}
|
||||
@ -803,7 +803,7 @@ func (s *cScreen) getConsoleInput() error {
|
||||
return nil
|
||||
}
|
||||
for krec.repeat > 0 {
|
||||
s.postEvent(NewEventKey(key, rune(krec.ch), mod2mask(krec.mod)))
|
||||
s.postEvent(NewEventKey(key, rune(krec.ch), mod2mask(krec.mod, false)))
|
||||
krec.repeat--
|
||||
}
|
||||
|
||||
@ -816,7 +816,7 @@ func (s *cScreen) getConsoleInput() error {
|
||||
mrec.flags = getu32(rec.data[12:])
|
||||
btns := mrec2btns(mrec.btns, mrec.flags)
|
||||
// we ignore double click, events are delivered normally
|
||||
s.postEvent(NewEventMouse(int(mrec.x), int(mrec.y), btns, mod2mask(mrec.mod)))
|
||||
s.postEvent(NewEventMouse(int(mrec.x), int(mrec.y), btns, mod2mask(mrec.mod, false)))
|
||||
|
||||
case resizeEvent:
|
||||
var rrec resizeRecord
|
||||
|
Loading…
x
Reference in New Issue
Block a user