diff options
| author | Neil <nyamatongwe@gmail.com> | 2014-07-24 12:54:03 +1000 | 
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2014-07-24 12:54:03 +1000 | 
| commit | 7afb5fb389fe0c59e6952e1f5b6861105fab3bad (patch) | |
| tree | c442c43737c8d77ce966c18424ad15da0fc72664 | |
| parent | d5e666a8e7f6297a9838793611086b048d04fd58 (diff) | |
| download | scintilla-mirror-7afb5fb389fe0c59e6952e1f5b6861105fab3bad.tar.gz | |
Using separate variable imeCaretBlockOverride for IME mode instead of changing
caretStyle as there could be confusion if the container changes caret style.
| -rw-r--r-- | src/EditView.cxx | 3 | ||||
| -rw-r--r-- | src/EditView.h | 2 | ||||
| -rw-r--r-- | src/Editor.cxx | 2 | ||||
| -rw-r--r-- | win32/ScintillaWin.cxx | 17 | 
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); | 
