aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/EditView.cxx3
-rw-r--r--src/EditView.h2
-rw-r--r--src/Editor.cxx2
-rw-r--r--win32/ScintillaWin.cxx17
4 files changed, 8 insertions, 16 deletions
diff --git a/src/EditView.cxx b/src/EditView.cxx
index 58d8a1415..b033c7cf6 100644
--- a/src/EditView.cxx
+++ b/src/EditView.cxx
@@ -177,6 +177,7 @@ EditView::EditView() {
lineWidthMaxSeen = 0;
additionalCaretsBlink = true;
additionalCaretsVisible = true;
+ imeCaretBlockOverride = false;
pixmapLine = 0;
pixmapIndentGuide = 0;
pixmapIndentGuideHighlight = 0;
@@ -1117,7 +1118,7 @@ void EditView::DrawCarets(Surface *surface, const EditModel &model, const ViewSt
rcCaret.top = rcCaret.bottom - 2;
rcCaret.left = xposCaret + 1;
rcCaret.right = rcCaret.left + widthOverstrikeCaret - 1;
- } else if (vsDraw.caretStyle == CARETSTYLE_BLOCK) {
+ } else if ((vsDraw.caretStyle == CARETSTYLE_BLOCK) || imeCaretBlockOverride) {
/* Block caret */
rcCaret.left = xposCaret;
if (!caretAtEOL && !caretAtEOF && (ll->chars[offset] != '\t') && !(IsControlCharacter(ll->chars[offset]))) {
diff --git a/src/EditView.h b/src/EditView.h
index ea59ac03a..7d64aff90 100644
--- a/src/EditView.h
+++ b/src/EditView.h
@@ -68,6 +68,8 @@ public:
bool additionalCaretsBlink;
bool additionalCaretsVisible;
+ bool imeCaretBlockOverride;
+
Surface *pixmapLine;
Surface *pixmapIndentGuide;
Surface *pixmapIndentGuideHighlight;
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 2e966a4e5..e0fc18162 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -1246,7 +1246,7 @@ Editor::XYScrollPosition Editor::XYScrollToMakeVisible(const SelectionRange &ran
newXY.xOffset = static_cast<int>(pt.x + xOffset - rcClient.left) - 2;
} else if (pt.x + xOffset >= rcClient.right + newXY.xOffset) {
newXY.xOffset = static_cast<int>(pt.x + xOffset - rcClient.right) + 2;
- if (vs.caretStyle == CARETSTYLE_BLOCK) {
+ if ((vs.caretStyle == CARETSTYLE_BLOCK) || view.imeCaretBlockOverride) {
// Ensure we can see a good portion of the block caret
newXY.xOffset += static_cast<int>(vs.aveCharWidth);
}
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index bec0fe70c..51d4cbf53 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -205,8 +205,6 @@ class ScintillaWin :
static HINSTANCE hInstance;
- int tmpCaretStyle;
-
#if defined(USE_D2D)
ID2D1HwndRenderTarget *pRenderTarget;
bool renderTargetValid;
@@ -347,8 +345,6 @@ ScintillaWin::ScintillaWin(HWND hwnd) {
TrackMouseEventFn = 0;
SetCoalescableTimerFn = 0;
- tmpCaretStyle = 0;
-
linesPerScroll = 0;
wheelDelta = 0; // Wheel delta from roll
@@ -726,7 +722,7 @@ sptr_t ScintillaWin::HandleCompositionKoreanIME(uptr_t, sptr_t lParam) {
return 0;
}
- const int maxLenInputIME = 4;
+ const int maxLenInputIME = 200;
wchar_t wcs[maxLenInputIME];
int wides = 0;
bool compstrExist = false;
@@ -742,6 +738,7 @@ sptr_t ScintillaWin::HandleCompositionKoreanIME(uptr_t, sptr_t lParam) {
inOverstrike = tmpOverstrike;
}
+ view.imeCaretBlockOverride = false;
if (lParam & GCS_COMPSTR) {
long bytes = ::ImmGetCompositionStringW
(hIMC, GCS_COMPSTR, wcs, maxLenInputIME);
@@ -770,7 +767,7 @@ sptr_t ScintillaWin::HandleCompositionKoreanIME(uptr_t, sptr_t lParam) {
}
if (compstrExist) {
- vs.caretStyle = CARETSTYLE_BLOCK;
+ view.imeCaretBlockOverride = true;
bool tmpRecordingMacro = recordingMacro;
recordingMacro = false;
@@ -1244,20 +1241,12 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case WM_IME_STARTCOMPOSITION: // dbcs
if (KoreanIME()) {
- tmpCaretStyle = vs.caretStyle;
- if (vs.caretStyle > CARETSTYLE_BLOCK) {
- vs.caretStyle= CARETSTYLE_LINE;
- }
return 0;
}
ImeStartComposition();
return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);
case WM_IME_ENDCOMPOSITION: // dbcs
- if (KoreanIME()) {
- vs.caretStyle = tmpCaretStyle;
- return 0;
- }
ImeEndComposition();
return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);