Ignore:
Timestamp:
Mar 4, 2003, 4:57:35 PM (22 years ago)
Author:
sandervl
Message:

PF: We did not pay attention to numlock state on numpad keyboard.

File:
1 edited

Legend:

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

    r9814 r9897  
    1 /* $Id: oslibmsgtranslate.cpp,v 1.102 2003-02-16 18:29:26 sandervl Exp $ */
     1/* $Id: oslibmsgtranslate.cpp,v 1.103 2003-03-04 15:57:35 sandervl Exp $ */
    22/*
    33 * Window message translation functions for OS/2
     
    6969//******************************************************************************
    7070//******************************************************************************
     71ULONG ConvertNumPadKey(ULONG pmScan)
     72{
     73 ULONG ret;
     74 BYTE winKey;
     75
     76  switch (pmScan)
     77  {
     78   case PMSCAN_PAD7: ret = PMSCAN_HOME; break;
     79   case PMSCAN_PAD8: ret = PMSCAN_UP; break;
     80   case PMSCAN_PAD9: ret = PMSCAN_PAGEUP; break;
     81   case PMSCAN_PAD4: ret = PMSCAN_LEFT; break;
     82   case PMSCAN_PAD6: ret = PMSCAN_RIGHT; break;
     83   case PMSCAN_PAD1: ret = PMSCAN_END; break;
     84   case PMSCAN_PAD2: ret = PMSCAN_DOWN; break;
     85   case PMSCAN_PAD3: ret = PMSCAN_PAGEDOWN; break;
     86   case PMSCAN_PAD0: ret = PMSCAN_INSERT; break;
     87   case PMSCAN_PADPERIOD: ret = PMSCAN_DELETE; break;
     88   default:
     89           ret = pmScan;
     90  }
     91 
     92  KeyTranslatePMScanToWinVKey(ret, FALSE, (PBYTE)&winKey, NULL, NULL);
     93  return winKey;
     94
     95}
     96//******************************************************************************
     97//******************************************************************************
    7198ULONG GetMouseKeyState()
    7299{
     
    630657      ULONG  flags = SHORT1FROMMP(os2Msg->mp1);
    631658      BOOL   keyWasPressed;
     659      BOOL   numPressed = (BOOL)(WinGetKeyState(HWND_DESKTOP,VK_NUMLOCK) & 1);       
    632660      char   c;
    633661      USHORT usPMScanCode = CHAR4FROMMP(os2Msg->mp1);
     
    638666        keyWasPressed = ((SHORT1FROMMP (os2Msg->mp1) & KC_PREVDOWN) == KC_PREVDOWN);
    639667
    640         dprintf(("PM: WM_CHAR: %x %x rep=%d scancode=%x", SHORT1FROMMP(os2Msg->mp2), SHORT2FROMMP(os2Msg->mp2), repeatCount, scanCode));
     668        dprintf(("PM: WM_CHAR: %x %x rep=%d scancode=%x num=%d", SHORT1FROMMP(os2Msg->mp2), SHORT2FROMMP(os2Msg->mp2), repeatCount, scanCode, numPressed));
    641669        dprintf(("PM: WM_CHAR: hwnd %x flags %x mp1 %x, mp2 %x, time=%08xh", win32wnd->getWindowHandle(), flags, os2Msg->mp1, os2Msg->mp2, os2Msg->time));
    642        
     670
    643671        BOOL  fWinExtended;
    644672        BYTE  bWinVKey;
     
    647675        if (scanCode==0) goto dummymessage;
    648676
    649         // Note: Numlock-state currently ignored, see below
    650677        KeyTranslatePMScanToWinVKey(usPMScanCode,
    651678                                    FALSE,
     
    661688            winMsg->lParam = winMsg->lParam | WIN_KEY_EXTENDED;
    662689
    663 #if 0
    664 //TODO
    665         // Adjust VKEY value for pad digits if NumLock is on
    666         if ((scanCode >= 0x47) && (scanCode <= 0x53) &&
    667             (virtualKey >= 0x30) && (virtualKey >= 39))
    668             winMsg->wParam = virtualKey + 0x30;
    669 #endif
    670 
     690        if (!numPressed && (scanCode >= PMSCAN_PAD7) && (scanCode <= PMSCAN_PADPERIOD))
     691             winMsg->wParam = ConvertNumPadKey(scanCode);
    671692
    672693        //@PF This looks ugly but this is just what we have in win32 both in win98/win2k
     
    10521073      //be combined with the previous dead key, so we must use the scancode
    10531074      //(e.g. ^ on german keyboards)
    1054       if(fl & (KC_VIRTUALKEY|KC_COMPOSITE) == KC_VIRTUALKEY)
     1075      if((fl & (KC_VIRTUALKEY|KC_COMPOSITE)) == KC_VIRTUALKEY)
    10551076      {
    10561077        if(msg->wParam)
Note: See TracChangeset for help on using the changeset viewer.