Tomotaka SUWA
t-suw****@users*****
2006年 3月 29日 (水) 23:36:59 JST
諏訪です。 頂いた diff がうまく当たらなかったので、目で patch しながら当ててみまし た。末尾に diff を添付しますので、これで正しいかどうか確認してもらえる でしょうか。 ただ、この patch を当てた状態では、Rosetta 経由の IE で正しく入力できな い状態になります。Cocoa アプリと Carbon アプリで何か違いがあるのかもし れませんが、ちょっと今は追う時間がありません。 よろしくお願いします。 -- Tomotaka SUWA Index: BIMInputEvents.cpp =================================================================== RCS file: /cvsroot/aquaskk/AquaSKK/BIMInputEvents.cpp,v retrieving revision 1.2.2.1 retrieving revision 1.2.2.2 diff -u -r1.2.2.1 -r1.2.2.2 --- BIMInputEvents.cpp 7 Jan 2006 07:22:28 -0000 1.2.2.1 +++ BIMInputEvents.cpp 28 Mar 2006 16:26:03 -0000 1.2.2.2 @@ -1,5 +1,5 @@ /* - $Id: BIMInputEvents.cpp,v 1.2.2.1 2006/01/07 07:22:28 t-suwa Exp $ + $Id: BIMInputEvents.cpp,v 1.2.2.2 2006/03/28 16:26:03 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -154,46 +154,64 @@ } } - if(error == noErr) { - error = SetEventParameter(event, kEventParamTextInputSendUpdateRng, - typeTextRangeArray, sizeof(short) + sizeof(TextRange) * 2, - //typeTextRangeArray, sizeof( short ) + sizeof( TextRange ) * 1, - updateRangePtr); - } + if(fixLength == 0) { + if(error == noErr) { + error = SetEventParameter(event, kEventParamTextInputSendUpdateRng, + typeTextRangeArray, sizeof(short) + sizeof(TextRange) * 2, updateRangePtr); + } - // ハイライトの範囲とキャレットの位置を指定。 - if(error == noErr) { - hiliteRangePtr = (TextRangeArrayPtr)NewPtrClear(sizeof(short) + sizeof(TextRange) * 2); - if(hiliteRangePtr) { - hiliteRangePtr->fNumOfRanges = 2; - hiliteRangePtr->fRange[0].fStart = 0; - hiliteRangePtr->fRange[0].fEnd = (*inSessionHandle)->fInputBufferCount * sizeof( UniChar ); + // ハイライトの範囲とキャレットの位置を指定。 + if(error == noErr) { + hiliteRangePtr = (TextRangeArrayPtr)NewPtrClear(sizeof(short) + sizeof(TextRange) * 2); + if(hiliteRangePtr) { + hiliteRangePtr->fNumOfRanges = 2; + hiliteRangePtr->fRange[0].fStart = 0; + hiliteRangePtr->fRange[0].fEnd = (*inSessionHandle)->fInputBufferCount * sizeof(UniChar); #if MAC_OS_X_VERSION_MAX_ALLOWED>=1040 - if (fixLength > 0) - hiliteRangePtr->fRange[0].fHiliteStyle = kTSMHiliteConvertedText; - else hiliteRangePtr->fRange[0].fHiliteStyle = kTSMHiliteRawText; - - hiliteRangePtr->fRange[1].fStart = caret_position; - hiliteRangePtr->fRange[1].fEnd = caret_position; - hiliteRangePtr->fRange[1].fHiliteStyle = kTSMHiliteCaretPosition; + hiliteRangePtr->fRange[1].fStart = caret_position; + hiliteRangePtr->fRange[1].fEnd = caret_position; + hiliteRangePtr->fRange[1].fHiliteStyle = kTSMHiliteCaretPosition; #else - if (fixLength > 0) - hiliteRangePtr->fRange[0].fHiliteStyle = kConvertedText; - else hiliteRangePtr->fRange[0].fHiliteStyle = kRawText; - - hiliteRangePtr->fRange[1].fStart = caret_position; - hiliteRangePtr->fRange[1].fEnd = caret_position; - hiliteRangePtr->fRange[1].fHiliteStyle = kCaretPosition; + hiliteRangePtr->fRange[1].fStart = caret_position; + hiliteRangePtr->fRange[1].fEnd = caret_position; + hiliteRangePtr->fRange[1].fHiliteStyle = kCaretPosition; #endif - } else { - error = memFullErr; + } else { + error = memFullErr; + } + } + if(error == noErr) { + error = SetEventParameter(event, kEventParamTextInputSendHiliteRng, typeTextRangeArray, + sizeof(short) + sizeof(TextRange) * 2, hiliteRangePtr); + } + } else { + if(error == noErr) { + error = SetEventParameter(event, kEventParamTextInputSendUpdateRng, + typeTextRangeArray, sizeof(short) + sizeof(TextRange) * 1, updateRangePtr); + } + + // ハイライトの範囲とキャレットの位置を指定。 + if(error == noErr) { + hiliteRangePtr = (TextRangeArrayPtr)NewPtrClear(sizeof(short) + sizeof(TextRange) * 1); + if(hiliteRangePtr) { + hiliteRangePtr->fNumOfRanges = 1; + hiliteRangePtr->fRange[0].fStart = caret_position; + hiliteRangePtr->fRange[0].fEnd = caret_position; +#if MAC_OS_X_VERSION_MAX_ALLOWED>=1040 + hiliteRangePtr->fRange[0].fHiliteStyle = kTSMHiliteCaretPosition; +#else + hiliteRangePtr->fRange[0].fHiliteStyle = kCaretPosition; +#endif + } else { + error = memFullErr; + } + } + if(error == noErr) { + error = SetEventParameter(event, kEventParamTextInputSendHiliteRng, typeTextRangeArray, + sizeof(short) + sizeof(TextRange) * 1, hiliteRangePtr); } - } - if(error == noErr) { - error = SetEventParameter(event, kEventParamTextInputSendHiliteRng, typeTextRangeArray, - sizeof(short) + sizeof(TextRange) * 2, hiliteRangePtr); } pinRange.fStart = 0;