[LyX/master] Fix condition for IM composition mode

Koji Yokota <[email protected]> Fri, 12 Jun 2026 08:41:47 +0000
Newsgroups gmane.editors.lyx.cvs
Message-ID <[email protected]>
commit 1a01d6c04b2d0458ed0459b09bbf3f21fe06aa07
Author: Koji Yokota <[email protected]>
Date:   Fri Jun 12 16:01:52 2026 +0900

    Fix condition for IM composition mode
---
 src/frontends/qt/GuiInputMethod.cpp | 25 +++++--------------------
 1 file changed, 5 insertions(+), 20 deletions(-)

diff --git a/src/frontends/qt/GuiInputMethod.cpp b/src/frontends/qt/GuiInputMethod.cpp
index e7072024a3..61c42c688f 100644
--- a/src/frontends/qt/GuiInputMethod.cpp
+++ b/src/frontends/qt/GuiInputMethod.cpp
@@ -483,32 +483,17 @@ void GuiInputMethod::setPreeditStyle(
 	}
 #endif // QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
 
-	// composing mode: it has no focused segments
-	// composing mode in Qt version 6 or later gives focus_style->length == 0 and
-	// focus_style->start > d->preedit_str_.length() on MacOS (undocumented)
 	d->im_state_.composing_mode_ =
-	        (d->style_.segments_.size() == 0 && focus_style != nullptr)
-	        || (focus_style != nullptr && focus_style->length == 0)
-	        || (focus_style == nullptr && d->style_.segments_.size() <= 1);
+	        d->caret_rel_pos_ == (pos_type)d->preedit_str_.length();
 
 	if (d->im_state_.composing_mode_) {
+		if (d->im_off_in_math_ ||
+		        d->preedit_str_.empty() || !d->style_.segments_.empty())
+			return;
 		LYXERR(Debug::KEY, "preedit is in the composing mode");
 		QTextCharFormat char_format;
-		int start = 0;
-		size_type length = 0;
-		if (focus_style != nullptr && focus_style->length != 0) {
-			char_format = focus_style->value.value<QTextCharFormat>();
-			char_format.setFontUnderline(true);
-			start = focus_style->start;
-			length = (size_type)focus_style->length;
-		} else if (!d->im_off_in_math_ && !d->preedit_str_.empty() &&
-		           d->style_.segments_.empty()) {
-			// dead keys on MacOS give no char format having preedit strings
-			length = d->preedit_str_.length();
-		} else
-			return;
 		conformToSurroundingFont(char_format);
-		PreeditSegment seg = {start, length, char_format};
+		PreeditSegment seg = {0, d->preedit_str_.length(), char_format};
 		d->style_.segments_.push_back(seg);
 	} else {
 		LYXERR(Debug::KEY, "preedit is in the completing mode");
-- 
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs