Mercurial > dwindows
diff os2/dw.c @ 267:bf8b907f8a29
Added initial version of updated key_press_event callback.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 03 Mar 2003 19:50:19 +0000 |
parents | 9ea4ac9a097f |
children | dfbda83b7cad |
line wrap: on
line diff
--- a/os2/dw.c Fri Feb 28 01:32:32 2003 +0000 +++ b/os2/dw.c Mon Mar 03 19:50:19 2003 +0000 @@ -2062,11 +2062,33 @@ break; case WM_CHAR: { - int (* API keypressfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction; - - if(hWnd == tmp->window) + int (* API keypressfunc)(HWND, char, int, int, void *) = (int (* API)(HWND, char, int, int, void *))tmp->signalfunction; + + if(hWnd == tmp->window && !(SHORT1FROMMP(mp1) & KC_KEYUP)) { - result = keypressfunc(tmp->window, SHORT1FROMMP(mp2), tmp->data); + int vk; + char ch; + + if(SHORT1FROMMP(mp1) & KC_CHAR) + ch = (char)SHORT1FROMMP(mp2); + else + ch = (char)SHORT2FROMMP(mp2); + if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) + vk = SHORT2FROMMP(mp2); + else + vk = SHORT1FROMMP(mp2); + + /* This is a hack to fix shift presses showing + * up as tabs! + */ + if(ch == '\t' && !(SHORT1FROMMP(mp1) & KC_CHAR)) + { + ch = 0; + vk = VK_SHIFT; + } + + result = keypressfunc(tmp->window, ch, vk, + SHORT1FROMMP(mp1) & (KC_ALT | KC_SHIFT | KC_CTRL), tmp->data); tmp = NULL; } } @@ -3043,7 +3065,9 @@ case WM_BUTTON1DOWN: case WM_BUTTON2DOWN: case WM_BUTTON3DOWN: - if(res) + if(res == -1) + WinSetFocus(HWND_DESKTOP, hwnd); + else if(res) return (MPARAM)TRUE; } return WinDefWindowProc(hwnd, msg, mp1, mp2);