Ignore:
Timestamp:
May 24, 2004, 11:02:01 AM (21 years ago)
Author:
sandervl
Message:

KOM: Updates

File:
1 edited

Legend:

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

    r10595 r10607  
    1 /* $Id: oslibmsgtranslate.cpp,v 1.124 2004-05-03 12:09:01 sandervl Exp $ */
     1/* $Id: oslibmsgtranslate.cpp,v 1.125 2004-05-24 09:01:59 sandervl Exp $ */
    22/*
    33 * Window message translation functions for OS/2
     
    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        {
    755             KeyTranslatePMScanToWinVKey(usPMScanCode,
    756                                         FALSE,
    757                                         &bWinVKey,
    758                                         &wWinScan,
    759                                         &fWinExtended);
     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 :
     845                    KeyTranslatePMScanToWinVKey(usPMScanCode,
     846                                                FALSE,
     847                                                &bWinVKey,
     848                                                &wWinScan,
     849                                                &fWinExtended);
     850            }
     851
    760852            winMsg->wParam = bWinVKey;
    761853        }
     
    10121104    case WM_RENDERFMT:
    10131105        winMsg->message = WINWM_RENDERFORMAT;
    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         }
     1106        winMsg->wParam  = (UINT) os2Msg->mp1;
    10211107        break;
    10221108
     
    10791165        break;
    10801166
     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
    10811379    case WM_INITMENU:
    10821380    case WM_MENUSELECT:
Note: See TracChangeset for help on using the changeset viewer.