diff options
| author | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-01-30 23:40:14 +0900 |
|---|---|---|
| committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-02-13 22:39:34 +0900 |
| commit | 9c648bea9bfb1113c070a05b36f78ff006d0877a (patch) | |
| tree | 8318170d8f1fddf60e39686f5e3b872a6a610472 /src/widgets/tqtextedit.cpp | |
| parent | 98a90524a1d706f1143f39fd707b620be3184042 (diff) | |
| download | tqt-9c648bea9bfb1113c070a05b36f78ff006d0877a.tar.gz tqt-9c648bea9bfb1113c070a05b36f78ff006d0877a.zip | |
Fix editing of text containing surrogate characters.
This relates to issue #162.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'src/widgets/tqtextedit.cpp')
| -rw-r--r-- | src/widgets/tqtextedit.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/widgets/tqtextedit.cpp b/src/widgets/tqtextedit.cpp index cc88b3dd9..7ea000f21 100644 --- a/src/widgets/tqtextedit.cpp +++ b/src/widgets/tqtextedit.cpp @@ -1782,8 +1782,20 @@ void TQTextEdit::doKeyboardAction( KeyboardAction action ) undoRedoInfo.index = cursor->index(); undoRedoInfo.d->text = TQString::null; } - undoRedoInfo.d->text.insert( 0, cursor->paragraph()->at( cursor->index()-1 ), TRUE ); - undoRedoInfo.index = cursor->index()-1; + int cur_idx = cursor->index(); + const TQTextParagraph *para = cursor->paragraph(); + if (para->at(cur_idx - 1)->c.isLowSurrogate() && cur_idx > 1 && + para->at(cur_idx - 2)->c.isHighSurrogate()) + { + undoRedoInfo.d->text.insert( 0, para->at(cur_idx - 1), TRUE ); + undoRedoInfo.d->text.insert( 0, para->at(cur_idx - 2), TRUE ); + undoRedoInfo.index = cursor->index() - 2; + } + else + { + undoRedoInfo.d->text.insert( 0, para->at(cur_idx - 1), TRUE ); + undoRedoInfo.index = cursor->index() - 1; + } } cursor->removePreviousChar(); lastFormatted = cursor->paragraph(); |
