diff options
author | Andrew den Exter <andrew.den.exter@jollamobile.com> | 2012-11-22 11:11:29 +1000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-11-23 00:08:56 +0100 |
commit | b2165ea510293f9841570ed9572512ca3f048ae0 (patch) | |
tree | 8daa8f32164e63af09dcb32ce7b8a51ea07003a8 /src/declarative/graphicsitems/qdeclarativetextinput.cpp | |
parent | 497978e6c2d7602448ca6fd8dd8da32813c6705b (diff) |
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 <martin.jones@jollamobile.com>
Diffstat (limited to 'src/declarative/graphicsitems/qdeclarativetextinput.cpp')
-rw-r--r-- | src/declarative/graphicsitems/qdeclarativetextinput.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 8c13faeb..46f4b810 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -52,6 +52,7 @@ #include <QFontMetrics> #include <QPainter> #include <QTextBoundaryFinder> +#include <QMimeData> #include <qstyle.h> #ifndef QT_NO_LINEEDIT @@ -454,6 +455,7 @@ void QDeclarativeTextInput::setReadOnly(bool ro) setFlag(QGraphicsItem::ItemAcceptsInputMethod, !ro); d->control->setReadOnly(ro); + q_canPasteChanged(); emit readOnlyChanged(ro); } @@ -1615,6 +1617,11 @@ void QDeclarativeTextInput::setMouseSelectionMode(SelectionMode mode) bool QDeclarativeTextInput::canPaste() const { Q_D(const QDeclarativeTextInput); + if (!d->canPasteValid) { + if (const QMimeData *mimeData = QApplication::clipboard()->mimeData()) + d->canPaste = !d->control->isReadOnly() && mimeData->hasText(); + d->canPasteValid = true; + } return d->canPaste; } @@ -1867,11 +1874,8 @@ void QDeclarativeTextInputPrivate::init() q->connect(control, SIGNAL(updateNeeded(QRect)), q, SLOT(updateRect(QRect))); #ifndef QT_NO_CLIPBOARD - q->connect(q, SIGNAL(readOnlyChanged(bool)), - q, SLOT(q_canPasteChanged())); q->connect(QApplication::clipboard(), SIGNAL(dataChanged()), q, SLOT(q_canPasteChanged())); - canPaste = !control->isReadOnly() && QApplication::clipboard()->text().length() != 0; #endif // QT_NO_CLIPBOARD q->connect(control, SIGNAL(updateMicroFocus()), q, SLOT(updateCursorRectangle())); @@ -1994,9 +1998,14 @@ void QDeclarativeTextInput::q_canPasteChanged() Q_D(QDeclarativeTextInput); bool old = d->canPaste; #ifndef QT_NO_CLIPBOARD - d->canPaste = !d->control->isReadOnly() && QApplication::clipboard()->text().length() != 0; + if (const QMimeData *mimeData = QApplication::clipboard()->mimeData()) + d->canPaste = !d->control->isReadOnly() && mimeData->hasText(); + else + d->canPaste = false; #endif - if(d->canPaste != old) + bool changed = d->canPaste != old || !d->canPasteValid; + d->canPasteValid = true; + if (changed) emit canPasteChanged(); } |