Changeset 2208 for trunk/src


Ignore:
Timestamp:
Dec 27, 1999, 3:41:43 PM (26 years ago)
Author:
sandervl
Message:

Lots of message fixes

Location:
trunk/src/user32
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/oslibmsg.cpp

    r2200 r2208  
    1 /* $Id: oslibmsg.cpp,v 1.15 1999-12-24 18:39:10 sandervl Exp $ */
     1/* $Id: oslibmsg.cpp,v 1.16 1999-12-27 14:41:41 sandervl Exp $ */
    22/*
    33 * Window message translation functions for OS/2
     
    1313 *       (i.e. menu WM_COMMAND messages)
    1414 *
    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.
    1617 *
    1718 */
     
    4344} MSGTRANSTAB, *PMSGTRANSTAB;
    4445
     46//NOTE: Must be ordered by win32 message id!!
    4547MSGTRANSTAB MsgTransTab[] = {
    4648   WM_NULL,          WINWM_NULL,
    4749   WM_CREATE,        WINWM_CREATE,
    4850   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,
    5058   WM_CLOSE,         WINWM_CLOSE,
    5159   WM_QUIT,          WINWM_QUIT,
    52 
    53    WM_ENABLE,        WINWM_ENABLE,
    5460   WM_SHOW,          WINWM_SHOWWINDOW,
    55    WM_MOVE,          WINWM_MOVE,
    56    WM_SIZE,          WINWM_SIZE,
    57    //
     61
    5862   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
    6375   WM_COMMAND,       WINWM_COMMAND,
    6476   WM_SYSCOMMAND,    WINWM_SYSCOMMAND,
    6577   //
    66    WM_PAINT,         WINWM_PAINT,
    6778   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,
    7380   //
    7481   WM_MOUSEMOVE,     WINWM_MOUSEMOVE,
     
    8289   WM_BUTTON3UP,     WINWM_MBUTTONUP,
    8390   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,
    9393};
    9494#define MAX_MSGTRANSTAB (sizeof(MsgTransTab)/sizeof(MsgTransTab[0]))
     
    119119}
    120120//******************************************************************************
    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//******************************************************************************
     124ULONG TranslateWinMsg(ULONG msg, BOOL fMinFilter)
    127125{
    128126 POSTMSG_PACKET *packet;
    129127
    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++)
    136135    {
    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        }
    138145    }
    139   }
    140 
    141   return 0;
     146
     147    return 0;
    142148}
    143149//******************************************************************************
     
    197203
    198204  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        }
    199213        thdb->fTranslated = FALSE;
    200214        memcpy(pMsg, &thdb->msgWCHAR, sizeof(MSG));
     
    203217        return TRUE;
    204218  }
     219
     220continuegetmsg:
    205221  if(hwnd) {
    206222        do {
    207             WinWaitMsg(thdb->hab, TranslateWinMsg(uMsgFilterMin), TranslateWinMsg(uMsgFilterMax));
     223            WinWaitMsg(thdb->hab, TranslateWinMsg(uMsgFilterMin, TRUE), TranslateWinMsg(uMsgFilterMax, FALSE));
    208224            rc = OSLibWinPeekMsg(pMsg, hwnd, uMsgFilterMin, uMsgFilterMax, PM_REMOVE_W, isUnicode);
    209225        }
     
    214230    do {
    215231        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);
    217233        if (MsgThreadPtr->msg == WM_TIMER)
    218234            eaten = TIMER_HandleTimer (MsgThreadPtr);
     
    238254
    239255  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) {
    241266            thdb->fTranslated = FALSE;
    242267            MsgThreadPtr->msg  = 0;
     
    246271        return TRUE;
    247272  }
    248 
     273continuepeekmsg:
    249274  do {
    250275        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) {
    255280            eaten = TIMER_HandleTimer(&os2msg);
     281        }
    256282  }
    257283  while (eaten && rc);
     284
     285  if(rc == FALSE) {
     286    return FALSE;
     287  }
    258288
    259289  OS2ToWinMsgTranslate((PVOID)thdb, &os2msg, pMsg, isUnicode);
    260290  //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) {
    262292        memcpy(MsgThreadPtr, &os2msg, sizeof(QMSG));
    263293  }
  • trunk/src/user32/oslibmsg.h

    r2200 r2208  
    1 /* $Id: oslibmsg.h,v 1.7 1999-12-24 18:39:10 sandervl Exp $ */
     1/* $Id: oslibmsg.h,v 1.8 1999-12-27 14:41:42 sandervl Exp $ */
    22/*
    33 * Window message translation functions for OS/2
     
    1212#ifndef __OSLIBMSG_H__
    1313#define __OSLIBMSG_H__
    14 
    15 #define MSG_NOREMOVE  0
    16 #define MSG_REMOVE    1
    1714
    1815ULONG TranslateWinMsg(ULONG msg);
  • trunk/src/user32/oslibmsgtranslate.cpp

    r2204 r2208  
    1 /* $Id: oslibmsgtranslate.cpp,v 1.2 1999-12-26 17:30:15 cbratschi Exp $ */
     1/* $Id: oslibmsgtranslate.cpp,v 1.3 1999-12-27 14:41:42 sandervl Exp $ */
    22/*
    33 * Window message translation functions for OS/2
     
    283283        if(win32wnd->lastHitTestVal != HTCLIENT_W) {
    284284            winMsg->message = WINWM_NCLBUTTONDOWN + (os2Msg->msg - WM_BUTTON1DOWN);
    285             winMsg->wParam = win32wnd->lastHitTestVal;
     285            winMsg->wParam  = win32wnd->lastHitTestVal;
    286286            winMsg->lParam  = MAKELONG(winMsg->pt.x, winMsg->pt.y); //screen coordinates
    287287        }
  • trunk/src/user32/pmwindow.cpp

    r2204 r2208  
    1 /* $Id: pmwindow.cpp,v 1.70 1999-12-26 17:30:16 cbratschi Exp $ */
     1/* $Id: pmwindow.cpp,v 1.71 1999-12-27 14:41:42 sandervl Exp $ */
    22/*
    33 * Win32 Window Managment Code for OS/2
     
    1414#define INCL_DEV                /* Device Function definitions  */
    1515#define INCL_GPICONTROL         /* GPI control Functions        */
     16#define INCL_DOSPROCESS
    1617
    1718#include <os2wrap.h>
  • trunk/src/user32/win32wbase.cpp

    r2204 r2208  
    1 /* $Id: win32wbase.cpp,v 1.119 1999-12-26 17:30:18 cbratschi Exp $ */
     1/* $Id: win32wbase.cpp,v 1.120 1999-12-27 14:41:42 sandervl Exp $ */
    22/*
    33 * Win32 Window Base Class for OS/2
     
    10181018        else    hwndTop = (GetTopParent()) ? GetTopParent()->getWindowHandle() : 0;
    10191019
    1020         if (hwndTop && getWindowHandle() != GetActiveWindow())
     1020        HWND hwndActive = GetActiveWindow();
     1021        if (hwndTop && getWindowHandle() != hwndActive)
    10211022        {
    10221023                LONG ret = SendInternalMessageA(WM_MOUSEACTIVATE, hwndTop,
    1023                                                 MAKELONG( HTCLIENT, msg->message) );
     1024                                                MAKELONG( lastHitTestVal, msg->message) );
    10241025
    10251026#if 0
     
    29702971  hwndActive = OSLibWinQueryActiveWindow();
    29712972
    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);
    29802974}
    29812975//******************************************************************************
  • trunk/src/user32/windowmsg.cpp

    r2204 r2208  
    1 /* $Id: windowmsg.cpp,v 1.12 1999-12-26 17:30:20 cbratschi Exp $ */
     1/* $Id: windowmsg.cpp,v 1.13 1999-12-27 14:41:43 sandervl Exp $ */
    22/*
    33 * Win32 window message APIs for OS/2
     
    8686
    8787    fFoundMsg = OSLibWinPeekMsg(msg, 0, uMsgFilterMin, uMsgFilterMax,
    88                                 (fuRemoveMsg & PM_REMOVE) ? 1 : 0, FALSE);
     88                                fuRemoveMsg, FALSE);
    8989    if(fFoundMsg) {
    9090        if (msg->message == WM_QUIT && (fuRemoveMsg & (PM_REMOVE))) {
Note: See TracChangeset for help on using the changeset viewer.