Ignore:
Timestamp:
Dec 15, 2011, 11:24:47 AM (14 years ago)
Author:
dmik
Message:

Fix crashes in GUI apps when pressing modifier keys.

This was due the fact that BYTE is signed in the toolkit and converting it
to an unsigned int causes the sign bit to be extended in the result while
the code assumes that the extension is made with zeroes (this is how
VAC converts signed integers of smaller precisions to unsigned ones).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/gcc-kmk/src/user32/oslibmsgtranslate.cpp

    r21811 r21885  
    9595{
    9696 ULONG ret;
    97  BYTE winKey;
     97 UCHAR winKey;
    9898
    9999  switch (pmScan)
     
    113113  }
    114114
    115   KeyTranslatePMScanToWinVKey(ret, FALSE, (PBYTE)&winKey, NULL, NULL);
     115  KeyTranslatePMScanToWinVKey(ret, FALSE, &winKey, NULL, NULL);
    116116  return winKey;
    117117
     
    760760
    761761        BOOL  fWinExtended;
    762         BYTE  bWinVKey;
     762        UCHAR uchWinVKey;
    763763        WORD  wWinScan;
    764764
     
    775775                // for Korean
    776776                case VK_DBE_HANJA :
    777                     bWinVKey = 0x19;
     777                    uchWinVKey = 0x19;
    778778                    break;
    779779
    780780                case VK_DBE_HANGEUL :
    781                     bWinVKey = 0x15;
     781                    uchWinVKey = 0x15;
    782782                    break;
    783783
    784784                case VK_DBE_JAMO :
    785                     bWinVKey = 0;
     785                    uchWinVKey = 0;
    786786                    break;
    787787
    788788                // for Japan
    789789                case VK_DBE_KATAKANA :
    790                     bWinVKey = 0;
     790                    uchWinVKey = 0;
    791791                    break;
    792792
    793793                case VK_DBE_HIRAGANA :
    794                     bWinVKey = 0;
     794                    uchWinVKey = 0;
    795795                    break;
    796796
    797797                case VK_DBE_SBCSCHAR :
    798                     bWinVKey = 0;
     798                    uchWinVKey = 0;
    799799                    break;
    800800
    801801                case VK_DBE_DBCSCHAR :
    802                     bWinVKey = 0;
     802                    uchWinVKey = 0;
    803803                    break;
    804804
    805805                case VK_DBE_SBCSDBCSCHAR :
    806                     bWinVKey = 0;
     806                    uchWinVKey = 0;
    807807                    break;
    808808
    809809                case VK_DBE_ROMAN :
    810                     bWinVKey = 0;
     810                    uchWinVKey = 0;
    811811                    break;
    812812
    813813                // for PRC-Chinese
    814814                case VK_DBE_HANZI :
    815                     bWinVKey = 0;
     815                    uchWinVKey = 0;
    816816                    break;
    817817
    818818                // for Taiwan
    819819                case VK_DBE_TSANGJYE :
    820                     bWinVKey = 0;
     820                    uchWinVKey = 0;
    821821                    break;
    822822
    823823                case VK_DBE_PHONETIC :
    824                     bWinVKey = 0;
     824                    uchWinVKey = 0;
    825825                    break;
    826826
    827827                case VK_DBE_CONV :
    828                     bWinVKey = 0;
     828                    uchWinVKey = 0;
    829829                    break;
    830830
    831831                case VK_DBE_NOCONV :
    832                     bWinVKey = 0;
     832                    uchWinVKey = 0;
    833833                    break;
    834834
     
    838838                        case 949 :  // Korea
    839839                        case 1361 :
    840                             bWinVKey = 0x15;
     840                            uchWinVKey = 0x15;
    841841                            break;
    842842
     
    850850                        case 950 :  // Taiwan
    851851                        default :
    852                             bWinVKey = 0;
     852                            uchWinVKey = 0;
    853853                    }
    854854                    break;
     
    857857                    KeyTranslatePMScanToWinVKey(usPMScanCode,
    858858                                                FALSE,
    859                                                 &bWinVKey,
     859                                                &uchWinVKey,
    860860                                                &wWinScan,
    861861                                                &fWinExtended);
    862862            }
    863863
    864             winMsg->wParam = bWinVKey;
     864            winMsg->wParam = uchWinVKey;
    865865        }
    866866        else
Note: See TracChangeset for help on using the changeset viewer.