45 lines
1.8 KiB
Diff
45 lines
1.8 KiB
Diff
From 34c297faca93e1286573b2a01127e4e7af00aff2 Mon Sep 17 00:00:00 2001
|
|
From: Jiang Jiang <jiang.jiang@nokia.com>
|
|
Date: Mon, 24 Jan 2011 19:09:38 +0100
|
|
Subject: [PATCH] Fix cursor position adjustment when removing strings
|
|
|
|
Commit 0ba1b4d0 introduced a regression to QTextDocument: it postponed
|
|
cursor position adjustment until the move operation is done, but
|
|
contentsChanged will be triggered by finishEdit() in this move
|
|
operation, thus cursor positions in this signal handler will be in
|
|
inconsistent states (normally we should first update cursor position
|
|
then trigger contentsChanged). In this case we should also postpone
|
|
finishEdit() handling after cursor positions have been adjusted, then
|
|
the states expose to applications will be consistent.
|
|
|
|
Task-number: QTBUG-15857
|
|
Reviewed-by: Eskil
|
|
---
|
|
src/gui/text/qtextdocument_p.cpp | 4 +++-
|
|
tests/auto/qtextcursor/tst_qtextcursor.cpp | 28 ++++++++++++++++++++++++++++
|
|
2 files changed, 31 insertions(+), 1 deletions(-)
|
|
|
|
diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp
|
|
index 498a432..2172f74 100644
|
|
--- a/src/gui/text/qtextdocument_p.cpp
|
|
+++ b/src/gui/text/qtextdocument_p.cpp
|
|
@@ -663,7 +663,8 @@ void QTextDocumentPrivate::move(int pos, int to, int length, QTextUndoCommand::O
|
|
|
|
Q_ASSERT(blocks.length() == fragments.length());
|
|
|
|
- finishEdit();
|
|
+ if (!blockCursorAdjustment)
|
|
+ finishEdit();
|
|
}
|
|
|
|
void QTextDocumentPrivate::remove(int pos, int length, QTextUndoCommand::Operation op)
|
|
@@ -678,6 +679,7 @@ void QTextDocumentPrivate::remove(int pos, int length, QTextUndoCommand::Operati
|
|
curs->changed = true;
|
|
}
|
|
}
|
|
+ finishEdit();
|
|
}
|
|
|
|
void QTextDocumentPrivate::setCharFormat(int pos, int length, const QTextCharFormat &newFormat, FormatChangeMode mode)
|
|
|