[LyX/master] Fix ticket #13345 (#3)
Koji Yokota
yokota at lyx.org
Tue Jul 7 00:06:33 UTC 2026
commit b6c5fe401d3e3d838a8583b0058759886ff71125
Author: Koji Yokota <yokota at lyx.org>
Date: Tue Jul 7 08:57:12 2026 +0900
Fix ticket #13345 (#3)
Many thanks to JMarc and Jürgen
---
src/frontends/qt/GuiInputMethod.cpp | 20 ++++++--------------
src/frontends/qt/GuiInputMethod.h | 6 ++++++
2 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/src/frontends/qt/GuiInputMethod.cpp b/src/frontends/qt/GuiInputMethod.cpp
index 8d08821856..0ef7e9b342 100644
--- a/src/frontends/qt/GuiInputMethod.cpp
+++ b/src/frontends/qt/GuiInputMethod.cpp
@@ -607,7 +607,7 @@ pos_type GuiInputMethod::setTextFormat(const QInputMethodEvent::Attribute & it,
pos_type GuiInputMethod::pickNextSegFromTurnout(pos_type next_seg_pos, size_type length,
QTextCharFormat * cf)
{
- std::vector<PreeditSegment> to_erase;
+ auto to_erase = d->seg_turnout_.end();
std::vector<PreeditSegment> carryover;
bool is_matched = false;
@@ -717,7 +717,7 @@ pos_type GuiInputMethod::pickNextSegFromTurnout(pos_type next_seg_pos, size_type
next_seg_pos += length;
if (d->seg_turnout_.size() > 1)
- to_erase.push_back(*past_attr);
+ to_erase = past_attr;
is_matched = true;
break; // assuming no duplicates in seg_turnout_
}
@@ -731,18 +731,10 @@ pos_type GuiInputMethod::pickNextSegFromTurnout(pos_type next_seg_pos, size_type
<< d->seg_turnout_.back().start_
+ d->seg_turnout_.back().length_ << ")");
d->seg_turnout_.pop_back();
- } else if (d->seg_turnout_.size() > 1) {
- for (auto it = to_erase.begin(); it != to_erase.end(); it++) {
- LYXERR(Debug::KEY, "Removing from preedit turnout: ["
- << it->start_ << ", "
- << it->start_ + it->length_ << ")");
- for (auto it2 = d->seg_turnout_.begin();
- it2 != d->seg_turnout_.end();)
- if (*it == *it2)
- d->seg_turnout_.erase(it2);
- else
- ++it2;
- }
+ } else if (to_erase != d->seg_turnout_.end()) {
+ LYXERR(Debug::KEY, "Removing from preedit turnout: [" <<
+ to_erase->start_ << ", " << to_erase->start_ + to_erase->length_ << ")");
+ d->seg_turnout_.erase(to_erase);
}
}
// Append the remainder to d->seg_turnout_
diff --git a/src/frontends/qt/GuiInputMethod.h b/src/frontends/qt/GuiInputMethod.h
index 36b129f63f..c8ce0a873b 100644
--- a/src/frontends/qt/GuiInputMethod.h
+++ b/src/frontends/qt/GuiInputMethod.h
@@ -52,6 +52,12 @@ public:
return start_ == another.start_ && length_ == another.length_ &&
char_format_ == another.char_format_;
}
+ PreeditSegment & operator=(const PreeditSegment & another) {
+ start_ = another.start_;
+ length_ = another.length_;
+ char_format_ = another.char_format_;
+ return *this;
+ }
};
struct PreeditStyle {
More information about the lyx-cvs
mailing list