Unified · Split
| @@ -302,6 +302,9 @@ xproc(void *arg) · 301 unmodified lines | ||
| 302 | 302 | Button4MotionMask| |
| 303 | 303 | Button5MotionMask| |
| 304 | 304 | ExposureMask| |
| 305 | + EnterWindowMask| | |
| 306 | + LeaveWindowMask| | |
| 307 | + FocusChangeMask| | |
| 305 | 308 | StructureNotifyMask; |
| 306 | 309 | |
| 307 | 310 | XSelectInput(xkmcon, xdrawable, mask); |
| @@ -727,15 +730,25 @@ xexpose(XEvent *e) · 419 unmodified lines | ||
| 727 | 730 | static void |
| 728 | 731 | xkeyboard(XEvent *e) |
| 729 | 732 | { |
| 733 | + static int altdown; | |
| 730 | 734 | KeySym k; |
| 731 | 735 | |
| 732 | − /* | |
| 733 | − * I tried using XtGetActionKeysym, but it didn't seem to | |
| 734 | − * do case conversion properly | |
| 735 | − * (at least, with Xterminal servers and R4 intrinsics) | |
| 736 | − */ | |
| 737 | − if(e->xany.type != KeyPress && e->xany.type != KeyRelease) | |
| 736 | + switch(e->xany.type){ | |
| 737 | + case KeyPress: | |
| 738 | + case KeyRelease: | |
| 739 | + break; | |
| 740 | + case FocusIn: | |
| 741 | + case FocusOut: | |
| 742 | + if(altdown){ | |
| 743 | + altdown = 0; | |
| 744 | + kbdkey(Kalt, 0); | |
| 745 | + kbdkey(Kalt, 1); | |
| 746 | + kbdkey(Kalt, 0); | |
| 747 | + } | |
| 748 | + /* wet floor */ | |
| 749 | + default: | |
| 738 | 750 | return; |
| 751 | + } | |
| 739 | 752 | |
| 740 | 753 | XLookupString((XKeyEvent*)e, NULL, 0, &k, NULL); |
| 741 | 754 | |
| @@ -866,10 +879,9 @@ xkeyboard(XEvent *e) · 124 unmodified lines | ||
| 866 | 879 | /* Do control mapping ourselves if translator doesn't */ |
| 867 | 880 | if(e->xkey.state&ControlMask && k != Kalt && k != Kctl) |
| 868 | 881 | k &= 0x9f; |
| 869 | − if(k == NoSymbol) { | |
| 882 | + if(k == NoSymbol) | |
| 870 | 883 | return; |
| 871 | − } | |
| 872 | − | |
| 884 | + altdown = e->xany.type == KeyPress && k == Kalt; | |
| 873 | 885 | kbdkey(k, e->xany.type == KeyPress); |
| 874 | 886 | } |
| 875 | 887 | |