Add a workaround for invalid Qt signal data.
This commit is contained in:
parent
4d2f17d9fc
commit
6aa6a143bf
2 changed files with 26 additions and 7 deletions
|
|
@ -2084,7 +2084,7 @@ void InputField::processFormatting(int insertPosition, int insertEnd) {
|
|||
break;
|
||||
}
|
||||
|
||||
if (breakTagOnNotLetter && !ch->isLetter()) {
|
||||
if (breakTagOnNotLetter && !ch->isLetterOrNumber()) {
|
||||
// Remove tag name till the end if no current action is prepared.
|
||||
if (action.type != ActionType::Invalid) {
|
||||
break;
|
||||
|
|
@ -2185,6 +2185,22 @@ void InputField::onDocumentContentsChange(
|
|||
return;
|
||||
}
|
||||
|
||||
// In case of input method events Qt emits
|
||||
// document content change signals for a whole
|
||||
// text block where the even took place.
|
||||
// This breaks our wysiwyg markup, so we adjust
|
||||
// the parameters to match the real change.
|
||||
if (_inputMethodCommit.has_value()
|
||||
&& charsAdded > _inputMethodCommit->size()
|
||||
&& charsRemoved > 0) {
|
||||
const auto inBlockBefore = charsAdded - _inputMethodCommit->size();
|
||||
if (charsRemoved >= inBlockBefore) {
|
||||
charsAdded -= inBlockBefore;
|
||||
charsRemoved -= inBlockBefore;
|
||||
position += inBlockBefore;
|
||||
}
|
||||
}
|
||||
|
||||
const auto document = _inner->document();
|
||||
|
||||
// Qt bug workaround https://bugreports.qt.io/browse/QTBUG-49062
|
||||
|
|
@ -2882,8 +2898,9 @@ void InputField::inputMethodEventInner(QInputMethodEvent *e) {
|
|||
_lastPreEditText = preedit;
|
||||
startPlaceholderAnimation();
|
||||
}
|
||||
const auto text = e->commitString();
|
||||
_inputMethodCommit = e->commitString();
|
||||
_inner->QTextEdit::inputMethodEvent(e);
|
||||
const auto text = *base::take(_inputMethodCommit);
|
||||
if (!processMarkdownReplaces(text)) {
|
||||
processInstantReplaces(text);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -462,19 +462,21 @@ private:
|
|||
int _maxLength = -1;
|
||||
int _minHeight = -1;
|
||||
int _maxHeight = -1;
|
||||
bool _forcePlaceholderHidden = false;
|
||||
bool _reverseMarkdownReplacement = false;
|
||||
|
||||
const std::unique_ptr<Inner> _inner;
|
||||
|
||||
TextWithTags _lastTextWithTags;
|
||||
std::vector<MarkdownTag> _lastMarkdownTags;
|
||||
QString _lastPreEditText;
|
||||
Fn<bool(
|
||||
EditLinkSelection selection,
|
||||
QString text,
|
||||
QString link,
|
||||
EditLinkAction action)> _editLinkCallback;
|
||||
TextWithTags _lastTextWithTags;
|
||||
std::vector<MarkdownTag> _lastMarkdownTags;
|
||||
QString _lastPreEditText;
|
||||
std::optional<QString> _inputMethodCommit;
|
||||
|
||||
bool _forcePlaceholderHidden = false;
|
||||
bool _reverseMarkdownReplacement = false;
|
||||
|
||||
// Tags list which we should apply while setText() call or insert from mime data.
|
||||
TagList _insertedTags;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue