Changeset 21308 for trunk/src/user32
- Timestamp:
- Jun 18, 2009, 6:27:45 PM (16 years ago)
- Location:
- trunk/src/user32
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/Makefile
r21303 r21308 130 130 $(ODIN32_LIB)/libuls.lib \ 131 131 $(ODIN32_LIB)/$(ODINCRT).lib \ 132 $(ODIN32_LIB)/imm32os2.lib \ 132 133 OS2386.LIB \ 133 134 $(RTLLIB_O) -
trunk/src/user32/USER32.DEF
r21303 r21308 750 750 _clipboardPMToOdinFormat@4 @2043 NONAME 751 751 _clipboardOdinToPMFormat@4 @2044 NONAME 752 753 _GetOS2Icon@4 @2045 NONAME -
trunk/src/user32/edit.c
r21303 r21308 31 31 #include "ctrlconf.h" 32 32 #include <heapstring.h> 33 #include <imm.h> 33 34 #endif 34 35 … … 128 129 HLOCAL hloc32A; /* alias for ANSI control receiving EM_GETHANDLE 129 130 or EM_SETHANDLE */ 131 #ifdef __WIN32OS2__ 132 LPWSTR compStr; 133 INT compStrLen; 134 BOOL moveCaret; 135 DWORD sentenceMode; 136 #endif 130 137 } EDITSTATE; 131 138 … … 1113 1120 // always DBCS char 1114 1121 CHAR charA[ 2 ]; 1115 1122 INT lenA = 1; 1123 1124 if( IsDBCSLeadByte(( CHAR )( wParam >> 8 ))) 1125 { 1116 1126 charA[ 0 ] = ( CHAR )( wParam >> 8 ); 1117 1127 charA[ 1 ] = ( CHAR )wParam; 1118 1119 MultiByteToWideChar( CP_ACP, 0, ( LPSTR )charA, 2, ( LPWSTR )&charW, 1); 1128 lenA = 2; 1129 } 1130 else 1131 charA[ 0 ] = ( CHAR )wParam; 1132 1133 MultiByteToWideChar( CP_ACP, 0, ( LPSTR )charA, lenA, ( LPWSTR )&charW, 1); 1120 1134 } 1121 1135 … … 1123 1137 break; 1124 1138 } 1139 1140 case WM_IME_COMPOSITION: 1141 { 1142 HIMC himc; 1143 LONG bufSize; 1144 INT i; 1145 BOOL passToDefWnd = FALSE; 1146 #ifdef DEBUG 1147 LPSTR strA; 1148 INT lenA; 1149 #endif 1150 1151 DPRINTF_EDIT_MSG32("WM_IME_COMPOSITION"); 1152 1153 himc = ImmGetContext( hwnd ); 1154 1155 if( es->sentenceMode ) 1156 passToDefWnd = TRUE; 1157 else if( lParam & GCS_RESULTSTR ) 1158 { 1159 LPWSTR resultStr = NULL; 1160 INT resultStrLen = 0; 1161 1162 dprintf(("WM_IME_COMPOSITION : GCS_RESULTSTR")); 1163 1164 bufSize = ImmGetCompositionStringW( himc, GCS_RESULTSTR, NULL, 0 ); 1165 if( bufSize > 0 ) 1166 { 1167 INT i; 1168 1169 resultStrLen = bufSize / sizeof( WCHAR ); 1170 resultStr = malloc( bufSize + sizeof( WCHAR )); 1171 resultStr[ resultStrLen ] = 0; 1172 1173 ImmGetCompositionStringW( himc, GCS_RESULTSTR, resultStr, bufSize ); 1174 1175 #ifdef DEBUG 1176 lenA = WideCharToMultiByte( CP_ACP, 0, resultStr, resultStrLen, 0, 0, 0, 0 ); 1177 strA = malloc( lenA + 1 ); 1178 WideCharToMultiByte( CP_ACP, 0, resultStr, resultStrLen, strA, lenA, 0, 0 ); 1179 strA[ lenA ] = 0; 1180 dprintf(("Result String : '%s'", strA )); 1181 free( strA ); 1182 dprintf(("Composition Len %d", es->compStrLen )); 1183 #endif 1184 DestroyCaret(); 1185 if( es->compStrLen > 0 ) 1186 { 1187 EDIT_EM_SetSel(hwnd, es, (UINT)-1, 0, FALSE); 1188 for( i = 0; i < es->compStrLen; i++ ) 1189 EDIT_MoveForward(hwnd, es, TRUE); 1190 EDIT_WM_Clear(hwnd, es); 1191 } 1192 1193 EDIT_EM_ReplaceSel(hwnd, es, TRUE, resultStr, TRUE); 1194 1195 CreateCaret(hwnd, 0, 2, es->line_height); 1196 EDIT_SetCaretPos(hwnd, es, es->selection_end, es->flags & EF_AFTER_WRAP); 1197 ShowCaret(hwnd); 1198 1199 free( resultStr ); 1200 1201 } 1202 1203 if( es->compStr ) 1204 free( es->compStr ); 1205 1206 es->compStr = NULL; 1207 es->compStrLen = 0; 1208 } 1209 else if( lParam & GCS_COMPSTR ) 1210 { 1211 INT prevLen = es->compStrLen; 1212 1213 dprintf(("WM_IME_COMPOSITION : GCS_COMPSTR")); 1214 1215 if( es->compStr ) 1216 free( es->compStr ); 1217 1218 es->compStr = NULL; 1219 es->compStrLen = 0; 1220 1221 bufSize = ImmGetCompositionStringW( himc, GCS_COMPSTR, NULL, 0 ); 1222 if( bufSize > 0 ) 1223 { 1224 HDC hdc; 1225 SIZE size; 1226 BOOL oldMoveCaret; 1227 1228 es->compStrLen = bufSize / sizeof( WCHAR ); 1229 es->compStr = malloc( bufSize + sizeof( WCHAR )); 1230 es->compStr[ es->compStrLen ] = 0; 1231 1232 ImmGetCompositionStringW( himc, GCS_COMPSTR, es->compStr, bufSize ); 1233 1234 #ifdef DEBUG 1235 lenA = WideCharToMultiByte( CP_ACP, 0, es->compStr, es->compStrLen, 0, 0, 0, 0 ); 1236 strA = malloc( lenA + 1 ); 1237 WideCharToMultiByte( CP_ACP, 0, es->compStr, es->compStrLen, strA, lenA, 0, 0 ); 1238 strA[ lenA ] = 0; 1239 dprintf(("Composition String : '%s'", strA )); 1240 free( strA ); 1241 #endif 1242 hdc = GetDC( hwnd ); 1243 GetTextExtentPoint32W( hdc, es->compStr, es->compStrLen, &size); 1244 ReleaseDC( hwnd, hdc ); 1245 1246 oldMoveCaret = es->moveCaret; 1247 1248 es->moveCaret = FALSE; // to prevent cursor from flashing too many 1249 1250 if( prevLen > 0 ) 1251 { 1252 EDIT_EM_SetSel(hwnd, es, (UINT)-1, 0, FALSE); 1253 for( i = 0; i < prevLen; i++ ) 1254 EDIT_MoveForward(hwnd, es, TRUE); 1255 EDIT_WM_Clear(hwnd, es); 1256 } 1257 1258 EDIT_EM_ReplaceSel(hwnd, es, TRUE, es->compStr, TRUE); 1259 1260 for( i = 0; i < es->compStrLen; i++ ) 1261 EDIT_MoveBackward(hwnd, es, FALSE); 1262 1263 es->moveCaret = oldMoveCaret; 1264 1265 CreateCaret(hwnd, 0, size.cx, es->line_height); 1266 EDIT_SetCaretPos(hwnd, es, es->selection_end, es->flags & EF_AFTER_WRAP); 1267 ShowCaret(hwnd); 1268 } 1269 } 1270 else 1271 passToDefWnd = TRUE; 1272 1273 ImmReleaseContext( hwnd, himc ); 1274 1275 if( passToDefWnd ) 1276 { 1277 if( unicode ) 1278 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1279 else 1280 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1281 } 1282 break; 1283 } 1284 1285 case WM_IME_COMPOSITIONFULL: 1286 DPRINTF_EDIT_MSG32("WM_IME_COMPOSITIONFULL"); 1287 if( unicode ) 1288 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1289 else 1290 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1291 break; 1292 1293 case WM_IME_CONTROL: 1294 DPRINTF_EDIT_MSG32("WM_IME_CONTROL"); 1295 if( unicode ) 1296 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1297 else 1298 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1299 break; 1300 1301 case WM_IME_ENDCOMPOSITION: 1302 DPRINTF_EDIT_MSG32("WM_IME_ENDCOMPOSITION"); 1303 1304 if( es->compStr ) 1305 { 1306 INT i; 1307 1308 DestroyCaret(); 1309 1310 EDIT_EM_SetSel(hwnd, es, (UINT)-1, 0, FALSE); 1311 for( i = 0; i < es->compStrLen; i++ ) 1312 EDIT_MoveForward(hwnd, es, TRUE); 1313 EDIT_WM_Clear(hwnd, es); 1314 1315 CreateCaret(hwnd, 0, 2, es->line_height); 1316 EDIT_SetCaretPos(hwnd, es, es->selection_end, es->flags & EF_AFTER_WRAP); 1317 ShowCaret(hwnd); 1318 1319 free( es->compStr ); 1320 } 1321 1322 es->compStr = NULL; 1323 es->compStrLen = 0; 1324 1325 if( unicode ) 1326 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1327 else 1328 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1329 break; 1330 1331 case WM_IME_NOTIFY: 1332 DPRINTF_EDIT_MSG32("WM_IME_NOTIFY"); 1333 1334 if( wParam == IMN_SETSENTENCEMODE ) 1335 { 1336 HIMC himc; 1337 DWORD conversionMode; 1338 1339 himc = ImmGetContext( hwnd ); 1340 1341 ImmGetConversionStatus( himc, &conversionMode, &es->sentenceMode ); 1342 1343 ImmReleaseContext( hwnd, himc ); 1344 } 1345 1346 if( unicode ) 1347 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1348 else 1349 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1350 break; 1351 1352 case WM_IME_REQUEST: 1353 DPRINTF_EDIT_MSG32("WM_IME_REQUEST"); 1354 if( unicode ) 1355 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1356 else 1357 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1358 break; 1359 1360 case WM_IME_SELECT: 1361 DPRINTF_EDIT_MSG32("WM_IME_SELECT"); 1362 if( unicode ) 1363 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1364 else 1365 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1366 break; 1367 1368 case WM_IME_SETCONTEXT: 1369 DPRINTF_EDIT_MSG32("WM_IME_SETCONTEXT"); 1370 1371 dprintf(("ImmGetProperty %08lx", ImmGetProperty( 0, IGP_CONVERSION ))); 1372 1373 if( unicode ) 1374 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1375 else 1376 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1377 break; 1378 1379 case WM_IME_STARTCOMPOSITION: 1380 DPRINTF_EDIT_MSG32("WM_IME_STARTCOMPOSITION"); 1381 1382 es->compStr = NULL; 1383 es->compStrLen = 0; 1384 1385 if( unicode ) 1386 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1387 else 1388 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1389 break; 1390 1391 case EM_GETIMESTATUS: 1392 DPRINTF_EDIT_MSG32("EM_GETIMESTATUS"); 1393 if( unicode ) 1394 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1395 else 1396 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1397 break; 1398 1399 case EM_SETIMESTATUS: 1400 DPRINTF_EDIT_MSG32("EM_SETIMESTATUS"); 1401 if( unicode ) 1402 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1403 else 1404 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1405 break; 1125 1406 #endif 1126 1407 … … 2440 2721 { 2441 2722 LRESULT res = EDIT_EM_PosFromChar(hwnd, es, pos, after_wrap); 2723 2724 #ifdef __WIN32OS2__ 2725 if( es->moveCaret ) 2726 { 2727 HIMC himc; 2728 CANDIDATEFORM candForm; 2729 2730 himc = ImmGetContext( hwnd ); 2731 2732 #endif 2733 2442 2734 SetCaretPos(SLOWORD(res), SHIWORD(res)); 2735 2736 #ifdef __WIN32OS2__ 2737 if( es->sentenceMode ) 2738 { 2739 COMPOSITIONFORM cf; 2740 2741 cf.dwStyle = CFS_POINT; 2742 cf.ptCurrentPos.x = SLOWORD( res ); 2743 cf.ptCurrentPos.y = SHIWORD( res ); 2744 2745 ImmSetCompositionWindow( himc, &cf ); 2746 } 2747 2748 candForm.dwIndex = 0; 2749 candForm.dwStyle = CFS_CANDIDATEPOS; 2750 candForm.ptCurrentPos.x = SLOWORD( res ); 2751 candForm.ptCurrentPos.y = SHIWORD( res ) + es->line_height; 2752 2753 ImmSetCandidateWindow( himc, &candForm ); 2754 2755 ImmReleaseContext( hwnd, himc ); 2756 } 2757 #endif 2443 2758 } 2444 2759 … … 4773 5088 } 4774 5089 5090 #ifdef __WIN32OS2__ 5091 es->compStr = NULL; 5092 es->compStrLen = 0; 5093 es->moveCaret = TRUE; 5094 { 5095 HIMC himc; 5096 DWORD conversionMode; 5097 5098 himc = ImmGetContext( hwnd ); 5099 5100 ImmGetConversionStatus( himc, &conversionMode, &es->sentenceMode ); 5101 5102 ImmReleaseContext( hwnd, himc ); 5103 } 5104 #endif 5105 4775 5106 return TRUE; 4776 5107 } … … 4904 5235 es->font = font; 4905 5236 dc = GetDC(hwnd); 5237 #ifdef __WIN32OS2__ 5238 // todo : set font of IME window 5239 #endif 4906 5240 if (font) 4907 5241 old_font = SelectObject(dc, font); -
trunk/src/user32/listbox.c
r21303 r21308 3028 3028 // always DBCS char 3029 3029 CHAR charA[ 2 ]; 3030 3030 INT lenA = 1; 3031 3032 if( IsDBCSLeadByte(( CHAR )( wParam >> 8 ))) 3033 { 3031 3034 charA[ 0 ] = ( CHAR )( wParam >> 8 ); 3032 3035 charA[ 1 ] = ( CHAR )wParam; 3033 3034 MultiByteToWideChar( CP_ACP, 0, ( LPSTR )charA, 2, ( LPWSTR )&charW, 1); 3036 lenA = 2; 3037 } 3038 else 3039 charA[ 0 ] = ( CHAR )wParam; 3040 3041 MultiByteToWideChar( CP_ACP, 0, ( LPSTR )charA, lenA, ( LPWSTR )&charW, 1); 3035 3042 } 3036 3043 return LISTBOX_HandleChar( hwnd, descr, charW ); -
trunk/src/user32/oslibmsgtranslate.cpp
r21303 r21308 15 15 * 16 16 */ 17 #define INCL_NLS 18 #define INCL_GPI 17 19 #define INCL_WIN 18 20 #define INCL_PM … … 42 44 #include "user32api.h" 43 45 46 #include <os2im.h> 47 #include <im32.h> 44 48 45 49 #define DBG_LOCALLOG DBG_oslibmsgtranslate … … 48 52 static BOOL fGenerateDoubleClick = FALSE; 49 53 static MSG doubleClickMsg = {0}; 54 55 extern UINT WINAPI GetACP(void); // from winnls.h 50 56 51 57 //For wheel mouse translation … … 753 759 if( scanCode != 0 ) 754 760 { 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 : 755 845 KeyTranslatePMScanToWinVKey(usPMScanCode, 756 846 FALSE, … … 758 848 &wWinScan, 759 849 &fWinExtended); 850 } 851 760 852 winMsg->wParam = bWinVKey; 761 853 } … … 1079 1171 break; 1080 1172 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 1081 1385 case WM_INITMENU: 1082 1386 case WM_MENUSELECT: -
trunk/src/user32/pmwindow.cpp
r21303 r21308 61 61 #include "user32api.h" 62 62 #include <kbdhook.h> 63 #include <heapstring.h> 64 65 #include <os2im.h> 66 #include <im32.h> 63 67 64 68 #define DBG_LOCALLOG DBG_pmwindow … … 140 144 #endif 141 145 146 extern "C" ULONG OSLibImSetMsgQueueProperty( ULONG, ULONG ); 147 142 148 //****************************************************************************** 143 149 // Initialize PM; create hab, message queue and register special Win32 window classes … … 194 200 BOOL rc = WinSetCp(hmq, GetDisplayCodepage()); 195 201 dprintf(("InitPM: WinSetCP was %sOK", rc ? "" : "not ")); 202 203 /* IM instace is created per message queue, that is, thread */ 204 if( IsDBCSEnv()) 205 OSLibImSetMsgQueueProperty( hmq, MQP_INSTANCE_PERMQ ); 196 206 197 207 //CD polling window class … … 1004 1014 dprintf(("OS2: %s %x %x %x", (msg == WM_HSCROLL) ? "WM_HSCROLL" : "WM_VSCROLL", win32wnd->getWindowHandle(), mp1, mp2)); 1005 1015 win32wnd->DispatchMsgA(pWinMsg); 1016 break; 1017 1018 case WM_IMEREQUEST: 1019 case WM_IMECONTROL: 1020 case WM_IMENOTIFY: 1021 if( pWinMsg->message ) 1022 { 1023 win32wnd->DispatchMsgA( pWinMsg ); 1024 1025 if(( pWinMsg->message = WM_IME_NOTIFY_W ) && 1026 ( pWinMsg->wParam == IMN_SETOPENSTATUS_W )) 1027 { 1028 MSG m; 1029 1030 m.message = WM_IME_NOTIFY_W; 1031 m.wParam = IMN_SETCONVERSIONMODE_W; 1032 m.lParam = 0; 1033 1034 win32wnd->DispatchMsgA( &m ); 1035 } 1036 } 1037 else 1038 goto RunDefWndProc; 1006 1039 break; 1007 1040 … … 2210 2243 break; 2211 2244 2245 case WM_IMEREQUEST: 2246 case WM_IMECONTROL: 2247 case WM_IMENOTIFY: 2248 if( pWinMsg->message ) 2249 { 2250 dprintf(("Frame window received IME message")); 2251 win32wnd->DispatchMsgA( pWinMsg ); 2252 2253 if(( pWinMsg->message = WM_IME_NOTIFY_W ) && 2254 ( pWinMsg->wParam == IMN_SETOPENSTATUS_W )) 2255 { 2256 MSG m; 2257 2258 m.message = WM_IME_NOTIFY_W; 2259 m.wParam = IMN_SETCONVERSIONMODE_W; 2260 m.lParam = 0; 2261 2262 win32wnd->DispatchMsgA( &m ); 2263 } 2264 } 2265 else 2266 goto RunDefWndProc; 2267 break; 2268 2212 2269 #ifdef DEBUG 2213 2270 case WM_DDE_INITIATE:
Note:
See TracChangeset
for help on using the changeset viewer.