void FlatTextarea::onDocumentContentsChanged() { if (_replacingEmojis) return; if (!_insertions.isEmpty()) { if (document()->availableRedoSteps() > 0) { _insertions.clear(); } else { _replacingEmojis = true; do { Insertion i = _insertions.front(); _insertions.pop_front(); if (i.second > 0) { processDocumentContentsChange(i.first, i.second); } } while (!_insertions.isEmpty()); _replacingEmojis = false; } } QString curText(getText()); if (_oldtext != curText) { _oldtext = curText; emit changed(); } updatePlaceholder(); if (App::wnd()) App::wnd()->updateGlobalMenu(); }
void InputField::onDocumentContentsChange(int position, int charsRemoved, int charsAdded) { if (_replacingEmojis) return; if (_inner.document()->availableRedoSteps() > 0) return; const int takeBack = 3; position -= takeBack; charsAdded += takeBack; if (position < 0) { charsAdded += position; position = 0; } if (charsAdded <= 0) return; // _insertions.push_back(Insertion(position, charsAdded)); _replacingEmojis = true; QSizeF s = _inner.document()->pageSize(); processDocumentContentsChange(position, charsAdded); if (_inner.document()->pageSize() != s) { _inner.document()->setPageSize(s); } _replacingEmojis = false; }
void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int charsAdded) { if (_correcting) return; QTextCursor(document()->docHandle(), 0).joinPreviousEditBlock(); _correcting = true; if (_maxLength >= 0) { QTextCursor c(document()->docHandle(), 0); c.movePosition(QTextCursor::End); int32 fullSize = c.position(), toRemove = fullSize - _maxLength; if (toRemove > 0) { if (toRemove > charsAdded) { if (charsAdded) { c.setPosition(position); c.setPosition((position + charsAdded), QTextCursor::KeepAnchor); c.removeSelectedText(); } c.setPosition(fullSize - (toRemove - charsAdded)); c.setPosition(fullSize, QTextCursor::KeepAnchor); c.removeSelectedText(); } else { c.setPosition(position + (charsAdded - toRemove)); c.setPosition(position + charsAdded, QTextCursor::KeepAnchor); c.removeSelectedText(); } } } _correcting = false; if (!_links.isEmpty()) { bool changed = false; for (LinkRanges::iterator i = _links.begin(); i != _links.end();) { if (i->first + i->second <= position) { ++i; } else if (i->first >= position + charsRemoved) { i->first += charsAdded - charsRemoved; ++i; } else { i = _links.erase(i); changed = true; } } if (changed) emit linksChanged(); } if (document()->availableRedoSteps() > 0) { QTextCursor(document()->docHandle(), 0).endEditBlock(); return; } const int takeBack = 3; position -= takeBack; charsAdded += takeBack; if (position < 0) { charsAdded += position; position = 0; } if (charsAdded <= 0) { QTextCursor(document()->docHandle(), 0).endEditBlock(); return; } _correcting = true; QSizeF s = document()->pageSize(); processDocumentContentsChange(position, charsAdded); if (document()->pageSize() != s) { document()->setPageSize(s); } _correcting = false; QTextCursor(document()->docHandle(), 0).endEditBlock(); }