aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cocoa/ScintillaCocoa.mm2
-rw-r--r--gtk/ScintillaGTK.cxx2
-rw-r--r--qt/ScintillaEditBase/ScintillaEditBase.cpp2
-rw-r--r--src/Editor.cxx13
-rw-r--r--src/Editor.h2
-rw-r--r--win32/ScintillaWin.cxx2
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;