From b2165ea510293f9841570ed9572512ca3f048ae0 Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Thu, 22 Nov 2012 11:11:29 +1000 Subject: Port TextInput/TextEdit clipboard optimizations from QtQuick 2.0 Don't check if the clipboard has content until necessary as the check can block for an extended period. Port of 3db5afa71443533eee6825a5fb0da29498f96b94 from qtdeclarative. Change-Id: I606af79cbf10b147aa1bb6c182b0a84aabbc5257 Reviewed-by: Martin Jones --- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/declarative/graphicsitems/qdeclarativetextedit.cpp') diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 07ae0e95..ed65c8e8 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -1139,6 +1139,7 @@ void QDeclarativeTextEdit::setReadOnly(bool r) if (!r) d->control->moveCursor(QTextCursor::End); + q_canPasteChanged(); emit readOnlyChanged(r); } @@ -1508,6 +1509,10 @@ void QDeclarativeTextEdit::updateImgCache(const QRectF &rf) bool QDeclarativeTextEdit::canPaste() const { Q_D(const QDeclarativeTextEdit); + if (!d->canPasteValid) { + d->canPaste = d->control->canPaste(); + d->canPasteValid = true; + } return d->canPaste; } @@ -1565,9 +1570,7 @@ void QDeclarativeTextEditPrivate::init() QObject::connect(control, SIGNAL(microFocusChanged()), q, SLOT(moveCursorDelegate())); QObject::connect(control, SIGNAL(linkActivated(QString)), q, SIGNAL(linkActivated(QString))); #ifndef QT_NO_CLIPBOARD - QObject::connect(q, SIGNAL(readOnlyChanged(bool)), q, SLOT(q_canPasteChanged())); QObject::connect(QApplication::clipboard(), SIGNAL(dataChanged()), q, SLOT(q_canPasteChanged())); - canPaste = control->canPaste(); #endif document = control->document(); @@ -1888,7 +1891,9 @@ void QDeclarativeTextEdit::q_canPasteChanged() Q_D(QDeclarativeTextEdit); bool old = d->canPaste; d->canPaste = d->control->canPaste(); - if(old!=d->canPaste) + bool changed = old != d->canPaste || !d->canPasteValid; + d->canPasteValid = true; + if (changed) emit canPasteChanged(); } -- cgit v1.2.3