void QTextDocumentPrivate::endEditBlock() { Q_Q(QTextDocument); if (--editBlock) return; if (undoEnabled && undoState > 0) undoStack[undoState - 1].block = false; if (framesDirty) scan_frames(docChangeFrom, docChangeOldLength, docChangeLength); if (lout && docChangeFrom >= 0) { if (!inContentsChange) { inContentsChange = true; emit q->contentsChange(docChangeFrom, docChangeOldLength, docChangeLength); inContentsChange = false; } lout->documentChanged(docChangeFrom, docChangeOldLength, docChangeLength); } docChangeFrom = -1; if (needsEnsureMaximumBlockCount) { needsEnsureMaximumBlockCount = false; if (ensureMaximumBlockCount()) { // if ensureMaximumBlockCount() returns true // it will have called endEditBlock() and // compressPieceTable() itself, so we return here // to prevent getting two contentsChanged emits return; } } while (!changedCursors.isEmpty()) { QTextCursorPrivate *curs = changedCursors.takeFirst(); emit q->cursorPositionChanged(QTextCursor(curs)); } contentsChanged(); if (blocks.numNodes() != lastBlockCount) { lastBlockCount = blocks.numNodes(); emit q->blockCountChanged(lastBlockCount); } if (!undoEnabled && unreachableCharacterCount) compressPieceTable(); }
int main() { scan_frames(1, callback); }