diff options
Diffstat (limited to 'src/quick/items/qquicktextcontrol.cpp')
-rw-r--r-- | src/quick/items/qquicktextcontrol.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp index 9625aa5d5e..e22c84879b 100644 --- a/src/quick/items/qquicktextcontrol.cpp +++ b/src/quick/items/qquicktextcontrol.cpp @@ -298,6 +298,8 @@ void QQuickTextControlPrivate::setContent(Qt::TextFormat format, const QString & bool previousUndoRedoState = doc->isUndoRedoEnabled(); doc->setUndoRedoEnabled(false); + const int oldCursorPos = cursor.position(); + // avoid multiple textChanged() signals being emitted qmlobject_disconnect(doc, QTextDocument, SIGNAL(contentsChanged()), q, QQuickTextControl, SIGNAL(textChanged())); @@ -341,7 +343,8 @@ void QQuickTextControlPrivate::setContent(Qt::TextFormat format, const QString & doc->setModified(false); q->updateCursorRectangle(true); - emit q->cursorPositionChanged(); + if (cursor.position() != oldCursorPos) + emit q->cursorPositionChanged(); } void QQuickTextControlPrivate::setCursorPosition(const QPointF &pos) @@ -698,6 +701,9 @@ void QQuickTextControl::processEvent(QEvent *e, const QMatrix &matrix) case QEvent::KeyPress: d->keyPressEvent(static_cast<QKeyEvent *>(e)); break; + case QEvent::KeyRelease: + d->keyReleaseEvent(static_cast<QKeyEvent *>(e)); + break; case QEvent::MouseButtonPress: { QMouseEvent *ev = static_cast<QMouseEvent *>(e); d->mousePressEvent(ev, matrix.map(ev->localPos())); @@ -809,9 +815,25 @@ void QQuickTextControl::setHtml(const QString &text) d->setContent(Qt::RichText, text); } + +void QQuickTextControlPrivate::keyReleaseEvent(QKeyEvent *e) +{ + if (e->key() == Qt::Key_Back) { + e->ignore(); + return; + } + return; +} + void QQuickTextControlPrivate::keyPressEvent(QKeyEvent *e) { Q_Q(QQuickTextControl); + + if (e->key() == Qt::Key_Back) { + e->ignore(); + return; + } + #ifndef QT_NO_SHORTCUT if (e == QKeySequence::SelectAll) { e->accept(); |