diff options
author | Morten Johan Sørvig <morten.sorvig@digia.com> | 2014-02-14 14:58:32 +0100 |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@digia.com> | 2014-10-22 23:31:35 +0200 |
commit | ad66fa0dc18f20f3ceb5916ac791231c067b5898 (patch) | |
tree | 109ff0edcdc62e445478de38ec52f113e73767fe /src/plugins/platforms/cocoa/qmacclipboard.h | |
parent | 449b62ed436a8e45d1064b76dc9cc3201966bd91 (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.h | 17 |
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; |