[aquaskk-dev 42] Re: 変換文字列のプロパティについて

Back to archive index

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;



aquaskk-dev メーリングリストの案内
Back to archive index