- Timestamp:
- May 24, 2004, 11:02:01 AM (21 years ago)
- Location:
- trunk/src/user32
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/Makefile
r10578 r10607 1 # $Id: Makefile,v 1.11 0 2004-04-13 14:16:41sandervl Exp $1 # $Id: Makefile,v 1.111 2004-05-24 09:01:57 sandervl Exp $ 2 2 3 3 # … … 130 130 $(ODIN32_LIB)/libuls.lib \ 131 131 $(ODIN32_LIB)/$(ODINCRT).lib \ 132 $(ODIN32_LIB)/imm32.lib \ 132 133 OS2386.LIB \ 133 134 $(RTLLIB_O) -
trunk/src/user32/edit.c
r10479 r10607 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 … … 1111 1118 else 1112 1119 { 1113 // always DBCS char1114 1120 CHAR charA[ 2 ]; 1115 1116 charA[ 0 ] = ( CHAR )( wParam >> 8 ); 1117 charA[ 1 ] = ( CHAR )wParam; 1118 1119 MultiByteToWideChar( CP_ACP, 0, ( LPSTR )charA, 2, ( LPWSTR )&charW, 1); 1121 INT lenA = 1; 1122 1123 if( IsDBCSLeadByte(( CHAR )( wParam >> 8 ))) 1124 { 1125 charA[ 0 ] = ( CHAR )( wParam >> 8 ); 1126 charA[ 1 ] = ( CHAR )wParam; 1127 lenA = 2; 1128 } 1129 else 1130 charA[ 0 ] = ( CHAR )wParam; 1131 1132 MultiByteToWideChar( CP_ACP, 0, ( LPSTR )charA, lenA, ( LPWSTR )&charW, 1); 1120 1133 } 1121 1134 … … 1123 1136 break; 1124 1137 } 1138 1139 case WM_IME_COMPOSITION: 1140 { 1141 HIMC himc; 1142 LONG bufSize; 1143 INT i; 1144 BOOL passToDefWnd = FALSE; 1145 #ifdef DEBUG 1146 LPSTR strA; 1147 INT lenA; 1148 #endif 1149 1150 DPRINTF_EDIT_MSG32("WM_IME_COMPOSITION"); 1151 1152 himc = ImmGetContext( hwnd ); 1153 1154 if( es->sentenceMode ) 1155 passToDefWnd = TRUE; 1156 else if( lParam & GCS_RESULTSTR ) 1157 { 1158 LPWSTR resultStr = NULL; 1159 INT resultStrLen = 0; 1160 1161 dprintf(("WM_IME_COMPOSITION : GCS_RESULTSTR")); 1162 1163 bufSize = ImmGetCompositionStringW( himc, GCS_RESULTSTR, NULL, 0 ); 1164 if( bufSize > 0 ) 1165 { 1166 INT i; 1167 1168 resultStrLen = bufSize / sizeof( WCHAR ); 1169 resultStr = malloc( bufSize + sizeof( WCHAR )); 1170 resultStr[ resultStrLen ] = 0; 1171 1172 ImmGetCompositionStringW( himc, GCS_RESULTSTR, resultStr, bufSize ); 1173 1174 #ifdef DEBUG 1175 lenA = WideCharToMultiByte( CP_ACP, 0, resultStr, resultStrLen, 0, 0, 0, 0 ); 1176 strA = malloc( lenA + 1 ); 1177 WideCharToMultiByte( CP_ACP, 0, resultStr, resultStrLen, strA, lenA, 0, 0 ); 1178 strA[ lenA ] = 0; 1179 dprintf(("Result String : '%s'", strA )); 1180 free( strA ); 1181 dprintf(("Composition Len %d", es->compStrLen )); 1182 #endif 1183 DestroyCaret(); 1184 if( es->compStrLen > 0 ) 1185 { 1186 EDIT_EM_SetSel(hwnd, es, (UINT)-1, 0, FALSE); 1187 for( i = 0; i < es->compStrLen; i++ ) 1188 EDIT_MoveForward(hwnd, es, TRUE); 1189 EDIT_WM_Clear(hwnd, es); 1190 } 1191 1192 EDIT_EM_ReplaceSel(hwnd, es, TRUE, resultStr, TRUE); 1193 1194 CreateCaret(hwnd, 0, 2, es->line_height); 1195 EDIT_SetCaretPos(hwnd, es, es->selection_end, es->flags & EF_AFTER_WRAP); 1196 ShowCaret(hwnd); 1197 1198 free( resultStr ); 1199 1200 } 1201 1202 if( es->compStr ) 1203 free( es->compStr ); 1204 1205 es->compStr = NULL; 1206 es->compStrLen = 0; 1207 } 1208 else if( lParam & GCS_COMPSTR ) 1209 { 1210 INT prevLen = es->compStrLen; 1211 1212 dprintf(("WM_IME_COMPOSITION : GCS_COMPSTR")); 1213 1214 if( es->compStr ) 1215 free( es->compStr ); 1216 1217 es->compStr = NULL; 1218 es->compStrLen = 0; 1219 1220 bufSize = ImmGetCompositionStringW( himc, GCS_COMPSTR, NULL, 0 ); 1221 if( bufSize > 0 ) 1222 { 1223 HDC hdc; 1224 SIZE size; 1225 BOOL oldMoveCaret; 1226 1227 es->compStrLen = bufSize / sizeof( WCHAR ); 1228 es->compStr = malloc( bufSize + sizeof( WCHAR )); 1229 es->compStr[ es->compStrLen ] = 0; 1230 1231 ImmGetCompositionStringW( himc, GCS_COMPSTR, es->compStr, bufSize ); 1232 1233 #ifdef DEBUG 1234 lenA = WideCharToMultiByte( CP_ACP, 0, es->compStr, es->compStrLen, 0, 0, 0, 0 ); 1235 strA = malloc( lenA + 1 ); 1236 WideCharToMultiByte( CP_ACP, 0, es->compStr, es->compStrLen, strA, lenA, 0, 0 ); 1237 strA[ lenA ] = 0; 1238 dprintf(("Composition String : '%s'", strA )); 1239 free( strA ); 1240 #endif 1241 hdc = GetDC( hwnd ); 1242 GetTextExtentPoint32W( hdc, es->compStr, es->compStrLen, &size); 1243 ReleaseDC( hwnd, hdc ); 1244 1245 oldMoveCaret = es->moveCaret; 1246 1247 es->moveCaret = FALSE; // to prevent cursor from flashing too many 1248 1249 if( prevLen > 0 ) 1250 { 1251 EDIT_EM_SetSel(hwnd, es, (UINT)-1, 0, FALSE); 1252 for( i = 0; i < prevLen; i++ ) 1253 EDIT_MoveForward(hwnd, es, TRUE); 1254 EDIT_WM_Clear(hwnd, es); 1255 } 1256 1257 EDIT_EM_ReplaceSel(hwnd, es, TRUE, es->compStr, TRUE); 1258 1259 for( i = 0; i < es->compStrLen; i++ ) 1260 EDIT_MoveBackward(hwnd, es, FALSE); 1261 1262 es->moveCaret = oldMoveCaret; 1263 1264 CreateCaret(hwnd, 0, size.cx, es->line_height); 1265 EDIT_SetCaretPos(hwnd, es, es->selection_end, es->flags & EF_AFTER_WRAP); 1266 ShowCaret(hwnd); 1267 } 1268 } 1269 else 1270 passToDefWnd = TRUE; 1271 1272 ImmReleaseContext( hwnd, himc ); 1273 1274 if( passToDefWnd ) 1275 { 1276 if( unicode ) 1277 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1278 else 1279 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1280 } 1281 break; 1282 } 1283 1284 case WM_IME_COMPOSITIONFULL: 1285 DPRINTF_EDIT_MSG32("WM_IME_COMPOSITIONFULL"); 1286 if( unicode ) 1287 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1288 else 1289 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1290 break; 1291 1292 case WM_IME_CONTROL: 1293 DPRINTF_EDIT_MSG32("WM_IME_CONTROL"); 1294 if( unicode ) 1295 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1296 else 1297 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1298 break; 1299 1300 case WM_IME_ENDCOMPOSITION: 1301 DPRINTF_EDIT_MSG32("WM_IME_ENDCOMPOSITION"); 1302 1303 if( es->compStr ) 1304 { 1305 INT i; 1306 1307 DestroyCaret(); 1308 1309 EDIT_EM_SetSel(hwnd, es, (UINT)-1, 0, FALSE); 1310 for( i = 0; i < es->compStrLen; i++ ) 1311 EDIT_MoveForward(hwnd, es, TRUE); 1312 EDIT_WM_Clear(hwnd, es); 1313 1314 CreateCaret(hwnd, 0, 2, es->line_height); 1315 EDIT_SetCaretPos(hwnd, es, es->selection_end, es->flags & EF_AFTER_WRAP); 1316 ShowCaret(hwnd); 1317 1318 free( es->compStr ); 1319 } 1320 1321 es->compStr = NULL; 1322 es->compStrLen = 0; 1323 1324 if( unicode ) 1325 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1326 else 1327 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1328 break; 1329 1330 case WM_IME_NOTIFY: 1331 DPRINTF_EDIT_MSG32("WM_IME_NOTIFY"); 1332 1333 if( wParam == IMN_SETSENTENCEMODE ) 1334 { 1335 HIMC himc; 1336 DWORD conversionMode; 1337 1338 himc = ImmGetContext( hwnd ); 1339 1340 ImmGetConversionStatus( himc, &conversionMode, &es->sentenceMode ); 1341 1342 ImmReleaseContext( hwnd, himc ); 1343 } 1344 1345 if( unicode ) 1346 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1347 else 1348 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1349 break; 1350 1351 case WM_IME_REQUEST: 1352 DPRINTF_EDIT_MSG32("WM_IME_REQUEST"); 1353 if( unicode ) 1354 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1355 else 1356 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1357 break; 1358 1359 case WM_IME_SELECT: 1360 DPRINTF_EDIT_MSG32("WM_IME_SELECT"); 1361 if( unicode ) 1362 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1363 else 1364 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1365 break; 1366 1367 case WM_IME_SETCONTEXT: 1368 DPRINTF_EDIT_MSG32("WM_IME_SETCONTEXT"); 1369 1370 dprintf(("ImmGetProperty %08lx", ImmGetProperty( 0, IGP_CONVERSION ))); 1371 1372 if( unicode ) 1373 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1374 else 1375 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1376 break; 1377 1378 case WM_IME_STARTCOMPOSITION: 1379 DPRINTF_EDIT_MSG32("WM_IME_STARTCOMPOSITION"); 1380 1381 es->compStr = NULL; 1382 es->compStrLen = 0; 1383 1384 if( unicode ) 1385 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1386 else 1387 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1388 break; 1389 1390 case EM_GETIMESTATUS: 1391 DPRINTF_EDIT_MSG32("EM_GETIMESTATUS"); 1392 if( unicode ) 1393 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1394 else 1395 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1396 break; 1397 1398 case EM_SETIMESTATUS: 1399 DPRINTF_EDIT_MSG32("EM_SETIMESTATUS"); 1400 if( unicode ) 1401 result = DefWindowProcW( hwnd, msg, wParam, lParam ); 1402 else 1403 result = DefWindowProcA( hwnd, msg, wParam, lParam ); 1404 break; 1125 1405 #endif 1126 1406 … … 2440 2720 { 2441 2721 LRESULT res = EDIT_EM_PosFromChar(hwnd, es, pos, after_wrap); 2722 2723 #ifdef __WIN32OS2__ 2724 if( es->moveCaret ) 2725 { 2726 HIMC himc; 2727 CANDIDATEFORM candForm; 2728 2729 himc = ImmGetContext( hwnd ); 2730 2731 #endif 2442 2732 SetCaretPos(SLOWORD(res), SHIWORD(res)); 2733 2734 #ifdef __WIN32OS2__ 2735 if( es->sentenceMode ) 2736 { 2737 COMPOSITIONFORM cf; 2738 2739 cf.dwStyle = CFS_POINT; 2740 cf.ptCurrentPos.x = SLOWORD( res ); 2741 cf.ptCurrentPos.y = SHIWORD( res ); 2742 2743 ImmSetCompositionWindow( himc, &cf ); 2744 } 2745 2746 candForm.dwIndex = 0; 2747 candForm.dwStyle = CFS_CANDIDATEPOS; 2748 candForm.ptCurrentPos.x = SLOWORD( res ); 2749 candForm.ptCurrentPos.y = SHIWORD( res ) + es->line_height; 2750 2751 ImmSetCandidateWindow( himc, &candForm ); 2752 2753 ImmReleaseContext( hwnd, himc ); 2754 } 2755 #endif 2443 2756 } 2444 2757 … … 4773 5086 } 4774 5087 5088 #ifdef __WIN32OS2__ 5089 es->compStr = NULL; 5090 es->compStrLen = 0; 5091 es->moveCaret = TRUE; 5092 { 5093 HIMC himc; 5094 DWORD conversionMode; 5095 5096 himc = ImmGetContext( hwnd ); 5097 5098 ImmGetConversionStatus( himc, &conversionMode, &es->sentenceMode ); 5099 5100 ImmReleaseContext( hwnd, himc ); 5101 } 5102 #endif 5103 4775 5104 return TRUE; 4776 5105 } … … 4909 5238 es->line_height = tm.tmHeight; 4910 5239 es->char_width = tm.tmAveCharWidth; 5240 #ifdef __WIN32OS2__ 5241 // todo : set font of IME window 5242 #endif 4911 5243 if (font) 4912 5244 SelectObject(dc, old_font); -
trunk/src/user32/listbox.c
r10352 r10607 3026 3026 else 3027 3027 { 3028 // always DBCS char3029 3028 CHAR charA[ 2 ]; 3030 3031 charA[ 0 ] = ( CHAR )( wParam >> 8 ); 3032 charA[ 1 ] = ( CHAR )wParam; 3033 3034 MultiByteToWideChar( CP_ACP, 0, ( LPSTR )charA, 2, ( LPWSTR )&charW, 1); 3029 INT lenA = 1; 3030 3031 if( IsDBCSLeadByte(( CHAR )( wParam >> 8 ))) 3032 { 3033 charA[ 0 ] = ( CHAR )( wParam >> 8 ); 3034 charA[ 1 ] = ( CHAR )wParam; 3035 lenA = 2; 3036 } 3037 else 3038 charA[ 0 ] = ( CHAR )wParam; 3039 3040 MultiByteToWideChar( CP_ACP, 0, ( LPSTR )charA, lenA, ( LPWSTR )&charW, 1); 3035 3041 } 3036 3042 return LISTBOX_HandleChar( hwnd, descr, charW ); -
trunk/src/user32/oslibmsgtranslate.cpp
r10595 r10607 1 /* $Id: oslibmsgtranslate.cpp,v 1.12 4 2004-05-03 12:09:01sandervl Exp $ */1 /* $Id: oslibmsgtranslate.cpp,v 1.125 2004-05-24 09:01:59 sandervl Exp $ */ 2 2 /* 3 3 * Window message translation functions for OS/2 … … 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 { 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 760 852 winMsg->wParam = bWinVKey; 761 853 } … … 1012 1104 case WM_RENDERFMT: 1013 1105 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; 1021 1107 break; 1022 1108 … … 1079 1165 break; 1080 1166 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 1081 1379 case WM_INITMENU: 1082 1380 case WM_MENUSELECT: -
trunk/src/user32/pmwindow.cpp
r10515 r10607 1 /* $Id: pmwindow.cpp,v 1.2 29 2004-03-12 18:19:50sandervl Exp $ */1 /* $Id: pmwindow.cpp,v 1.230 2004-05-24 09:01:59 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Window Managment Code for OS/2 … … 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 … … 1006 1016 break; 1007 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; 1039 break; 1040 1008 1041 case DM_DRAGOVER: 1009 1042 { … … 1016 1049 1017 1050 if(fDragDropDisabled) { 1018 1051 rc = (MRFROM2SHORT (DOR_NEVERDROP, 0)); 1019 1052 break; 1020 1053 } … … 1022 1055 //does this window accept dropped files? 1023 1056 if(!DragDropAccept(win32wnd->getWindowHandle())) { 1024 1057 rc = (MRFROM2SHORT (DOR_NEVERDROP, 0)); 1025 1058 break; 1026 1059 } 1027 1060 1028 1061 if(PMDragValidate(pDragInfo) == FALSE) { 1029 1062 rc = (MRFROM2SHORT (DOR_NEVERDROP, 0)); 1030 1063 break; 1031 1064 } … … 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: … … 2326 2383 // Parameters 2327 2384 // 2328 // HWND hwndOS2 2385 // HWND hwndOS2 - PM handle of fake window 2329 2386 // 2330 2387 // Returns 2331 // NULL 2388 // NULL - Failure 2332 2389 // else - Old PM window procedure 2333 2390 // -
trunk/src/user32/win32wbase.cpp
r10587 r10607 1 /* $Id: win32wbase.cpp,v 1.3 89 2004-04-20 10:11:43sandervl Exp $ */1 /* $Id: win32wbase.cpp,v 1.390 2004-05-24 09:02:00 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Window Base Class for OS/2 … … 70 70 #include "callwrap.h" 71 71 72 #include <imm.h> 73 72 74 #define DBG_LOCALLOG DBG_win32wbase 73 75 #include "dbglocal.h" … … 2123 2125 2124 2126 case WM_IME_CHAR: 2125 if( wParam & 0xFF00 ) // DBCS ?2127 if( IsDBCSLeadByte(( CHAR )( wParam >> 8 ))) 2126 2128 SendMessageA( getWindowHandle(), WM_CHAR, ( WPARAM )( BYTE )( wParam >> 8 ), lParam ); 2127 2129 SendMessageA( getWindowHandle(), WM_CHAR, ( WPARAM )( BYTE )( wParam & 0xFF ), lParam ); 2128 2130 break; 2131 2132 case WM_IME_KEYDOWN: 2133 return SendMessageA( getWindowHandle(), WM_KEYDOWN, wParam, lParam ); 2134 2135 case WM_IME_KEYUP: 2136 return SendMessageA( getWindowHandle(), WM_KEYUP, wParam, lParam ); 2137 2138 case WM_IME_COMPOSITION: 2139 case WM_IME_COMPOSITIONFULL: 2140 case WM_IME_CONTROL: 2141 case WM_IME_ENDCOMPOSITION: 2142 case WM_IME_NOTIFY: 2143 case WM_IME_REQUEST: 2144 case WM_IME_SELECT: 2145 case WM_IME_SETCONTEXT: 2146 case WM_IME_STARTCOMPOSITION: 2147 { 2148 HWND hwndIME = ImmGetDefaultIMEWnd( getWindowHandle()); 2149 2150 if( hwndIME ) 2151 { 2152 BOOL result = ImmIsUIMessageA( hwndIME, Msg, wParam, lParam ); 2153 2154 switch( Msg ) 2155 { 2156 case WM_IME_SETCONTEXT : 2157 return result; 2158 2159 case WM_IME_CONTROL : 2160 // todo : IMC_GETSTATUSWINDOWPOS return POINTS structure 2161 return !result; 2162 2163 case WM_IME_REQUEST : 2164 // todo 2165 return 0; 2166 } 2167 } 2168 break; 2169 } 2129 2170 2130 2171 default: … … 2206 2247 SendMessageW( getWindowHandle(), WM_CHAR, wParam, lParam ); 2207 2248 return 0; 2249 2250 case WM_IME_KEYDOWN: 2251 return SendMessageW( getWindowHandle(), WM_KEYDOWN, wParam, lParam ); 2252 2253 case WM_IME_KEYUP: 2254 return SendMessageW( getWindowHandle(), WM_KEYUP, wParam, lParam ); 2255 2256 case WM_IME_COMPOSITION: 2257 case WM_IME_COMPOSITIONFULL: 2258 case WM_IME_CONTROL: 2259 case WM_IME_ENDCOMPOSITION: 2260 case WM_IME_NOTIFY: 2261 case WM_IME_REQUEST: 2262 case WM_IME_SELECT: 2263 case WM_IME_SETCONTEXT: 2264 case WM_IME_STARTCOMPOSITION: 2265 { 2266 HWND hwndIME = ImmGetDefaultIMEWnd( getWindowHandle()); 2267 2268 if( hwndIME ) 2269 { 2270 BOOL result = ImmIsUIMessageW( hwndIME, Msg, wParam, lParam ); 2271 2272 switch( Msg ) 2273 { 2274 case WM_IME_SETCONTEXT : 2275 return result; 2276 2277 case WM_IME_CONTROL : 2278 // todo : IMC_GETSTATUSWINDOWPOS return POINTS structure 2279 return !result; 2280 2281 case WM_IME_REQUEST : 2282 // todo 2283 return 0; 2284 } 2285 } 2286 return 0; 2287 } 2208 2288 2209 2289 default: -
trunk/src/user32/windowmsg.cpp
r10602 r10607 1 /* $Id: windowmsg.cpp,v 1.5 0 2004-05-11 09:08:20sandervl Exp $ */1 /* $Id: windowmsg.cpp,v 1.51 2004-05-24 09:02:01 sandervl Exp $ */ 2 2 /* 3 3 * Win32 window message APIs for OS/2 … … 34 34 #define INCL_TIMERWIN32 35 35 #include "timer.h" 36 #include "callwrap.h"37 36 38 37 #define DBG_LOCALLOG DBG_windowmsg … … 327 326 * @author knut st. osmundsen <bird-srcspam@anduin.net> 328 327 * @remark One cannot attach a threads input queue to it self. 329 * @remark This implemenation requires the thread which input is 'forwarded' to330 * process it's message queue. Window (and wine) will not bother that thread331 * at all with the messages. (DEADLOCK WARNING)332 328 * @todo Not sure if all this is 100% ok according to the windows reality. 333 329 * I'm sure some error cases aren't caught. … … 566 562 case WM_IME_CHAR: 567 563 { 568 // always DBCS char569 564 CHAR charA[ 2 ]; 570 571 charA[ 0 ] = ( CHAR )( *pwparam >> 8 ); 572 charA[ 1 ] = ( CHAR )*pwparam; 573 574 MultiByteToWideChar( CP_ACP, 0, ( LPSTR )charA, 2, ( LPWSTR )pwparam, 1); 565 INT lenA = 1; 566 567 if( IsDBCSLeadByte(( CHAR )( *pwparam >> 8 ))) 568 { 569 charA[ 0 ] = ( CHAR )( *pwparam >> 8 ); 570 charA[ 1 ] = ( CHAR )*pwparam; 571 lenA = 2; 572 } 573 else 574 charA[ 0 ] = ( CHAR )*pwparam; 575 576 MultiByteToWideChar( CP_ACP, 0, ( LPSTR )charA, lenA, ( LPWSTR )pwparam, 1); 575 577 576 578 return 0; … … 857 859 #ifdef __WIN32OS2__ 858 860 case WM_IME_CHAR: 859 { // always DBCS char861 { 860 862 CHAR charA[ 2 ]; 861 862 WideCharToMultiByte( CP_ACP, 0, ( LPWSTR )pwparam, 1, ( LPSTR )charA, 2, 0, 0 ); 863 *pwparam = ( charA[ 0 ] << 8 ) | charA[ 1 ]; 863 INT lenA; 864 865 lenA = WideCharToMultiByte( CP_ACP, 0, ( LPWSTR )pwparam, 1, ( LPSTR )charA, 2, 0, 0 ); 866 if( lenA > 1 ) 867 *pwparam = ( charA[ 0 ] << 8 ) | charA[ 1 ]; 868 else 869 *pwparam = charA[ 0 ]; 864 870 865 871 return 0; … … 1003 1009 { 1004 1010 LRESULT result; 1011 LPARAM old = lParam; 1005 1012 1006 1013 if (WINPROC_MapMsg32ATo32W( hwnd, msg, &wParam, &lParam ) == -1) return 0; 1007 1014 1008 result = WrapCallback4(func,hwnd, msg, wParam, lParam );1015 result = func( hwnd, msg, wParam, lParam ); 1009 1016 WINPROC_UnmapMsg32ATo32W( hwnd, msg, wParam, lParam ); 1010 1017 … … 1017 1024 { 1018 1025 LPWSTR ustr = ( LPWSTR )HeapAlloc( GetProcessHeap(), 0, ( result + 1 ) * sizeof( WCHAR )); 1019 result = WrapCallback4(func,hwnd, WM_GETTEXT, ( WPARAM )( result + 1 ), ( LPARAM )ustr );1026 result = func( hwnd, WM_GETTEXT, ( WPARAM )( result + 1 ), ( LPARAM )ustr ); 1020 1027 result = lstrlenWtoA( ustr, result ); 1021 1028 HeapFree( GetProcessHeap(), 0, ustr ); … … 1026 1033 { 1027 1034 LPWSTR ustr = ( LPWSTR )HeapAlloc( GetProcessHeap(), 0, ( result + 1 ) * sizeof( WCHAR )); 1028 result = WrapCallback4(func,hwnd, LB_GETTEXT, wParam, ( LPARAM )ustr );1035 result = func( hwnd, LB_GETTEXT, wParam, ( LPARAM )ustr ); 1029 1036 if( result != LB_ERR ) 1030 1037 result = lstrlenWtoA( ustr, result ); … … 1038 1045 { 1039 1046 LPWSTR ustr = ( LPWSTR )HeapAlloc( GetProcessHeap(), 0, ( result + 1 ) * sizeof( WCHAR )); 1040 result = WrapCallback4(func,hwnd, CB_GETLBTEXT, wParam, ( LPARAM )ustr );1047 result = func( hwnd, CB_GETLBTEXT, wParam, ( LPARAM )ustr ); 1041 1048 if( result != CB_ERR ) 1042 1049 result = lstrlenWtoA( ustr, result ); … … 1064 1071 if (WINPROC_MapMsg32WTo32A( hwnd, msg, &wParam, &lParam ) == -1) return 0; 1065 1072 1066 result = WrapCallback4(func,hwnd, msg, wParam, lParam );1073 result = func( hwnd, msg, wParam, lParam ); 1067 1074 WINPROC_UnmapMsg32WTo32A( hwnd, msg, wParam, lParam ); 1068 1075 … … 1075 1082 { 1076 1083 LPSTR astr = ( LPSTR )HeapAlloc( GetProcessHeap(), 0, result + 1 ); 1077 result = WrapCallback4(func,hwnd, WM_GETTEXT, ( WPARAM )( result + 1 ), ( LPARAM )astr );1084 result = func( hwnd, WM_GETTEXT, ( WPARAM )( result + 1 ), ( LPARAM )astr ); 1078 1085 result = lstrlenAtoW( astr, result ); 1079 1086 HeapFree( GetProcessHeap(), 0, astr ); … … 1084 1091 { 1085 1092 LPSTR astr = ( LPSTR )HeapAlloc( GetProcessHeap(), 0, result + 1 ); 1086 result = WrapCallback4(func,hwnd, LB_GETTEXT, wParam, ( LPARAM )astr );1093 result = func( hwnd, LB_GETTEXT, wParam, ( LPARAM )astr ); 1087 1094 if( result != LB_ERR ) 1088 1095 result = lstrlenAtoW( astr, result ); … … 1096 1103 { 1097 1104 LPSTR astr = ( LPSTR )HeapAlloc( GetProcessHeap(), 0, result + 1 ); 1098 result = WrapCallback4(func,hwnd, CB_GETLBTEXT, wParam, ( LPARAM )astr );1105 result = func( hwnd, CB_GETLBTEXT, wParam, ( LPARAM )astr ); 1099 1106 if( result != CB_ERR ) 1100 1107 result = lstrlenAtoW( astr, result );
Note:
See TracChangeset
for help on using the changeset viewer.