summaryrefslogtreecommitdiff
path: root/src/plugins/texteditor/circularclipboard.cpp
diff options
context:
space:
mode:
authorFrancois Ferrand <thetypz@gmail.com>2012-03-12 17:34:07 +0100
committerLeandro Melo <leandro.melo@nokia.com>2012-03-15 17:27:36 +0100
commitde0fcfaa0a6d707b15f50e5db0328bb4cd6a8c37 (patch)
treececa8472952c96430e33ca6f156501c899221031 /src/plugins/texteditor/circularclipboard.cpp
parent0cfff867539fb13b9f3449ee975004e8339a6fed (diff)
downloadqt-creator-de0fcfaa0a6d707b15f50e5db0328bb4cd6a8c37.tar.gz
TextEditor: Avoid duplicates in circular clipboard.
When data is added to the circular, first check if it is already present. In that case, the item is moved to the beginning of the circular clipboard. This avoids dropping old data prematurly, and traversing the same data multiple times when pasting. Change-Id: Iecaf8d2f5a05d08e6f5faa8555d24f4d7a1d33ab Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
Diffstat (limited to 'src/plugins/texteditor/circularclipboard.cpp')
-rw-r--r--src/plugins/texteditor/circularclipboard.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/plugins/texteditor/circularclipboard.cpp b/src/plugins/texteditor/circularclipboard.cpp
index 32c20ab539..bba248a84a 100644
--- a/src/plugins/texteditor/circularclipboard.cpp
+++ b/src/plugins/texteditor/circularclipboard.cpp
@@ -53,6 +53,16 @@ CircularClipboard *CircularClipboard::instance()
void CircularClipboard::collect(const QMimeData *mimeData)
{
+ //Avoid duplicates
+ const QString text = mimeData->text();
+ for (QList<const QMimeData *>::iterator i = m_items.begin(); i != m_items.end(); ++i) {
+ if (mimeData == *i || text == (*i)->text()) {
+ if (mimeData != *i)
+ delete *i;
+ m_items.erase(i);
+ break;
+ }
+ }
if (m_items.size() > kMaxSize) {
delete m_items.last();
m_items.removeLast();