… | |
… | |
413 | |
413 | |
414 | void ecb_cold |
414 | void ecb_cold |
415 | rxvt_term::key_press (XKeyEvent &ev) |
415 | rxvt_term::key_press (XKeyEvent &ev) |
416 | { |
416 | { |
417 | int ctrl, meta, shft, len; |
417 | int ctrl, meta, shft, len; |
418 | KeySym keysym; |
418 | KeySym keysym = NoSymbol; |
419 | int valid_keysym; |
|
|
420 | char rkbuf[KBUFSZ + 1]; |
419 | char rkbuf[KBUFSZ + 1]; |
421 | char *kbuf = rkbuf + 1; |
420 | char *kbuf = rkbuf + 1; |
422 | |
421 | |
423 | #if ISO_14755 |
422 | #if ISO_14755 |
424 | if (iso14755buf & ISO_14755_52) |
423 | if (iso14755buf & ISO_14755_52) |
… | |
… | |
483 | } |
482 | } |
484 | } |
483 | } |
485 | else |
484 | else |
486 | len = 0; |
485 | len = 0; |
487 | } |
486 | } |
488 | |
|
|
489 | valid_keysym = status_return == XLookupKeySym |
|
|
490 | || status_return == XLookupBoth; |
|
|
491 | } |
487 | } |
492 | else |
488 | else |
493 | #endif |
489 | #endif |
494 | { |
490 | { |
495 | len = XLookupString (&ev, kbuf, KBUFSZ, &keysym, &compose); |
491 | len = XLookupString (&ev, kbuf, KBUFSZ, &keysym, &compose); |
496 | valid_keysym = keysym != NoSymbol; |
|
|
497 | } |
|
|
498 | |
|
|
499 | if (valid_keysym) |
|
|
500 | { |
492 | } |
|
|
493 | |
|
|
494 | if (keysym != NoSymbol) |
|
|
495 | { |
|
|
496 | KeySym orig_keysym = keysym; |
|
|
497 | |
|
|
498 | /* Shift + F1 - F10 generates F11 - F20 */ |
|
|
499 | if (shft && keysym >= XK_F1 && keysym <= XK_F10) |
|
|
500 | { |
|
|
501 | keysym += (XK_F11 - XK_F1); |
|
|
502 | shft = 0; /* turn off Shift */ |
|
|
503 | } |
|
|
504 | |
501 | if (keysym >= 0xFF00 && keysym <= 0xFFFF) |
505 | if (keysym >= 0xFF00 && keysym <= 0xFFFF) |
502 | { |
506 | { |
503 | bool kp = priv_modes & PrivMode_aplKP ? !shft : shft; |
507 | bool kp = priv_modes & PrivMode_aplKP ? !shft : shft; |
504 | unsigned int newlen = 1; |
508 | unsigned int newlen = 1; |
505 | |
509 | |
… | |
… | |
685 | meta = 0; |
689 | meta = 0; |
686 | } |
690 | } |
687 | #endif |
691 | #endif |
688 | /* nil */ ; |
692 | /* nil */ ; |
689 | } |
693 | } |
|
|
694 | |
|
|
695 | keysym = orig_keysym; |
690 | } |
696 | } |
691 | |
697 | |
692 | /* escape prefix */ |
698 | /* escape prefix */ |
693 | if (len && meta |
699 | if (len && meta |
694 | #ifdef META8_OPTION |
700 | #ifdef META8_OPTION |
… | |
… | |
701 | } |
707 | } |
702 | |
708 | |
703 | if (HOOK_INVOKE ((this, HOOK_KEY_PRESS, DT_XEVENT, &ev, DT_INT, keysym, DT_STR_LEN, kbuf, len, DT_END))) |
709 | if (HOOK_INVOKE ((this, HOOK_KEY_PRESS, DT_XEVENT, &ev, DT_INT, keysym, DT_STR_LEN, kbuf, len, DT_END))) |
704 | return; |
710 | return; |
705 | |
711 | |
706 | if (valid_keysym) |
712 | if (keysym != NoSymbol) |
707 | { |
713 | { |
708 | #ifdef KEYSYM_RESOURCE |
714 | #ifdef KEYSYM_RESOURCE |
709 | if (keyboard->dispatch (this, keysym, ev.state, kbuf, len)) |
715 | if (keyboard->dispatch (this, keysym, ev.state, kbuf, len)) |
710 | return; |
716 | return; |
711 | #endif |
717 | #endif |
… | |
… | |
770 | #endif |
776 | #endif |
771 | } |
777 | } |
772 | |
778 | |
773 | if (shft) |
779 | if (shft) |
774 | { |
780 | { |
775 | /* Shift + F1 - F10 generates F11 - F20 */ |
|
|
776 | if (keysym >= XK_F1 && keysym <= XK_F10) |
|
|
777 | { |
|
|
778 | keysym += (XK_F11 - XK_F1); |
|
|
779 | shft = 0; /* turn off Shift */ |
|
|
780 | } |
|
|
781 | else if (!ctrl && !meta && (priv_modes & PrivMode_ShiftKeys)) |
781 | if (!ctrl && !meta && (priv_modes & PrivMode_ShiftKeys)) |
782 | { |
782 | { |
783 | switch (keysym) |
783 | switch (keysym) |
784 | { |
784 | { |
785 | /* normal XTerm key bindings */ |
785 | /* normal XTerm key bindings */ |
786 | case XK_Insert: /* Shift+Insert = paste mouse selection */ |
786 | case XK_Insert: /* Shift+Insert = paste mouse selection */ |