Ignore:
Timestamp:
Jun 18, 2009, 12:04:13 PM (16 years ago)
Author:
ydario
Message:

User32 updates.

File:
1 edited

Legend:

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

    r10607 r21303  
    1515 *
    1616 */
    17 #define  INCL_NLS
    18 #define  INCL_GPI
    1917#define  INCL_WIN
    2018#define  INCL_PM
     
    4442#include "user32api.h"
    4543
    46 #include <os2im.h>
    47 #include <im32.h>
    4844
    4945#define DBG_LOCALLOG    DBG_oslibmsgtranslate
     
    5248static BOOL fGenerateDoubleClick = FALSE;
    5349static MSG  doubleClickMsg = {0};
    54 
    55 extern UINT WINAPI GetACP(void); // from winnls.h
    5650
    5751//For wheel mouse translation
     
    759753        if( scanCode != 0 )
    760754        {
    761             switch( SHORT2FROMMP( os2Msg->mp2 ))
    762             {
    763                 // for Korean
    764                 case VK_DBE_HANJA :
    765                     bWinVKey = 0x19;
    766                     break;
    767 
    768                 case VK_DBE_HANGEUL :
    769                     bWinVKey = 0x15;
    770                     break;
    771 
    772                 case VK_DBE_JAMO :
    773                     bWinVKey = 0;
    774                     break;
    775 
    776                 // for Japan
    777                 case VK_DBE_KATAKANA :
    778                     bWinVKey = 0;
    779                     break;
    780 
    781                 case VK_DBE_HIRAGANA :
    782                     bWinVKey = 0;
    783                     break;
    784 
    785                 case VK_DBE_SBCSCHAR :
    786                     bWinVKey = 0;
    787                     break;
    788 
    789                 case VK_DBE_DBCSCHAR :
    790                     bWinVKey = 0;
    791                     break;
    792 
    793                 case VK_DBE_SBCSDBCSCHAR :
    794                     bWinVKey = 0;
    795                     break;
    796 
    797                 case VK_DBE_ROMAN :
    798                     bWinVKey = 0;
    799                     break;
    800 
    801                 // for PRC-Chinese
    802                 case VK_DBE_HANZI :
    803                     bWinVKey = 0;
    804                     break;
    805 
    806                 // for Taiwan
    807                 case VK_DBE_TSANGJYE :
    808                     bWinVKey = 0;
    809                     break;
    810 
    811                 case VK_DBE_PHONETIC :
    812                     bWinVKey = 0;
    813                     break;
    814 
    815                 case VK_DBE_CONV :
    816                     bWinVKey = 0;
    817                     break;
    818 
    819                 case VK_DBE_NOCONV :
    820                     bWinVKey = 0;
    821                     break;
    822 
    823                 case VK_DBE_ALPHANUMERIC :
    824                     switch( GetACP())
    825                     {
    826                         case 949 :  // Korea
    827                         case 1361 :
    828                             bWinVKey = 0x15;
    829                             break;
    830 
    831                         case 932 :  // Japan
    832                         case 942 :
    833                         case 943 :
    834 
    835                         case 936 :  // PRC
    836                         case 1381 :
    837 
    838                         case 950 :  // Taiwan
    839                         default :
    840                             bWinVKey = 0;
    841                     }
    842                     break;
    843 
    844                 default :
    845755                    KeyTranslatePMScanToWinVKey(usPMScanCode,
    846756                                                FALSE,
     
    848758                                                &wWinScan,
    849759                                                &fWinExtended);
    850             }
    851 
    852760            winMsg->wParam = bWinVKey;
    853761        }
     
    11041012    case WM_RENDERFMT:
    11051013        winMsg->message = WINWM_RENDERFORMAT;
    1106         winMsg->wParam  = (UINT) os2Msg->mp1;
     1014        extern UINT WIN32API clipboardPMToOdinFormat(ULONG ulPMFormat);
     1015        winMsg->wParam  = (UINT)clipboardPMToOdinFormat((ULONG)os2Msg->mp1);
     1016        if (!winMsg->wParam)
     1017        {
     1018            dprintf(("WM_RENDERFMT: failed to convert clipboard format (%d)!!!\n", os2Msg->mp1));
     1019            DebugInt3();
     1020        }
    11071021        break;
    11081022
     
    11651079        break;
    11661080
    1167     case WM_IMENOTIFY:
    1168         dprintf(("WM_IMENOTIFY"));
    1169 
    1170         winMsg->wParam = 0;
    1171         winMsg->lParam = 0;
    1172 
    1173         switch(( ULONG )os2Msg->mp1 )
    1174         {
    1175             case IMN_STARTCONVERSION :
    1176                 winMsg->message = WM_IME_STARTCOMPOSITION_W;
    1177                 break;
    1178 
    1179             case IMN_ENDCONVERSION :
    1180                 winMsg->message = WM_IME_ENDCOMPOSITION_W;
    1181                 break;
    1182 
    1183             case IMN_CONVERSIONFULL :
    1184                 winMsg->message = WM_IME_COMPOSITIONFULL_W;
    1185                 break;
    1186 
    1187             case IMN_IMECHANGED :
    1188                 winMsg->message = WM_IME_SELECT_W;
    1189                 // todo
    1190                 // fall through
    1191 
    1192             default :
    1193                 goto dummymessage;
    1194 
    1195         }
    1196         break;
    1197 
    1198     case WM_IMEREQUEST:
    1199         winMsg->wParam = 0;
    1200         winMsg->lParam = 0;
    1201 
    1202         switch(( ULONG )os2Msg->mp1 )
    1203         {
    1204             case IMR_INSTANCEACTIVATE :
    1205             {
    1206                 USHORT usIMR_IA = LOUSHORT( os2Msg->mp2 );
    1207 
    1208                 winMsg->message = WM_IME_SETCONTEXT_W;
    1209                 winMsg->wParam = HIUSHORT( os2Msg->mp2 );
    1210 
    1211                 if( usIMR_IA & IMR_IA_STATUS )
    1212                     winMsg->lParam |= ISC_SHOWUIGUIDELINE_W;
    1213 
    1214                 if( usIMR_IA & IMR_IA_CONVERSION )
    1215                     winMsg->lParam |= ISC_SHOWUICOMPOSITIONWINDOW_W;
    1216 
    1217                 if( usIMR_IA & IMR_IA_CANDIDATE )
    1218                     winMsg->lParam |= ISC_SHOWUIALLCANDIDATEWINDOW_W;
    1219 
    1220                 if( usIMR_IA & IMR_IA_INFOMSG )
    1221                     winMsg->lParam |= 0; // todo
    1222 
    1223                 if( usIMR_IA & IMR_IA_REGWORD )
    1224                     winMsg->lParam |= 0; // todo
    1225                 break;
    1226             }
    1227 
    1228             case IMR_STATUS :
    1229                 winMsg->message = WM_IME_NOTIFY_W;
    1230 
    1231                 switch(( ULONG )os2Msg->mp2 )
    1232                 {
    1233                     case IMR_STATUS_SHOW :
    1234                         winMsg->wParam = IMN_OPENSTATUSWINDOW_W;
    1235                         break;
    1236 
    1237                     case IMR_STATUS_HIDE :
    1238                         winMsg->wParam = IMN_CLOSESTATUSWINDOW_W;
    1239                         break;
    1240 
    1241                     case IMR_STATUS_INPUTMODE : // IMN_SETOPENSTATUS followed by IMN_SETCONVERSIONMODE
    1242                         winMsg->wParam = IMN_SETOPENSTATUS_W;
    1243                         break;
    1244 
    1245                     case IMR_STATUS_CONVERSIONMODE :
    1246                         winMsg->wParam = IMN_SETSENTENCEMODE_W;
    1247                         break;
    1248 
    1249                     case IMR_STATUS_STATUSPOS :
    1250                         winMsg->wParam = IMN_SETSTATUSWINDOWPOS_W;
    1251                         break;
    1252 
    1253                     case IMR_STATUS_STRING :
    1254                     case IMR_STATUS_STRINGATTR :
    1255                     case IMR_STATUS_CURSORPOS :
    1256                     case IMR_STATUS_CURSORATTR :
    1257 
    1258                     default :
    1259                         // todo
    1260                         goto dummymessage;
    1261 
    1262                 }
    1263                 break;
    1264 
    1265             case IMR_CONVRESULT :
    1266             {
    1267                 ULONG ulIMR = ( ULONG )os2Msg->mp2;
    1268 
    1269                 winMsg->message = WM_IME_COMPOSITION_W;
    1270                 winMsg->wParam = 0; // todo : current DBCS char
    1271 
    1272                 if( ulIMR & IMR_CONV_CONVERSIONSTRING )
    1273                     winMsg->lParam |= GCS_COMPSTR_W;
    1274 
    1275                 if( ulIMR & IMR_CONV_CONVERSIONATTR )
    1276                     winMsg->lParam |= GCS_COMPATTR_W;
    1277 
    1278                 if( ulIMR & IMR_CONV_CONVERSIONCLAUSE )
    1279                     winMsg->lParam |= GCS_COMPCLAUSE_W;
    1280 
    1281                 if( ulIMR & IMR_CONV_READINGSTRING )
    1282                     winMsg->lParam |= GCS_COMPREADSTR_W;
    1283 
    1284                 if( ulIMR & IMR_CONV_READINGATTR )
    1285                     winMsg->lParam |= GCS_COMPREADATTR_W;
    1286 
    1287                 if( ulIMR & IMR_CONV_READINGCLAUSE )
    1288                     winMsg->lParam |= GCS_COMPREADCLAUSE_W;
    1289 
    1290                 if( ulIMR & IMR_CONV_CURSORPOS )
    1291                     winMsg->lParam |= GCS_CURSORPOS_W;
    1292 
    1293                 if( ulIMR & IMR_CONV_CURSORATTR )
    1294                     winMsg->lParam |= 0; // todo
    1295 
    1296                 if( ulIMR & IMR_CONV_CHANGESTART )
    1297                     winMsg->lParam |= GCS_DELTASTART_W;
    1298 
    1299                 if( ulIMR & IMR_CONV_INSERTCHAR )
    1300                     winMsg->lParam |= CS_INSERTCHAR_W;
    1301 
    1302                 if( ulIMR & IMR_CONV_NOMOVECARET )
    1303                     winMsg->lParam |= CS_NOMOVECARET_W;
    1304 
    1305                 if( ulIMR & IMR_CONV_CONVERSIONFONT )
    1306                     winMsg->lParam |= 0; // todo
    1307 
    1308                 if( ulIMR & IMR_CONV_CONVERSIONPOS )
    1309                     winMsg->lParam |= 0; // todo
    1310 
    1311                 if( ulIMR & IMR_RESULT_RESULTSTRING )
    1312                     winMsg->lParam = GCS_RESULTSTR_W; // clear all composition info
    1313 
    1314                 if( ulIMR & IMR_RESULT_RESULTATTR )
    1315                     winMsg->lParam |= 0; // todo
    1316 
    1317                 if( ulIMR & IMR_RESULT_RESULTCLAUSE )
    1318                     winMsg->lParam |= GCS_RESULTCLAUSE_W;
    1319 
    1320                 if( ulIMR & IMR_RESULT_READINGSTRING )
    1321                     winMsg->lParam |= GCS_RESULTREADSTR_W;
    1322 
    1323                 if( ulIMR & IMR_RESULT_READINGATTR )
    1324                     winMsg->lParam |= 0; // todo
    1325 
    1326                 if( ulIMR & IMR_RESULT_READINGCLAUSE )
    1327                     winMsg->lParam |= GCS_RESULTREADCLAUSE_W;
    1328 
    1329                 if( ulIMR && ( winMsg->lParam == 0 ))
    1330                     goto dummymessage;
    1331                 break;
    1332             }
    1333 
    1334             case IMR_CANDIDATE :
    1335                 winMsg->message = WM_IME_NOTIFY_W;
    1336                 switch(( ULONG )os2Msg->mp2 )
    1337                 {
    1338                     case IMR_CANDIDATE_SHOW :
    1339                     case IMR_CANDIDATE_HIDE :
    1340                     case IMR_CANDIDATE_SELECT :
    1341                     case IMR_CANDIDATE_CHANGE :
    1342                     case IMR_CANDIDATE_CANDIDATEPOS :
    1343                     default :
    1344                         // todo
    1345                         goto dummymessage;
    1346                 }
    1347                 break;
    1348 
    1349             case IMR_INFOMSG :
    1350                 winMsg->message = WM_IME_NOTIFY_W;
    1351                 winMsg->wParam = IMN_GUIDELINE_W;
    1352                 break;
    1353 
    1354             case IMR_REGWORD :
    1355                 goto dummymessage;
    1356 
    1357             case IMR_IMECHANGE :
    1358                 winMsg->message = WM_IME_SELECT_W;
    1359                 // todo
    1360                 goto dummymessage;
    1361 
    1362             case IMR_CONFIG :
    1363                 // todo
    1364                 goto dummymessage;
    1365 
    1366             case IMR_DICTIONARY :
    1367                 // todo
    1368                 goto dummymessage;
    1369 
    1370             case IMR_OTHERINFO :
    1371                 // todo
    1372                 goto dummymessage;
    1373         }
    1374         break;
    1375 
    1376 #if 0 // application cannot receive this message
    1377     case WM_IMECONTROL:
    1378 #endif
    13791081    case WM_INITMENU:
    13801082    case WM_MENUSELECT:
Note: See TracChangeset for help on using the changeset viewer.