diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2011-12-20 17:21:55 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-21 01:36:57 +0100 |
commit | 3db5afa71443533eee6825a5fb0da29498f96b94 (patch) | |
tree | 2836899440cbe1fc804cd93afe3db77895cf744c /src/quick/items/qquicktextinput.cpp | |
parent | 83c5b4c199d66a4529b180abd2b5f67fbb221deb (diff) |
Delay initializing the canPaste property until it's requested.
With xcb querying data from the clipboard can take as long as 50 ms.
Deferring the check until it is requested speeds up construction time
when it's not used and only checking the available formats when it is
requested should also help.
Change-Id: I796fc83d0457d9ac1490cfb9f510c6342eb8a872
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick/items/qquicktextinput.cpp')
-rw-r--r-- | src/quick/items/qquicktextinput.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index b3387f532c..b58e57edbb 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -1793,6 +1793,11 @@ void QQuickTextInput::setMouseSelectionMode(SelectionMode mode) bool QQuickTextInput::canPaste() const { Q_D(const QQuickTextInput); + if (!d->canPasteValid) { + if (const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData()) + const_cast<QQuickTextInputPrivate *>(d)->canPaste = !d->m_readOnly && mimeData->hasText(); + const_cast<QQuickTextInputPrivate *>(d)->canPasteValid = true; + } return d->canPaste; } @@ -2043,7 +2048,6 @@ void QQuickTextInputPrivate::init() q, SLOT(q_canPasteChanged())); q->connect(QGuiApplication::clipboard(), SIGNAL(dataChanged()), q, SLOT(q_canPasteChanged())); - canPaste = !m_readOnly && QGuiApplication::clipboard()->text().length() != 0; #endif // QT_NO_CLIPBOARD m_textLayout.beginLayout(); m_textLayout.createLine(); @@ -2146,10 +2150,17 @@ void QQuickTextInput::q_canPasteChanged() Q_D(QQuickTextInput); bool old = d->canPaste; #ifndef QT_NO_CLIPBOARD - d->canPaste = !d->m_readOnly && QGuiApplication::clipboard()->text().length() != 0; + if (const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData()) + d->canPaste = !d->m_readOnly && 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(); + } // ### these should come from QStyleHints |