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;