diff options
| -rw-r--r-- | cocoa/ScintillaCocoa.mm | 2 | ||||
| -rw-r--r-- | gtk/ScintillaGTK.cxx | 2 | ||||
| -rw-r--r-- | qt/ScintillaEditBase/ScintillaEditBase.cpp | 2 | ||||
| -rw-r--r-- | src/Editor.cxx | 13 | ||||
| -rw-r--r-- | src/Editor.h | 2 | ||||
| -rw-r--r-- | win32/ScintillaWin.cxx | 2 | 
6 files changed, 16 insertions, 7 deletions
| diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm index 2abf1d3e0..76614ce3e 100644 --- a/cocoa/ScintillaCocoa.mm +++ b/cocoa/ScintillaCocoa.mm @@ -2221,7 +2221,7 @@ void ScintillaCocoa::SelectOnlyMainSelection()   */  void ScintillaCocoa::ConvertSelectionVirtualSpace()  { -  FillVirtualSpace(); +  ClearBeforeTentativeStart();  }  //-------------------------------------------------------------------------------------------------- diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index 0c96d6024..01667d849 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -2508,7 +2508,7 @@ void ScintillaGTK::PreeditChangedInlineThis() {  		} else {  			// No tentative undo means start of this composition so  			// fill in any virtual spaces. -			FillVirtualSpace(); +			ClearBeforeTentativeStart();  		}  		PreEditString preeditStr(im_context); diff --git a/qt/ScintillaEditBase/ScintillaEditBase.cpp b/qt/ScintillaEditBase/ScintillaEditBase.cpp index d462ddac7..2a2bfc9de 100644 --- a/qt/ScintillaEditBase/ScintillaEditBase.cpp +++ b/qt/ScintillaEditBase/ScintillaEditBase.cpp @@ -448,7 +448,7 @@ void ScintillaEditBase::inputMethodEvent(QInputMethodEvent *event)  	} else {  		// No tentative undo means start of this composition so  		// Fill in any virtual spaces. -		sqt->FillVirtualSpace(); +		sqt->ClearBeforeTentativeStart();  	}  	sqt->view.imeCaretBlockOverride = false; diff --git a/src/Editor.cxx b/src/Editor.cxx index 3efd279df..2c613090c 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -1948,12 +1948,21 @@ void Editor::AddCharUTF(const char *s, unsigned int len, bool treatAsDBCS) {  	}  } -void Editor::FillVirtualSpace() { +void Editor::ClearBeforeTentativeStart() {  	// Make positions for the first composition string. -	for (size_t r=0; r<sel.Count(); r++) { +	for (size_t r = 0; r<sel.Count(); r++) {  		if (!RangeContainsProtected(sel.Range(r).Start().Position(),  			sel.Range(r).End().Position())) {  			int positionInsert = sel.Range(r).Start().Position(); +			if (!sel.Range(r).Empty()) { +				if (sel.Range(r).Length()) { +					pdoc->DeleteChars(positionInsert, sel.Range(r).Length()); +					sel.Range(r).ClearVirtualSpace(); +				} else { +					// Range is all virtual so collapse to start of virtual space +					sel.Range(r).MinimizeVirtualSpace(); +				} +			}  			InsertSpace(positionInsert, sel.Range(r).caret.VirtualSpace());  			sel.Range(r).ClearVirtualSpace();  		} diff --git a/src/Editor.h b/src/Editor.h index fdc86f9f6..7b88cbab0 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -392,7 +392,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	int InsertSpace(int position, unsigned int spaces);  	void AddChar(char ch);  	virtual void AddCharUTF(const char *s, unsigned int len, bool treatAsDBCS=false); -	void FillVirtualSpace(); +	void ClearBeforeTentativeStart();  	void InsertPaste(const char *text, int len);  	enum PasteShape { pasteStream=0, pasteRectangular = 1, pasteLine = 2 };  	void InsertPasteShape(const char *text, int len, PasteShape shape); diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 9aaf0552c..7dd7d410b 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -976,7 +976,7 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {  	} else {  		// No tentative undo means start of this composition so  		// fill in any virtual spaces. -		FillVirtualSpace(); +		ClearBeforeTentativeStart();  	}  	view.imeCaretBlockOverride = false; | 
