summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorRichard Moe Gustavsen <richard.gustavsen@digia.com>2014-10-10 09:57:31 +0200
committerRichard Moe Gustavsen <richard.gustavsen@digia.com>2014-10-10 16:50:35 +0200
commit65c542bc87bd40da90c63e322d1275045de19bff (patch)
tree41fccedffafef195ffd9b6ac7b1e0417a66b332f /src/plugins
parent7c90778487fee7c53e27766ac895c620ad566049 (diff)
qiosclipboard: take ownership over mime data
QClipboard is documented to take ownership over the mime data set with "setMimeData" and the value returned by "mimeData". So we need to implement this to avoid memory leaks. Change-Id: Ieb3a17368ed3a698c29a7f92c8ee87a0cca86b46 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/ios/qiosclipboard.h4
-rw-r--r--src/plugins/platforms/ios/qiosclipboard.mm11
2 files changed, 14 insertions, 1 deletions
diff --git a/src/plugins/platforms/ios/qiosclipboard.h b/src/plugins/platforms/ios/qiosclipboard.h
index 7d758e3a56..f532eba3de 100644
--- a/src/plugins/platforms/ios/qiosclipboard.h
+++ b/src/plugins/platforms/ios/qiosclipboard.h
@@ -36,6 +36,7 @@
#import <UIKit/UIKit.h>
+#include <QMimeData>
#include <qpa/qplatformclipboard.h>
@class QUIClipboard;
@@ -46,6 +47,8 @@ class QIOSClipboard : public QPlatformClipboard
{
public:
QIOSClipboard();
+ ~QIOSClipboard();
+
QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE;
void setMimeData(QMimeData *mimeData, QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE;
bool supportsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
@@ -53,6 +56,7 @@ public:
private:
QUIClipboard *m_clipboard;
+ QMap<QClipboard::Mode, QMimeData *> m_mimeData;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/ios/qiosclipboard.mm b/src/plugins/platforms/ios/qiosclipboard.mm
index e18ad53b2c..5ed6d3be62 100644
--- a/src/plugins/platforms/ios/qiosclipboard.mm
+++ b/src/plugins/platforms/ios/qiosclipboard.mm
@@ -194,10 +194,17 @@ QIOSClipboard::QIOSClipboard()
{
}
+QIOSClipboard::~QIOSClipboard()
+{
+ qDeleteAll(m_mimeData);
+}
+
QMimeData *QIOSClipboard::mimeData(QClipboard::Mode mode)
{
Q_ASSERT(supportsMode(mode));
- return new QIOSMimeData(mode);
+ if (!m_mimeData.contains(mode))
+ return *m_mimeData.insert(mode, new QIOSMimeData(mode));
+ return m_mimeData[mode];
}
void QIOSClipboard::setMimeData(QMimeData *mimeData, QClipboard::Mode mode)
@@ -209,6 +216,8 @@ void QIOSClipboard::setMimeData(QMimeData *mimeData, QClipboard::Mode mode)
pb.items = [NSArray array];
return;
}
+
+ mimeData->deleteLater();
NSMutableDictionary *pbItem = [NSMutableDictionary dictionaryWithCapacity:mimeData->formats().size()];
foreach (const QString &mimeType, mimeData->formats()) {