Changeset 2208 for trunk/src/user32/oslibmsg.cpp
- Timestamp:
- Dec 27, 1999, 3:41:43 PM (26 years ago)
- File:
-
- 1 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 }
Note:
See TracChangeset
for help on using the changeset viewer.