summaryrefslogtreecommitdiffstats
path: root/src/widgets/tqtextedit.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2025-01-30 23:40:14 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2025-02-13 22:39:34 +0900
commit9c648bea9bfb1113c070a05b36f78ff006d0877a (patch)
tree8318170d8f1fddf60e39686f5e3b872a6a610472 /src/widgets/tqtextedit.cpp
parent98a90524a1d706f1143f39fd707b620be3184042 (diff)
downloadtqt-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.cpp16
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();