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);