- Timestamp:
- Dec 27, 1999, 3:41:43 PM (26 years ago)
- Location:
- trunk/src/user32
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/oslibmsg.cpp
r2200 r2208 1 /* $Id: oslibmsg.cpp,v 1.1 5 1999-12-24 18:39:10sandervl Exp $ */1 /* $Id: oslibmsg.cpp,v 1.16 1999-12-27 14:41:41 sandervl Exp $ */ 2 2 /* 3 3 * Window message translation functions for OS/2 … … 13 13 * (i.e. menu WM_COMMAND messages) 14 14 * 15 * TODO: Filter translation isn't correct for posted messages 15 * TODO: Filter translation isn't correct! (for posted messages or messages that don't have 16 * a PM version. 16 17 * 17 18 */ … … 43 44 } MSGTRANSTAB, *PMSGTRANSTAB; 44 45 46 //NOTE: Must be ordered by win32 message id!! 45 47 MSGTRANSTAB MsgTransTab[] = { 46 48 WM_NULL, WINWM_NULL, 47 49 WM_CREATE, WINWM_CREATE, 48 50 WM_DESTROY, WINWM_DESTROY, 49 WM_TIMER, WINWM_TIMER, 51 WM_MOVE, WINWM_MOVE, //TODO: Sent directly 52 WM_SIZE, WINWM_SIZE, //TODO: Sent directly 53 WM_ACTIVATE, WINWM_ACTIVATE, 54 WM_SETFOCUS, WINWM_SETFOCUS, 55 WM_SETFOCUS, WINWM_KILLFOCUS, 56 WM_ENABLE, WINWM_ENABLE, 57 WM_PAINT, WINWM_PAINT, 50 58 WM_CLOSE, WINWM_CLOSE, 51 59 WM_QUIT, WINWM_QUIT, 52 53 WM_ENABLE, WINWM_ENABLE,54 60 WM_SHOW, WINWM_SHOWWINDOW, 55 WM_MOVE, WINWM_MOVE, 56 WM_SIZE, WINWM_SIZE, 57 // 61 58 62 WM_HITTEST, WINWM_NCHITTEST, 59 // 60 WM_ACTIVATE, WINWM_ACTIVATE, 61 WM_SETFOCUS, WINWM_SETFOCUS, 62 // 63 64 //TODO: Needs better translation! 65 WM_CHAR, WINWM_KEYDOWN, 66 WM_CHAR, WINWM_KEYUP, 67 WM_CHAR, WINWM_CHAR, 68 WM_CHAR, WINWM_DEADCHAR, 69 WM_CHAR, WINWM_SYSKEYDOWN, 70 WM_CHAR, WINWM_SYSKEYUP, 71 WM_CHAR, WINWM_SYSCHAR, 72 WM_CHAR, WINWM_SYSDEADCHAR, 73 WM_CHAR, WINWM_KEYLAST, 74 63 75 WM_COMMAND, WINWM_COMMAND, 64 76 WM_SYSCOMMAND, WINWM_SYSCOMMAND, 65 77 // 66 WM_PAINT, WINWM_PAINT,67 78 WM_TIMER, WINWM_TIMER, 68 // 69 WM_CLOSE, WINWM_CLOSE, 70 WM_QUIT, WINWM_QUIT, 71 // 72 WM_CONTROL, WINWM_COMMAND, 79 WM_INITMENU, WINWM_INITMENU, 73 80 // 74 81 WM_MOUSEMOVE, WINWM_MOUSEMOVE, … … 82 89 WM_BUTTON3UP, WINWM_MBUTTONUP, 83 90 WM_BUTTON3DBLCLK, WINWM_MBUTTONDBLCLK, 84 0x020a, 0x020a, // WM_???, WM_??? 85 WM_CHAR, WINWM_CHAR, 86 87 //TODO: Needs better translation! 88 WM_CHAR, WINWM_KEYDOWN, 89 WM_CHAR, WINWM_KEYUP, 90 WM_CHAR, WINWM_SYSKEYDOWN, 91 WM_CHAR, WINWM_SYSKEYUP, 92 WM_CHAR, WINWM_KEYLAST 91 92 999999999, 999999999, 93 93 }; 94 94 #define MAX_MSGTRANSTAB (sizeof(MsgTransTab)/sizeof(MsgTransTab[0])) … … 119 119 } 120 120 //****************************************************************************** 121 //TODO!!! 122 //Signal that the incoming messages in pmwindow need to be translated 123 //(i.e. PM WM_CHAR when translated generates WM_CHAR messages, otherwise 124 // WM_KEYUP/DOWN (etc)) 125 //****************************************************************************** 126 ULONG TranslateWinMsg(ULONG msg) 121 //TODO: NOT COMPLETE nor 100% CORRECT!!! 122 //If both the minimum & maximum message are unknown, the result can be wrong (max > min)! 123 //****************************************************************************** 124 ULONG TranslateWinMsg(ULONG msg, BOOL fMinFilter) 127 125 { 128 126 POSTMSG_PACKET *packet; 129 127 130 if(msg >= WINWM_USER) 131 return WIN32APP_POSTMSG; 132 133 for(int i=0;i<MAX_MSGTRANSTAB;i++) 134 { 135 if(MsgTransTab[i].msgWin32 == msg) 128 if(msg == 0) 129 return 0; 130 131 if(msg >= WINWM_USER) 132 return WIN32APP_POSTMSG; 133 134 for(int i=0;i<MAX_MSGTRANSTAB;i++) 136 135 { 137 return MsgTransTab[i].msgOS2; 136 if(fMinFilter && MsgTransTab[i].msgWin32 >= msg) { 137 return MsgTransTab[i].msgOS2; 138 } 139 else 140 if(!fMinFilter && MsgTransTab[i].msgWin32 >= msg) { 141 if(MsgTransTab[i].msgWin32 == msg) 142 return MsgTransTab[i].msgOS2; 143 else return MsgTransTab[i-1].msgOS2; 144 } 138 145 } 139 } 140 141 return 0; 146 147 return 0; 142 148 } 143 149 //****************************************************************************** … … 197 203 198 204 if(thdb->fTranslated && (!hwnd || hwnd == thdb->msgWCHAR.hwnd)) { 205 if(uMsgFilterMin) { 206 if(thdb->msgWCHAR.message < uMsgFilterMin) 207 goto continuegetmsg; 208 } 209 if(uMsgFilterMax) { 210 if(thdb->msgWCHAR.message > uMsgFilterMax) 211 goto continuegetmsg; 212 } 199 213 thdb->fTranslated = FALSE; 200 214 memcpy(pMsg, &thdb->msgWCHAR, sizeof(MSG)); … … 203 217 return TRUE; 204 218 } 219 220 continuegetmsg: 205 221 if(hwnd) { 206 222 do { 207 WinWaitMsg(thdb->hab, TranslateWinMsg(uMsgFilterMin ), TranslateWinMsg(uMsgFilterMax));223 WinWaitMsg(thdb->hab, TranslateWinMsg(uMsgFilterMin, TRUE), TranslateWinMsg(uMsgFilterMax, FALSE)); 208 224 rc = OSLibWinPeekMsg(pMsg, hwnd, uMsgFilterMin, uMsgFilterMax, PM_REMOVE_W, isUnicode); 209 225 } … … 214 230 do { 215 231 eaten = FALSE; 216 rc = WinGetMsg(thdb->hab, MsgThreadPtr, TranslateWinMsg(uMsgFilterMin ), TranslateWinMsg(uMsgFilterMax), 0);232 rc = WinGetMsg(thdb->hab, MsgThreadPtr, TranslateWinMsg(uMsgFilterMin, TRUE), TranslateWinMsg(uMsgFilterMax, FALSE), 0); 217 233 if (MsgThreadPtr->msg == WM_TIMER) 218 234 eaten = TIMER_HandleTimer (MsgThreadPtr); … … 238 254 239 255 if(thdb->fTranslated && (!hwnd || hwnd == thdb->msgWCHAR.hwnd)) { 240 if(fRemove == PM_REMOVE_W) { 256 if(uMsgFilterMin) { 257 if(thdb->msgWCHAR.message < uMsgFilterMin) 258 goto continuepeekmsg; 259 } 260 if(uMsgFilterMax) { 261 if(thdb->msgWCHAR.message > uMsgFilterMax) 262 goto continuepeekmsg; 263 } 264 265 if(fRemove & PM_REMOVE_W) { 241 266 thdb->fTranslated = FALSE; 242 267 MsgThreadPtr->msg = 0; … … 246 271 return TRUE; 247 272 } 248 273 continuepeekmsg: 249 274 do { 250 275 eaten = FALSE; 251 rc = WinPeekMsg(thdb->hab, &os2msg, Win32BaseWindow::OS2ToWin32Handle(hwnd), TranslateWinMsg(uMsgFilterMin ),252 TranslateWinMsg(uMsgFilterMax ), (fRemove ==PM_REMOVE_W) ? PM_REMOVE : PM_NOREMOVE);253 254 if (rc && fRemove == PM_REMOVE_W && os2msg.msg == WM_TIMER)276 rc = WinPeekMsg(thdb->hab, &os2msg, Win32BaseWindow::OS2ToWin32Handle(hwnd), TranslateWinMsg(uMsgFilterMin, TRUE), 277 TranslateWinMsg(uMsgFilterMax, FALSE), (fRemove & PM_REMOVE_W) ? PM_REMOVE : PM_NOREMOVE); 278 279 if (rc && (fRemove & PM_REMOVE_W) && os2msg.msg == WM_TIMER) { 255 280 eaten = TIMER_HandleTimer(&os2msg); 281 } 256 282 } 257 283 while (eaten && rc); 284 285 if(rc == FALSE) { 286 return FALSE; 287 } 258 288 259 289 OS2ToWinMsgTranslate((PVOID)thdb, &os2msg, pMsg, isUnicode); 260 290 //TODO: This is not safe! There's no guarantee this message will be dispatched and it might overwrite a previous message 261 if(fRemove ==PM_REMOVE_W) {291 if(fRemove & PM_REMOVE_W) { 262 292 memcpy(MsgThreadPtr, &os2msg, sizeof(QMSG)); 263 293 } -
trunk/src/user32/oslibmsg.h
r2200 r2208 1 /* $Id: oslibmsg.h,v 1. 7 1999-12-24 18:39:10sandervl Exp $ */1 /* $Id: oslibmsg.h,v 1.8 1999-12-27 14:41:42 sandervl Exp $ */ 2 2 /* 3 3 * Window message translation functions for OS/2 … … 12 12 #ifndef __OSLIBMSG_H__ 13 13 #define __OSLIBMSG_H__ 14 15 #define MSG_NOREMOVE 016 #define MSG_REMOVE 117 14 18 15 ULONG TranslateWinMsg(ULONG msg); -
trunk/src/user32/oslibmsgtranslate.cpp
r2204 r2208 1 /* $Id: oslibmsgtranslate.cpp,v 1. 2 1999-12-26 17:30:15 cbratschiExp $ */1 /* $Id: oslibmsgtranslate.cpp,v 1.3 1999-12-27 14:41:42 sandervl Exp $ */ 2 2 /* 3 3 * Window message translation functions for OS/2 … … 283 283 if(win32wnd->lastHitTestVal != HTCLIENT_W) { 284 284 winMsg->message = WINWM_NCLBUTTONDOWN + (os2Msg->msg - WM_BUTTON1DOWN); 285 winMsg->wParam = win32wnd->lastHitTestVal;285 winMsg->wParam = win32wnd->lastHitTestVal; 286 286 winMsg->lParam = MAKELONG(winMsg->pt.x, winMsg->pt.y); //screen coordinates 287 287 } -
trunk/src/user32/pmwindow.cpp
r2204 r2208 1 /* $Id: pmwindow.cpp,v 1.7 0 1999-12-26 17:30:16 cbratschiExp $ */1 /* $Id: pmwindow.cpp,v 1.71 1999-12-27 14:41:42 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Window Managment Code for OS/2 … … 14 14 #define INCL_DEV /* Device Function definitions */ 15 15 #define INCL_GPICONTROL /* GPI control Functions */ 16 #define INCL_DOSPROCESS 16 17 17 18 #include <os2wrap.h> -
trunk/src/user32/win32wbase.cpp
r2204 r2208 1 /* $Id: win32wbase.cpp,v 1.1 19 1999-12-26 17:30:18 cbratschiExp $ */1 /* $Id: win32wbase.cpp,v 1.120 1999-12-27 14:41:42 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Window Base Class for OS/2 … … 1018 1018 else hwndTop = (GetTopParent()) ? GetTopParent()->getWindowHandle() : 0; 1019 1019 1020 if (hwndTop && getWindowHandle() != GetActiveWindow()) 1020 HWND hwndActive = GetActiveWindow(); 1021 if (hwndTop && getWindowHandle() != hwndActive) 1021 1022 { 1022 1023 LONG ret = SendInternalMessageA(WM_MOUSEACTIVATE, hwndTop, 1023 MAKELONG( HTCLIENT, msg->message) );1024 MAKELONG( lastHitTestVal, msg->message) ); 1024 1025 1025 1026 #if 0 … … 2970 2971 hwndActive = OSLibWinQueryActiveWindow(); 2971 2972 2972 win32wnd = (Win32BaseWindow *)OSLibWinGetWindowULong(hwndActive, OFFSET_WIN32WNDPTR); 2973 magic = OSLibWinGetWindowULong(hwndActive, OFFSET_WIN32PM_MAGIC); 2974 if(CheckMagicDword(magic) && win32wnd) 2975 { 2976 return win32wnd->getWindowHandle(); 2977 } 2978 return 0; 2979 // return hwndActive; 2973 return OS2ToWin32Handle(hwndActive); 2980 2974 } 2981 2975 //****************************************************************************** -
trunk/src/user32/windowmsg.cpp
r2204 r2208 1 /* $Id: windowmsg.cpp,v 1.1 2 1999-12-26 17:30:20 cbratschiExp $ */1 /* $Id: windowmsg.cpp,v 1.13 1999-12-27 14:41:43 sandervl Exp $ */ 2 2 /* 3 3 * Win32 window message APIs for OS/2 … … 86 86 87 87 fFoundMsg = OSLibWinPeekMsg(msg, 0, uMsgFilterMin, uMsgFilterMax, 88 (fuRemoveMsg & PM_REMOVE) ? 1 : 0, FALSE);88 fuRemoveMsg, FALSE); 89 89 if(fFoundMsg) { 90 90 if (msg->message == WM_QUIT && (fuRemoveMsg & (PM_REMOVE))) {
Note:
See TracChangeset
for help on using the changeset viewer.