diff --git a/src/backend/gdi.c b/src/backend/gdi.c index b8bd10b..a4d9abb 100644 --- a/src/backend/gdi.c +++ b/src/backend/gdi.c @@ -130,13 +130,15 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { int n = wp; const int base = 'A' - 1; - if(0x00 <= n && n <= 0x1f) { + if(n <= 0x1f) { n = (n + base) | MwLLControlMask; - if(!(HIBYTE(VkKeyScan(wp)) & 1)) n += 0x20; + if(!(GetKeyState(VK_LSHIFT) || GetKeyState(VK_RSHIFT))) n += 0x20; } if(HIBYTE(VkKeyScan(wp)) & 2) n |= MwLLControlMask; if(msg == WM_SYSCHAR) n |= MwLLAltMask; + printf("%c\n", n & 0xff); + if((0x20 <= n && n <= 0x7f) || (n & MwLLKeyMask)) MwLLDispatch(u->ll, key, &n); } else if(msg == WM_SETFOCUS) { MwLLDispatch(u->ll, focus_in, NULL); diff --git a/src/backend/x11.c b/src/backend/x11.c index a23b6d8..978fb82 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -369,7 +369,7 @@ void MwLLNextEvent(MwLL handle) { if(strlen(str) == 1) { char s = str[0]; - if(ev.xkey.state & (ShiftMask | LockMask)) { + if(ev.xkey.state & (ShiftMask | LockMask) && !(ev.xkey.state & (ControlMask | Mod1Mask))) { n = toupper((int)s); } else { n = s; @@ -392,6 +392,17 @@ void MwLLNextEvent(MwLL handle) { n = MwLLKeyLeftShift; } else if(strcmp(str, "Shift_R") == 0) { n = MwLLKeyRightShift; + } else if(strcmp(str, "Alt_L") == 0 || strcmp(str, "Alt_R") == 0){ + n = MwLLKeyAlt; + } else if(strcmp(str, "Control_R") == 0 || strcmp(str, "Control_R") == 0){ + n = MwLLKeyControl; + } + + if(n != MwLLKeyControl && ev.xkey.state & ControlMask){ + n |= MwLLControlMask; + } + if(n != MwLLKeyAlt && ev.xkey.state & Mod1Mask){ + n |= MwLLAltMask; } if(n != -1) { diff --git a/src/widget/entry.c b/src/widget/entry.c index fb848d3..3a9c327 100644 --- a/src/widget/entry.c +++ b/src/widget/entry.c @@ -106,6 +106,7 @@ static void key(MwWidget handle, int code) { t->cursor++; } else if(code == MwLLKeyEnter) { MwDispatchUserHandler(handle, MwNactivateHandler, NULL); + } else if(code == (MwLLControlMask | 'v')){ } else if(!(code & MwLLKeyMask)) { int incr = 0; out = malloc(strlen(str) + 5 + 1);