summaryrefslogtreecommitdiffstats
path: root/src/declarative/graphicsitems/qdeclarativetextinput.cpp
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den.exter@jollamobile.com>2012-11-22 11:11:29 +1000
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-23 00:08:56 +0100
commitb2165ea510293f9841570ed9572512ca3f048ae0 (patch)
tree8daa8f32164e63af09dcb32ce7b8a51ea07003a8 /src/declarative/graphicsitems/qdeclarativetextinput.cpp
parent497978e6c2d7602448ca6fd8dd8da32813c6705b (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.cpp19
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();
}