Ignore:
Timestamp:
Jun 18, 2009, 6:27:45 PM (16 years ago)
Author:
ydario
Message:

Minor updates, backout imm changes.

File:
1 edited

Legend:

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

    r21303 r21308  
    1515 *
    1616 */
     17#define  INCL_NLS
     18#define  INCL_GPI
    1719#define  INCL_WIN
    1820#define  INCL_PM
     
    4244#include "user32api.h"
    4345
     46#include <os2im.h>
     47#include <im32.h>
    4448
    4549#define DBG_LOCALLOG    DBG_oslibmsgtranslate
     
    4852static BOOL fGenerateDoubleClick = FALSE;
    4953static MSG  doubleClickMsg = {0};
     54
     55extern UINT WINAPI GetACP(void); // from winnls.h
    5056
    5157//For wheel mouse translation
     
    753759        if( scanCode != 0 )
    754760        {
     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 :
    755845                    KeyTranslatePMScanToWinVKey(usPMScanCode,
    756846                                                FALSE,
     
    758848                                                &wWinScan,
    759849                                                &fWinExtended);
     850            }
     851
    760852            winMsg->wParam = bWinVKey;
    761853        }
     
    10791171        break;
    10801172
     1173    case WM_IMENOTIFY:
     1174        dprintf(("WM_IMENOTIFY"));
     1175
     1176        winMsg->wParam = 0;
     1177        winMsg->lParam = 0;
     1178
     1179        switch(( ULONG )os2Msg->mp1 )
     1180        {
     1181            case IMN_STARTCONVERSION :
     1182                winMsg->message = WM_IME_STARTCOMPOSITION_W;
     1183                break;
     1184
     1185            case IMN_ENDCONVERSION :
     1186                winMsg->message = WM_IME_ENDCOMPOSITION_W;
     1187                break;
     1188
     1189            case IMN_CONVERSIONFULL :
     1190                winMsg->message = WM_IME_COMPOSITIONFULL_W;
     1191                break;
     1192
     1193            case IMN_IMECHANGED :
     1194                winMsg->message = WM_IME_SELECT_W;
     1195                // todo
     1196                // fall through
     1197
     1198            default :
     1199                goto dummymessage;
     1200
     1201        }
     1202        break;
     1203
     1204    case WM_IMEREQUEST:
     1205        winMsg->wParam = 0;
     1206        winMsg->lParam = 0;
     1207
     1208        switch(( ULONG )os2Msg->mp1 )
     1209        {
     1210            case IMR_INSTANCEACTIVATE :
     1211            {
     1212                USHORT usIMR_IA = LOUSHORT( os2Msg->mp2 );
     1213
     1214                winMsg->message = WM_IME_SETCONTEXT_W;
     1215                winMsg->wParam = HIUSHORT( os2Msg->mp2 );
     1216
     1217                if( usIMR_IA & IMR_IA_STATUS )
     1218                    winMsg->lParam |= ISC_SHOWUIGUIDELINE_W;
     1219
     1220                if( usIMR_IA & IMR_IA_CONVERSION )
     1221                    winMsg->lParam |= ISC_SHOWUICOMPOSITIONWINDOW_W;
     1222
     1223                if( usIMR_IA & IMR_IA_CANDIDATE )
     1224                    winMsg->lParam |= ISC_SHOWUIALLCANDIDATEWINDOW_W;
     1225
     1226                if( usIMR_IA & IMR_IA_INFOMSG )
     1227                    winMsg->lParam |= 0; // todo
     1228
     1229                if( usIMR_IA & IMR_IA_REGWORD )
     1230                    winMsg->lParam |= 0; // todo
     1231                break;
     1232            }
     1233
     1234            case IMR_STATUS :
     1235                winMsg->message = WM_IME_NOTIFY_W;
     1236
     1237                switch(( ULONG )os2Msg->mp2 )
     1238                {
     1239                    case IMR_STATUS_SHOW :
     1240                        winMsg->wParam = IMN_OPENSTATUSWINDOW_W;
     1241                        break;
     1242
     1243                    case IMR_STATUS_HIDE :
     1244                        winMsg->wParam = IMN_CLOSESTATUSWINDOW_W;
     1245                        break;
     1246
     1247                    case IMR_STATUS_INPUTMODE : // IMN_SETOPENSTATUS followed by IMN_SETCONVERSIONMODE
     1248                        winMsg->wParam = IMN_SETOPENSTATUS_W;
     1249                        break;
     1250
     1251                    case IMR_STATUS_CONVERSIONMODE :
     1252                        winMsg->wParam = IMN_SETSENTENCEMODE_W;
     1253                        break;
     1254
     1255                    case IMR_STATUS_STATUSPOS :
     1256                        winMsg->wParam = IMN_SETSTATUSWINDOWPOS_W;
     1257                        break;
     1258
     1259                    case IMR_STATUS_STRING :
     1260                    case IMR_STATUS_STRINGATTR :
     1261                    case IMR_STATUS_CURSORPOS :
     1262                    case IMR_STATUS_CURSORATTR :
     1263
     1264                    default :
     1265                        // todo
     1266                        goto dummymessage;
     1267
     1268                }
     1269                break;
     1270
     1271            case IMR_CONVRESULT :
     1272            {
     1273                ULONG ulIMR = ( ULONG )os2Msg->mp2;
     1274
     1275                winMsg->message = WM_IME_COMPOSITION_W;
     1276                winMsg->wParam = 0; // todo : current DBCS char
     1277
     1278                if( ulIMR & IMR_CONV_CONVERSIONSTRING )
     1279                    winMsg->lParam |= GCS_COMPSTR_W;
     1280
     1281                if( ulIMR & IMR_CONV_CONVERSIONATTR )
     1282                    winMsg->lParam |= GCS_COMPATTR_W;
     1283
     1284                if( ulIMR & IMR_CONV_CONVERSIONCLAUSE )
     1285                    winMsg->lParam |= GCS_COMPCLAUSE_W;
     1286
     1287                if( ulIMR & IMR_CONV_READINGSTRING )
     1288                    winMsg->lParam |= GCS_COMPREADSTR_W;
     1289
     1290                if( ulIMR & IMR_CONV_READINGATTR )
     1291                    winMsg->lParam |= GCS_COMPREADATTR_W;
     1292
     1293                if( ulIMR & IMR_CONV_READINGCLAUSE )
     1294                    winMsg->lParam |= GCS_COMPREADCLAUSE_W;
     1295
     1296                if( ulIMR & IMR_CONV_CURSORPOS )
     1297                    winMsg->lParam |= GCS_CURSORPOS_W;
     1298
     1299                if( ulIMR & IMR_CONV_CURSORATTR )
     1300                    winMsg->lParam |= 0; // todo
     1301
     1302                if( ulIMR & IMR_CONV_CHANGESTART )
     1303                    winMsg->lParam |= GCS_DELTASTART_W;
     1304
     1305                if( ulIMR & IMR_CONV_INSERTCHAR )
     1306                    winMsg->lParam |= CS_INSERTCHAR_W;
     1307
     1308                if( ulIMR & IMR_CONV_NOMOVECARET )
     1309                    winMsg->lParam |= CS_NOMOVECARET_W;
     1310
     1311                if( ulIMR & IMR_CONV_CONVERSIONFONT )
     1312                    winMsg->lParam |= 0; // todo
     1313
     1314                if( ulIMR & IMR_CONV_CONVERSIONPOS )
     1315                    winMsg->lParam |= 0; // todo
     1316
     1317                if( ulIMR & IMR_RESULT_RESULTSTRING )
     1318                    winMsg->lParam = GCS_RESULTSTR_W; // clear all composition info
     1319
     1320                if( ulIMR & IMR_RESULT_RESULTATTR )
     1321                    winMsg->lParam |= 0; // todo
     1322
     1323                if( ulIMR & IMR_RESULT_RESULTCLAUSE )
     1324                    winMsg->lParam |= GCS_RESULTCLAUSE_W;
     1325
     1326                if( ulIMR & IMR_RESULT_READINGSTRING )
     1327                    winMsg->lParam |= GCS_RESULTREADSTR_W;
     1328
     1329                if( ulIMR & IMR_RESULT_READINGATTR )
     1330                    winMsg->lParam |= 0; // todo
     1331
     1332                if( ulIMR & IMR_RESULT_READINGCLAUSE )
     1333                    winMsg->lParam |= GCS_RESULTREADCLAUSE_W;
     1334
     1335                if( ulIMR && ( winMsg->lParam == 0 ))
     1336                    goto dummymessage;
     1337                break;
     1338            }
     1339
     1340            case IMR_CANDIDATE :
     1341                winMsg->message = WM_IME_NOTIFY_W;
     1342                switch(( ULONG )os2Msg->mp2 )
     1343                {
     1344                    case IMR_CANDIDATE_SHOW :
     1345                    case IMR_CANDIDATE_HIDE :
     1346                    case IMR_CANDIDATE_SELECT :
     1347                    case IMR_CANDIDATE_CHANGE :
     1348                    case IMR_CANDIDATE_CANDIDATEPOS :
     1349                    default :
     1350                        // todo
     1351                        goto dummymessage;
     1352                }
     1353                break;
     1354
     1355            case IMR_INFOMSG :
     1356                winMsg->message = WM_IME_NOTIFY_W;
     1357                winMsg->wParam = IMN_GUIDELINE_W;
     1358                break;
     1359
     1360            case IMR_REGWORD :
     1361                goto dummymessage;
     1362
     1363            case IMR_IMECHANGE :
     1364                winMsg->message = WM_IME_SELECT_W;
     1365                // todo
     1366                goto dummymessage;
     1367
     1368            case IMR_CONFIG :
     1369                // todo
     1370                goto dummymessage;
     1371
     1372            case IMR_DICTIONARY :
     1373                // todo
     1374                goto dummymessage;
     1375
     1376            case IMR_OTHERINFO :
     1377                // todo
     1378                goto dummymessage;
     1379        }
     1380        break;
     1381
     1382#if 0 // application cannot receive this message
     1383    case WM_IMECONTROL:
     1384#endif
    10811385    case WM_INITMENU:
    10821386    case WM_MENUSELECT:
Note: See TracChangeset for help on using the changeset viewer.