diff options
Diffstat (limited to 'win32/ScintillaWin.cxx')
-rw-r--r-- | win32/ScintillaWin.cxx | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index ccf7402a1..1eae2e1e8 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -410,8 +410,10 @@ static BOOL IsNT() { sptr_t ScintillaWin::HandleComposition(uptr_t wParam, sptr_t lParam) { #ifdef __DMC__ + // Digital Mars compiler does not include Imm library return 0; #else + sptr_t ret; if ((lParam & GCS_RESULTSTR) && (IsNT())) { HIMC hIMC = ::ImmGetContext(MainHWND()); if (hIMC) { @@ -436,10 +438,22 @@ sptr_t ScintillaWin::HandleComposition(uptr_t wParam, sptr_t lParam) { } ::ImmReleaseContext(MainHWND(), hIMC); } - return 0; + ret = 0; } else { - return ::DefWindowProc(MainHWND(), WM_IME_COMPOSITION, wParam, lParam); + ret = ::DefWindowProc(MainHWND(), WM_IME_COMPOSITION, wParam, lParam); + } + if ((lParam & GCS_RESULTSTR)) { + HIMC hIMC = ::ImmGetContext(MainHWND()); + Point pos = LocationFromPosition(currentPos); + COMPOSITIONFORM CompForm; + CompForm.dwStyle = CFS_POINT; + CompForm.ptCurrentPos.x = pos.x; + CompForm.ptCurrentPos.y = pos.y; + ::ImmSetCompositionWindow(hIMC, &CompForm); + ::ImmReleaseContext(MainHWND(), hIMC); + DropCaret(); } + return ret; #endif } @@ -1355,6 +1369,7 @@ DropTarget::DropTarget() { */ void ScintillaWin::ImeStartComposition() { #ifndef __DMC__ + // Digital Mars compiler does not include Imm library if (caret.active) { // Move IME Window to current caret position HIMC hIMC = ::ImmGetContext(MainHWND()); @@ -1405,7 +1420,7 @@ void ScintillaWin::ImeEndComposition() { void ScintillaWin::AddCharBytes(char b0, char b1) { int inputCodePage = InputCodePage(); - if (inputCodePage) { + if (inputCodePage && IsUnicodeMode()) { char utfval[4]="\0\0\0"; char ansiChars[3]; ansiChars[0] = b0; @@ -1417,9 +1432,14 @@ void ScintillaWin::AddCharBytes(char b0, char b1) { UTF8FromUCS2(wcs, 1, utfval, len); utfval[len] = '\0'; AddCharUTF(utfval,len); + } else if (b1) { + char dbcsChars[3]; + dbcsChars[0] = b0; + dbcsChars[1] = b1; + dbcsChars[2] = '\0'; + AddCharUTF(dbcsChars, strlen(dbcsChars), true); } else { AddChar(b0); - AddChar(b1); } } |