summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qmacclipboard.h
diff options
context:
space:
mode:
authorMorten Johan Sørvig <morten.sorvig@digia.com>2014-02-14 14:58:32 +0100
committerMorten Johan Sørvig <morten.sorvig@digia.com>2014-10-22 23:31:35 +0200
commitad66fa0dc18f20f3ceb5916ac791231c067b5898 (patch)
tree109ff0edcdc62e445478de38ec52f113e73767fe /src/plugins/platforms/cocoa/qmacclipboard.h
parent449b62ed436a8e45d1064b76dc9cc3201966bd91 (diff)
Cocoa: Delay QMimeData requests for DnD events.
We were delaying the conversion from Qt to OS X types, but not the data request to the application. Introduce "Eager" and "Lazy" pasteboard promises: Eager promises request the application data immediately and can continue to use the existing commit-promises- on-app-exit logic. Eager promises are the default type and will be used for copy/paste. Lazy promises delay requesting the data from the application for as long as possible, specifically until when promiseKeeper() is called. Lazy promises are used for drag-and-drop and are not committed on application exit. This brings OS X DnD behavior in line with the Windows behavior. [ChangeLog][OS X] Drag-and-drop QMimeData requests are now delayed until drop time. Task-number: QTBUG-31301 Change-Id: I8ddbba41593251f4c0c49c29492dce990066e20d Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Diffstat (limited to 'src/plugins/platforms/cocoa/qmacclipboard.h')
-rw-r--r--src/plugins/platforms/cocoa/qmacclipboard.h17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/plugins/platforms/cocoa/qmacclipboard.h b/src/plugins/platforms/cocoa/qmacclipboard.h
index ba7a2e1aac..c5b6224545 100644
--- a/src/plugins/platforms/cocoa/qmacclipboard.h
+++ b/src/plugins/platforms/cocoa/qmacclipboard.h
@@ -43,15 +43,25 @@
QT_BEGIN_NAMESPACE
+class QMacMimeData;
class QMacPasteboard
{
+public:
+ enum DataRequestType { EagerRequest, LazyRequest };
+private:
struct Promise {
Promise() : itemId(0), convertor(0) { }
- Promise(int itemId, QMacInternalPasteboardMime *c, QString m, QVariant d, int o=0) : itemId(itemId), offset(o), convertor(c), mime(m), data(d) { }
+
+ static Promise eagerPromise(int itemId, QMacInternalPasteboardMime *c, QString m, QMacMimeData *d, int o = 0);
+ static Promise lazyPromise(int itemId, QMacInternalPasteboardMime *c, QString m, QMacMimeData *d, int o = 0);
+ Promise(int itemId, QMacInternalPasteboardMime *c, QString m, QMacMimeData *md, int o, DataRequestType drt);
+
int itemId, offset;
QMacInternalPasteboardMime *convertor;
QString mime;
- QVariant data;
+ QPointer<QMacMimeData> mimeData;
+ QVariant variantData;
+ DataRequestType dataRequestType;
};
QList<Promise> promises;
@@ -72,7 +82,8 @@ public:
PasteboardRef pasteBoard() const;
QMimeData *mimeData() const;
- void setMimeData(QMimeData *mime);
+
+ void setMimeData(QMimeData *mime, DataRequestType dataRequestType = EagerRequest);
QStringList formats() const;
bool hasFormat(const QString &format) const;