From 391459210de53e342ba5e9c44360754e86d7625c Mon Sep 17 00:00:00 2001
From: Chris Meyer <cmeyer1969@gmail.com>
Date: Mon, 26 Aug 2013 16:15:23 -0700
Subject: [PATCH] Add support for external drag and drop in Quick items.

Add dragType enums with values of None, Automatic, Internal (default).
Setting to Automatic allows startDrag to be called automatically.
Setting to Internal (default) retains old behavior.

Add mimeData to Drag item to enable external drags.

Call startDrag to start drag manually or change from internal drag to
external drag. Added events dragStarted and dragFinished that get
invoked from startDrag.

Mime data must be specified in the mimeData property as
mime-type / data pairs.

Moved QQuickDrag from qquickmousearea* files to qquickdrag* files to
reduce header interdependencies that caused linking errors in other
modules and also to improve code organization.

Allow DropArea to receive and process external data.

Introduced new variable containsDrag to QQuickDropAreaPrivate. This
replaces mimeData which was previously being used to determine if a
drop operation was currently occurring. The problem was that mimeData
was being externally destructed.

Also introduced accessor methods for getting color, html, image, text,
and urls out of the drop. This facilitates dropping of external data of
those types onto a DropArea.

Added example quick/externaldraganddrop.

Task-number: QTBUG-27498
Change-Id: I1420df7c161ea3399e49a23305273e106baa246f
Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
---
 .../DragAndDropTextItem.qml                   |  92 ++++++
 .../doc/images/qml-dnd2-example.png           | Bin 0 -> 48666 bytes
 .../doc/src/externaldraganddrop.qdoc          |  38 +++
 .../externaldraganddrop.pro                   |  11 +
 .../externaldraganddrop.qml                   |  79 +++++
 .../externaldraganddrop.qmlproject            |  16 +
 .../externaldraganddrop.qrc                   |   6 +
 examples/quick/externaldraganddrop/main.cpp   |  41 +++
 examples/quick/quick.pro                      |   1 +
 src/quick/items/qquickdrag.cpp                | 304 +++++++++++++++++-
 src/quick/items/qquickdrag_p.h                |  91 +++++-
 src/quick/items/qquickdroparea.cpp            | 223 +++++++++++--
 src/quick/items/qquickdroparea_p.h            |  23 ++
 src/quick/items/qquickmousearea.cpp           | 131 --------
 src/quick/items/qquickmousearea_p.h           |  77 +----
 src/quick/items/qquicktextinput.cpp           |   1 +
 src/quick/items/qquickwindow.cpp              |  14 +-
 src/quick/items/qquickwindow_p.h              |   4 +-
 .../qquickmousearea/tst_qquickmousearea.cpp   |   1 +
 19 files changed, 900 insertions(+), 253 deletions(-)
 create mode 100644 examples/quick/externaldraganddrop/DragAndDropTextItem.qml
 create mode 100644 examples/quick/externaldraganddrop/doc/images/qml-dnd2-example.png
 create mode 100644 examples/quick/externaldraganddrop/doc/src/externaldraganddrop.qdoc
 create mode 100644 examples/quick/externaldraganddrop/externaldraganddrop.pro
 create mode 100644 examples/quick/externaldraganddrop/externaldraganddrop.qml
 create mode 100644 examples/quick/externaldraganddrop/externaldraganddrop.qmlproject
 create mode 100644 examples/quick/externaldraganddrop/externaldraganddrop.qrc
 create mode 100644 examples/quick/externaldraganddrop/main.cpp

diff --git a/examples/quick/externaldraganddrop/DragAndDropTextItem.qml b/examples/quick/externaldraganddrop/DragAndDropTextItem.qml
new file mode 100644
index 0000000000..390a4b3abe
--- /dev/null
+++ b/examples/quick/externaldraganddrop/DragAndDropTextItem.qml
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.2
+
+Rectangle {
+    id: item
+    property string display
+    color: "#EEE"
+    Text {
+        anchors.fill: parent
+        text: item.display
+        wrapMode: Text.WordWrap
+    }
+    DropArea {
+        anchors.fill: parent
+        keys: ["text/plain"]
+        onEntered: {
+            item.color = "#FCC"
+        }
+        onExited: {
+            item.color = "#EEE"
+        }
+        onDropped: {
+            item.color = "#EEE"
+            if (drop.hasText) {
+                if (drop.proposedAction == Qt.MoveAction || drop.proposedAction == Qt.CopyAction) {
+                    item.display = drop.text
+                    drop.acceptProposedAction()
+                }
+            }
+        }
+    }
+    MouseArea {
+        id: mouseArea
+        anchors.fill: parent
+        drag.target: draggable
+    }
+    Item {
+        id: draggable
+        anchors.fill: parent
+        Drag.active: mouseArea.drag.active
+        Drag.hotSpot.x: 0
+        Drag.hotSpot.y: 0
+        Drag.mimeData: { "text/plain": item.display }
+        Drag.dragType: Drag.Automatic
+        Drag.onDragStarted: {
+        }
+        Drag.onDragFinished: {
+            if (dropAction == Qt.MoveAction) {
+                item.display = ""
+            }
+        }
+    } // Item
+}
diff --git a/examples/quick/externaldraganddrop/doc/images/qml-dnd2-example.png b/examples/quick/externaldraganddrop/doc/images/qml-dnd2-example.png
new file mode 100644
index 0000000000000000000000000000000000000000..e657d81795f4160600c79d74890fc9128f2d6a99
GIT binary patch
literal 48666
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

literal 0
HcmV?d00001

diff --git a/examples/quick/externaldraganddrop/doc/src/externaldraganddrop.qdoc b/examples/quick/externaldraganddrop/doc/src/externaldraganddrop.qdoc
new file mode 100644
index 0000000000..1251e6e1eb
--- /dev/null
+++ b/examples/quick/externaldraganddrop/doc/src/externaldraganddrop.qdoc
@@ -0,0 +1,38 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file.  Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: http://www.gnu.org/copyleft/fdl.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+/*!
+    \title Qt Quick Examples - externaldraganddrop
+    \example externaldraganddrop
+    \brief This is an example of drag and drop between Qml and other applications
+    \image qml-dnd2-example.png
+    \ingroup qtquickexamples
+
+    This example shows you how to respond to do drag and drop using MouseArea and DropArea.
+
+    Drag text between boxes, out of boxes into other applications, and from other applications into the boxes. Use option/ctrl to copy rather than move text when dragging between boxes.
+
+*/
diff --git a/examples/quick/externaldraganddrop/externaldraganddrop.pro b/examples/quick/externaldraganddrop/externaldraganddrop.pro
new file mode 100644
index 0000000000..646781e7d1
--- /dev/null
+++ b/examples/quick/externaldraganddrop/externaldraganddrop.pro
@@ -0,0 +1,11 @@
+TEMPLATE = app
+
+QT += quick qml
+SOURCES += main.cpp
+RESOURCES += externaldraganddrop.qrc
+
+EXAMPLE_FILES = \
+    DragAndDropTextItem.qml
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/externaldraganddrop
+INSTALLS += target
diff --git a/examples/quick/externaldraganddrop/externaldraganddrop.qml b/examples/quick/externaldraganddrop/externaldraganddrop.qml
new file mode 100644
index 0000000000..f39d33dda7
--- /dev/null
+++ b/examples/quick/externaldraganddrop/externaldraganddrop.qml
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.2
+import QtQuick.Layouts 1.0
+
+Item {
+    id: root
+    width: 320
+    height: 480
+
+    ColumnLayout {
+
+        anchors.fill: parent
+        anchors.margins: 8
+
+        Text {
+            Layout.fillWidth: true
+            text: "Drag text into, out of, and between the boxes below."
+            wrapMode: Text.WordWrap
+        }
+
+        DragAndDropTextItem {
+            Layout.fillWidth: true
+            height: 142
+            display: "Sample Text"
+        }
+
+        DragAndDropTextItem {
+            Layout.fillWidth: true
+            height: 142
+            display: "Option/ctrl drag to copy instead of move text."
+        }
+
+        DragAndDropTextItem {
+            Layout.fillWidth: true
+            height: 142
+            display: "Drag out into other applications."
+        }
+
+    }
+}
diff --git a/examples/quick/externaldraganddrop/externaldraganddrop.qmlproject b/examples/quick/externaldraganddrop/externaldraganddrop.qmlproject
new file mode 100644
index 0000000000..359efae597
--- /dev/null
+++ b/examples/quick/externaldraganddrop/externaldraganddrop.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.1
+
+Project {
+    mainFile: "externaldraganddrop.qml"
+
+    /* Include .qml, .js, and image files from current directory and subdirectories */
+    QmlFiles {
+        directory: "."
+    }
+    JavaScriptFiles {
+        directory: "."
+    }
+    ImageFiles {
+        directory: "."
+    }
+}
diff --git a/examples/quick/externaldraganddrop/externaldraganddrop.qrc b/examples/quick/externaldraganddrop/externaldraganddrop.qrc
new file mode 100644
index 0000000000..edac9820c9
--- /dev/null
+++ b/examples/quick/externaldraganddrop/externaldraganddrop.qrc
@@ -0,0 +1,6 @@
+<RCC>
+    <qresource prefix="/externaldraganddrop">
+        <file>externaldraganddrop.qml</file>
+        <file>DragAndDropTextItem.qml</file>
+    </qresource>
+</RCC>
diff --git a/examples/quick/externaldraganddrop/main.cpp b/examples/quick/externaldraganddrop/main.cpp
new file mode 100644
index 0000000000..33600e7983
--- /dev/null
+++ b/examples/quick/externaldraganddrop/main.cpp
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "../shared/shared.h"
+DECLARATIVE_EXAMPLE_MAIN(externaldraganddrop/externaldraganddrop)
diff --git a/examples/quick/quick.pro b/examples/quick/quick.pro
index e4c00fffa1..c6b7ee1c34 100644
--- a/examples/quick/quick.pro
+++ b/examples/quick/quick.pro
@@ -2,6 +2,7 @@ TEMPLATE = subdirs
 SUBDIRS =   quick-accessibility \
             animation \
             draganddrop \
+            externaldraganddrop \
             canvas \
             imageelements \
             keyinteraction \
diff --git a/src/quick/items/qquickdrag.cpp b/src/quick/items/qquickdrag.cpp
index f145ce259f..0ae26cb5c3 100644
--- a/src/quick/items/qquickdrag.cpp
+++ b/src/quick/items/qquickdrag.cpp
@@ -46,7 +46,9 @@
 #include <private/qquickitemchangelistener_p.h>
 #include <private/qv8engine_p.h>
 #include <QtCore/qcoreapplication.h>
+#include <QtCore/qmimedata.h>
 #include <QtQml/qqmlinfo.h>
+#include <QtGui/qdrag.h>
 #include <QtGui/qevent.h>
 
 #ifndef QT_NO_DRAGANDDROP
@@ -72,6 +74,7 @@ public:
         , itemMoved(false)
         , eventQueued(false)
         , overrideActions(false)
+        , dragType(QQuickDrag::Internal)
     {
     }
 
@@ -83,8 +86,8 @@ public:
     void deliverMoveEvent();
     void deliverLeaveEvent();
     void deliverEvent(QQuickWindow *window, QEvent *event);
-    void start() { start(supportedActions); }
     void start(Qt::DropActions supportedActions);
+    Qt::DropAction startDrag(Qt::DropActions supportedActions);
     void setTarget(QQuickItem *item);
 
     QQuickDragGrabber dragGrabber;
@@ -105,6 +108,8 @@ public:
     bool overrideActions : 1;
     QPointF hotSpot;
     QStringList keys;
+    QVariantMap externalMimeData;
+    QQuickDrag::DragType dragType;
 };
 
 /*!
@@ -272,7 +277,10 @@ QQuickDragAttached::~QQuickDragAttached()
 
     This property holds whether a drag event sequence is currently active.
 
-    Setting this property to true will send a QDragEnter event to the scene
+    Binding this property to the active property of \l MouseArea::drag will
+    cause \l startDrag to be called when the user starts dragging.
+
+    Setting this property to true will also send a QDragEnter event to the scene
     with the item's current position.  Setting it to false will send a
     QDragLeave event.
 
@@ -292,8 +300,18 @@ void QQuickDragAttached::setActive(bool active)
     if (d->active != active) {
         if (d->inEvent)
             qmlInfo(this) << "active cannot be changed from within a drag event handler";
-        else if (active)
-            d->start(d->supportedActions);
+        else if (active) {
+            if (d->dragType == QQuickDrag::Internal) {
+                d->start(d->supportedActions);
+            }
+            else if (d->dragType == QQuickDrag::Automatic) {
+                // There are different semantics than start() since startDrag()
+                // may be called after an internal drag is already started.
+                active = true;
+                emit activeChanged();
+                d->startDrag(d->supportedActions);
+            }
+        }
         else
             cancel();
     }
@@ -410,6 +428,28 @@ void QQuickDragAttached::setKeys(const QStringList &keys)
     }
 }
 
+/*!
+    \qmlattachedproperty stringlist QtQuick2::Drag::mimeData
+    \since QtQuick 2.2
+
+    This property holds a map of mimeData that is used during startDrag.
+*/
+
+QVariantMap QQuickDragAttached::mimeData() const
+{
+    Q_D(const QQuickDragAttached);
+    return d->externalMimeData;
+}
+
+void QQuickDragAttached::setMimeData(const QVariantMap &mimeData)
+{
+    Q_D(QQuickDragAttached);
+    if (d->externalMimeData != mimeData) {
+        d->externalMimeData = mimeData;
+        emit mimeDataChanged();
+    }
+}
+
 /*!
     \qmlattachedproperty flags QtQuick2::Drag::supportedActions
 
@@ -465,6 +505,42 @@ void QQuickDragAttached::setProposedAction(Qt::DropAction action)
     }
 }
 
+/*!
+ \qmlattachedproperty enumeration QtQuick2::Drag::dragType
+ \since QtQuick 2.2
+
+ This property indicates whether to automatically start drags, do nothing, or
+ to use backwards compatible internal drags. The default is to use backwards
+ compatible internal drags.
+
+ A drag can also be started manually using \l startDrag.
+
+ \list
+ \li Drag.None - do not start drags automatically
+ \li Drag.Automatic - start drags automatically
+ \li Drag.Internal (default) - start backwards compatible drags automatically
+ \endlist
+
+ When using \l Drag.Automatic you should also define \l mimeData and bind the
+ \active property to the active property of \l MouseArea.drag.
+
+ */
+
+QQuickDrag::DragType QQuickDragAttached::dragType() const
+{
+    Q_D(const QQuickDragAttached);
+    return d->dragType;
+}
+
+void QQuickDragAttached::setDragType(QQuickDrag::DragType dragType)
+{
+    Q_D(QQuickDragAttached);
+    if (d->dragType != dragType) {
+        d->dragType = dragType;
+        emit dragTypeChanged();
+    }
+}
+
 void QQuickDragAttachedPrivate::start(Qt::DropActions supportedActions)
 {
     Q_Q(QQuickDragAttached);
@@ -496,7 +572,8 @@ void QQuickDragAttachedPrivate::start(Qt::DropActions supportedActions)
 /*!
     \qmlattachedmethod void QtQuick2::Drag::start(flags supportedActions)
 
-    Starts sending drag events.
+    Starts sending drag events. Used for starting old-style internal drags. \l startDrag is the
+    new-style, preferred method of starting drags.
 
     The optional \a supportedActions argument can be used to override the \l supportedActions
     property for the started sequence.
@@ -616,6 +693,223 @@ void QQuickDragAttached::cancel()
     emit activeChanged();
 }
 
+/*!
+ \qmlsignal QtQuick2::DropArea::onDragStarted()
+
+ This handler is called when a drag is started with the \l startDrag method
+ or when it is started automatically using the \l dragType property.
+ */
+
+/*!
+ \qmlsignal QtQuick2::DropArea::onDragFinished(DropAction action)
+
+ This handler is called when a drag finishes and the drag was started with the
+ \l startDrag method or started automatically using the \l dragType property.
+ */
+
+Qt::DropAction QQuickDragAttachedPrivate::startDrag(Qt::DropActions supportedActions)
+{
+    Q_Q(QQuickDragAttached);
+
+    QDrag *drag = new QDrag(q);
+    QMimeData *mimeData = new QMimeData();
+
+    Q_FOREACH (const QString &key, externalMimeData.keys()) {
+        mimeData->setData(key, externalMimeData[key].toString().toUtf8());
+    }
+
+    drag->setMimeData(mimeData);
+
+    // TODO: how to handle drag image?
+    // drag->setPixmap(iconPixmap);
+
+    emit q->dragStarted();
+
+    Qt::DropAction dropAction = drag->exec(supportedActions);
+
+    delete drag;
+
+    deliverLeaveEvent();
+
+    if (target) {
+        target = 0;
+        emit q->targetChanged();
+    }
+
+    emit q->dragFinished(dropAction);
+
+    active = false;
+    emit q->activeChanged();
+
+    return dropAction;
+}
+
+
+/*!
+    \qmlattachedmethod void QtQuick2::Drag::startDrag(flags supportedActions)
+
+    Starts sending drag events.
+
+    The optional \a supportedActions argument can be used to override the \l supportedActions
+    property for the started sequence.
+*/
+
+void QQuickDragAttached::startDrag(QQmlV4Function *args)
+{
+    Q_D(QQuickDragAttached);
+
+    if (d->inEvent) {
+        qmlInfo(this) << "startDrag() cannot be called from within a drag event handler";
+        return;
+    }
+
+    if (!d->active) {
+        qmlInfo(this) << "startDrag() drag must be active";
+        return;
+    }
+
+    Qt::DropActions supportedActions = d->supportedActions;
+
+    // check arguments for supportedActions
+    if (args->length() >= 1) {
+        QV4::Value v = (*args)[0];
+        if (v.isInt32()) {
+            supportedActions = Qt::DropActions(v.integerValue());
+        }
+    }
+
+    Qt::DropAction dropAction = d->startDrag(supportedActions);
+
+    args->setReturnValue(QV4::Value::fromInt32(dropAction));
+}
+
+QQuickDrag::QQuickDrag(QObject *parent)
+: QObject(parent), _target(0), _axis(XAndYAxis), _xmin(-FLT_MAX),
+_xmax(FLT_MAX), _ymin(-FLT_MAX), _ymax(FLT_MAX), _active(false), _filterChildren(false)
+{
+}
+
+QQuickDrag::~QQuickDrag()
+{
+}
+
+QQuickItem *QQuickDrag::target() const
+{
+    return _target;
+}
+
+void QQuickDrag::setTarget(QQuickItem *t)
+{
+    if (_target == t)
+        return;
+    _target = t;
+    emit targetChanged();
+}
+
+void QQuickDrag::resetTarget()
+{
+    if (_target == 0)
+        return;
+    _target = 0;
+    emit targetChanged();
+}
+
+QQuickDrag::Axis QQuickDrag::axis() const
+{
+    return _axis;
+}
+
+void QQuickDrag::setAxis(QQuickDrag::Axis a)
+{
+    if (_axis == a)
+        return;
+    _axis = a;
+    emit axisChanged();
+}
+
+qreal QQuickDrag::xmin() const
+{
+    return _xmin;
+}
+
+void QQuickDrag::setXmin(qreal m)
+{
+    if (_xmin == m)
+        return;
+    _xmin = m;
+    emit minimumXChanged();
+}
+
+qreal QQuickDrag::xmax() const
+{
+    return _xmax;
+}
+
+void QQuickDrag::setXmax(qreal m)
+{
+    if (_xmax == m)
+        return;
+    _xmax = m;
+    emit maximumXChanged();
+}
+
+qreal QQuickDrag::ymin() const
+{
+    return _ymin;
+}
+
+void QQuickDrag::setYmin(qreal m)
+{
+    if (_ymin == m)
+        return;
+    _ymin = m;
+    emit minimumYChanged();
+}
+
+qreal QQuickDrag::ymax() const
+{
+    return _ymax;
+}
+
+void QQuickDrag::setYmax(qreal m)
+{
+    if (_ymax == m)
+        return;
+    _ymax = m;
+    emit maximumYChanged();
+}
+
+bool QQuickDrag::active() const
+{
+    return _active;
+}
+
+void QQuickDrag::setActive(bool drag)
+{
+    if (_active == drag)
+        return;
+    _active = drag;
+    emit activeChanged();
+}
+
+bool QQuickDrag::filterChildren() const
+{
+    return _filterChildren;
+}
+
+void QQuickDrag::setFilterChildren(bool filter)
+{
+    if (_filterChildren == filter)
+        return;
+    _filterChildren = filter;
+    emit filterChildrenChanged();
+}
+
+QQuickDragAttached *QQuickDrag::qmlAttachedProperties(QObject *obj)
+{
+    return new QQuickDragAttached(obj);
+}
+
 QT_END_NAMESPACE
 
 #endif // QT_NO_DRAGANDDROP
diff --git a/src/quick/items/qquickdrag_p.h b/src/quick/items/qquickdrag_p.h
index 3680fd5754..098fcc61b9 100644
--- a/src/quick/items/qquickdrag_p.h
+++ b/src/quick/items/qquickdrag_p.h
@@ -143,18 +143,90 @@ private:
 };
 
 class QQmlV4Function;
+class QQuickDragAttached;
+class Q_AUTOTEST_EXPORT QQuickDrag : public QObject
+{
+    Q_OBJECT
+
+    Q_ENUMS(Axis DragType)
+    Q_PROPERTY(QQuickItem *target READ target WRITE setTarget NOTIFY targetChanged RESET resetTarget)
+    Q_PROPERTY(Axis axis READ axis WRITE setAxis NOTIFY axisChanged)
+    Q_PROPERTY(qreal minimumX READ xmin WRITE setXmin NOTIFY minimumXChanged)
+    Q_PROPERTY(qreal maximumX READ xmax WRITE setXmax NOTIFY maximumXChanged)
+    Q_PROPERTY(qreal minimumY READ ymin WRITE setYmin NOTIFY minimumYChanged)
+    Q_PROPERTY(qreal maximumY READ ymax WRITE setYmax NOTIFY maximumYChanged)
+    Q_PROPERTY(bool active READ active NOTIFY activeChanged)
+    Q_PROPERTY(bool filterChildren READ filterChildren WRITE setFilterChildren NOTIFY filterChildrenChanged)
+    //### consider drag and drop
+
+public:
+    QQuickDrag(QObject *parent=0);
+    ~QQuickDrag();
+
+    enum DragType { None, Automatic, Internal };
+
+    QQuickItem *target() const;
+    void setTarget(QQuickItem *target);
+    void resetTarget();
+
+    enum Axis { XAxis=0x01, YAxis=0x02, XAndYAxis=0x03, XandYAxis=XAndYAxis };
+    Axis axis() const;
+    void setAxis(Axis);
+
+    qreal xmin() const;
+    void setXmin(qreal);
+    qreal xmax() const;
+    void setXmax(qreal);
+    qreal ymin() const;
+    void setYmin(qreal);
+    qreal ymax() const;
+    void setYmax(qreal);
+
+    bool active() const;
+    void setActive(bool);
+
+    bool filterChildren() const;
+    void setFilterChildren(bool);
+
+    static QQuickDragAttached *qmlAttachedProperties(QObject *obj);
+
+Q_SIGNALS:
+    void targetChanged();
+    void axisChanged();
+    void minimumXChanged();
+    void maximumXChanged();
+    void minimumYChanged();
+    void maximumYChanged();
+    void activeChanged();
+    void filterChildrenChanged();
+
+private:
+    QQuickItem *_target;
+    Axis _axis;
+    qreal _xmin;
+    qreal _xmax;
+    qreal _ymin;
+    qreal _ymax;
+    bool _active : 1;
+    bool _filterChildren: 1;
+    Q_DISABLE_COPY(QQuickDrag)
+};
 
 class QQuickDragAttachedPrivate;
 class QQuickDragAttached : public QObject
 {
     Q_OBJECT
+    Q_DECLARE_PRIVATE(QQuickDragAttached)
+
     Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
     Q_PROPERTY(QObject *source READ source WRITE setSource NOTIFY sourceChanged RESET resetSource)
     Q_PROPERTY(QObject *target READ target NOTIFY targetChanged)
     Q_PROPERTY(QPointF hotSpot READ hotSpot WRITE setHotSpot NOTIFY hotSpotChanged)
     Q_PROPERTY(QStringList keys READ keys WRITE setKeys NOTIFY keysChanged)
+    Q_PROPERTY(QVariantMap mimeData READ mimeData WRITE setMimeData NOTIFY mimeDataChanged)
     Q_PROPERTY(Qt::DropActions supportedActions READ supportedActions WRITE setSupportedActions NOTIFY supportedActionsChanged)
     Q_PROPERTY(Qt::DropAction proposedAction READ proposedAction WRITE setProposedAction NOTIFY proposedActionChanged)
+    Q_PROPERTY(QQuickDrag::DragType dragType READ dragType WRITE setDragType NOTIFY dragTypeChanged)
 public:
     QQuickDragAttached(QObject *parent);
     ~QQuickDragAttached();
@@ -174,36 +246,47 @@ public:
     QStringList keys() const;
     void setKeys(const QStringList &keys);
 
+    QVariantMap mimeData() const;
+    void setMimeData(const QVariantMap &mimeData);
+
     Qt::DropActions supportedActions() const;
     void setSupportedActions(Qt::DropActions actions);
 
     Qt::DropAction proposedAction() const;
     void setProposedAction(Qt::DropAction action);
 
+    QQuickDrag::DragType dragType() const;
+    void setDragType(QQuickDrag::DragType dragType);
+
     Q_INVOKABLE int drop();
 
     bool event(QEvent *event);
 
 public Q_SLOTS:
     void start(QQmlV4Function *);
+    void startDrag(QQmlV4Function *);
     void cancel();
 
 Q_SIGNALS:
+    void dragStarted();
+    void dragFinished(Qt::DropAction dropAction);
+
     void activeChanged();
     void sourceChanged();
     void targetChanged();
     void hotSpotChanged();
     void keysChanged();
+    void mimeDataChanged();
     void supportedActionsChanged();
     void proposedActionChanged();
-
-private:
-    Q_DECLARE_PRIVATE(QQuickDragAttached)
+    void dragTypeChanged();
 };
 
-
 QT_END_NAMESPACE
 
+QML_DECLARE_TYPE(QQuickDrag)
+QML_DECLARE_TYPEINFO(QQuickDrag, QML_HAS_ATTACHED_PROPERTIES)
+
 #endif // QT_NO_DRAGANDDROP
 
 #endif
diff --git a/src/quick/items/qquickdroparea.cpp b/src/quick/items/qquickdroparea.cpp
index f453c42e5b..09dc7eeebb 100644
--- a/src/quick/items/qquickdroparea.cpp
+++ b/src/quick/items/qquickdroparea.cpp
@@ -77,11 +77,12 @@ public:
     QPointF dragPosition;
     QQuickDropAreaDrag *drag;
     QPointer<QObject> source;
-    QPointer<QMimeData> mimeData;
+    bool containsDrag;
 };
 
 QQuickDropAreaPrivate::QQuickDropAreaPrivate()
     : drag(0)
+    , containsDrag(false)
 {
 }
 
@@ -133,7 +134,7 @@ QQuickDropArea::~QQuickDropArea()
 bool QQuickDropArea::containsDrag() const
 {
     Q_D(const QQuickDropArea);
-    return d->mimeData;
+    return d->containsDrag;
 }
 
 /*!
@@ -217,7 +218,7 @@ qreal QQuickDropAreaDrag::y() const
 void QQuickDropArea::dragMoveEvent(QDragMoveEvent *event)
 {
     Q_D(QQuickDropArea);
-    if (!d->mimeData)
+    if (!d->containsDrag)
         return;
 
     d->dragPosition = event->pos();
@@ -259,28 +260,27 @@ void QQuickDropArea::dragEnterEvent(QDragEnterEvent *event)
 {
     Q_D(QQuickDropArea);
     const QMimeData *mimeData = event->mimeData();
-    if (!d->effectiveEnable || d->mimeData || !mimeData || !d->hasMatchingKey(d->getKeys(mimeData)))
+    if (!d->effectiveEnable || d->containsDrag || !mimeData || !d->hasMatchingKey(d->getKeys(mimeData)))
         return;
 
     d->dragPosition = event->pos();
 
     event->accept();
+
     QQuickDropEvent dragTargetEvent(d, event);
     emit entered(&dragTargetEvent);
 
-    if (event->isAccepted()) {
-        d->mimeData = const_cast<QMimeData *>(mimeData);
-        if (QQuickDragMimeData *dragMime = qobject_cast<QQuickDragMimeData *>(d->mimeData))
-            d->source = dragMime->source();
-        else
-            d->source = event->source();
-        d->dragPosition = event->pos();
-        if (d->drag) {
-            emit d->drag->positionChanged();
-            emit d->drag->sourceChanged();
-        }
-        emit containsDragChanged();
+    d->containsDrag = true;
+    if (QQuickDragMimeData *dragMime = qobject_cast<QQuickDragMimeData *>(const_cast<QMimeData *>(mimeData)))
+        d->source = dragMime->source();
+    else
+        d->source = event->source();
+    d->dragPosition = event->pos();
+    if (d->drag) {
+        emit d->drag->positionChanged();
+        emit d->drag->sourceChanged();
     }
+    emit containsDragChanged();
 }
 
 /*!
@@ -292,12 +292,12 @@ void QQuickDropArea::dragEnterEvent(QDragEnterEvent *event)
 void QQuickDropArea::dragLeaveEvent(QDragLeaveEvent *)
 {
     Q_D(QQuickDropArea);
-    if (!d->mimeData)
+    if (!d->containsDrag)
         return;
 
     emit exited();
 
-    d->mimeData = 0;
+    d->containsDrag = false;
     d->source = 0;
     emit containsDragChanged();
     if (d->drag)
@@ -314,13 +314,13 @@ void QQuickDropArea::dragLeaveEvent(QDragLeaveEvent *)
 void QQuickDropArea::dropEvent(QDropEvent *event)
 {
     Q_D(QQuickDropArea);
-    if (!d->mimeData)
+    if (!d->containsDrag)
         return;
 
     QQuickDropEvent dragTargetEvent(d, event);
     emit dropped(&dragTargetEvent);
 
-    d->mimeData = 0;
+    d->containsDrag = false;
     d->source = 0;
     emit containsDragChanged();
     if (d->drag)
@@ -337,6 +337,16 @@ void QQuickDropArea::dropEvent(QDropEvent *event)
     The position of the drag event can be obtained from the \l x and \l y
     properties, and the \l keys property identifies the drag keys of the event
     \l source.
+
+    The existence of specific drag types can be determined using the \l hasColor,
+    \l hasHtml, \l hasText, and \l hasUrls properties.
+
+    The list of all supplied formats can be determined using the \l formats property.
+
+    Specific drag types can be obtained using the \l colorData, \l html, \l text,
+    and \l urls properties.
+
+    A string version of any available mimeType can be obtained using \l getDataAsString.
 */
 
 /*!
@@ -357,14 +367,6 @@ void QQuickDropArea::dropEvent(QDropEvent *event)
     This property holds the source of a drag event.
 */
 
-QObject *QQuickDropEvent::source()
-{
-    if (const QQuickDragMimeData *dragMime = qobject_cast<const QQuickDragMimeData *>(event->mimeData()))
-        return dragMime->source();
-    else
-        return event->source();
-}
-
 /*!
     \qmlproperty stringlist QtQuick2::DragEvent::keys
 
@@ -372,11 +374,6 @@ QObject *QQuickDropEvent::source()
     drag event.
 */
 
-QStringList QQuickDropEvent::keys() const
-{
-    return d->getKeys(event->mimeData());
-}
-
 /*!
     \qmlproperty enumeration QtQuick2::DragEvent::action
 
@@ -399,6 +396,14 @@ QStringList QQuickDropEvent::keys() const
     drag source.
 */
 
+/*!
+    \qmlproperty flags QtQuick2::DragEvent::proposedAction
+    \since QtQuick 2.2
+
+    This property holds the set of \l {action}{actions} proposed by the
+    drag source.
+*/
+
 /*!
     \qmlproperty bool QtQuick2::DragEvent::accepted
 
@@ -416,6 +421,157 @@ QStringList QQuickDropEvent::keys() const
     If an \a action is specified it will overwrite the value of the \l action property.
 */
 
+/*!
+    \qmlmethod QtQuick2::DragEvent::acceptProposedAction()
+    \since QtQuick 2.2
+
+    Accepts the drag event with the \l proposedAction.
+*/
+
+/*!
+    \qmlproperty bool QtQuick2::DragEvent::hasColor
+    \since QtQuick 2.2
+
+    This property holds whether the drag event contains a color item.
+*/
+
+/*!
+    \qmlproperty bool QtQuick2::DragEvent::hasHtml
+    \since QtQuick 2.2
+
+    This property holds whether the drag event contains a html item.
+*/
+
+/*!
+    \qmlproperty bool QtQuick2::DragEvent::hasText
+    \since QtQuick 2.2
+
+    This property holds whether the drag event contains a text item.
+*/
+
+/*!
+    \qmlproperty bool QtQuick2::DragEvent::hasUrls
+    \since QtQuick 2.2
+
+    This property holds whether the drag event contains one or more url items.
+*/
+
+/*!
+    \qmlproperty color QtQuick2::DragEvent::colorData
+    \since QtQuick 2.2
+
+    This property holds color data, if any.
+*/
+
+/*!
+    \qmlproperty string QtQuick2::DragEvent::html
+    \since QtQuick 2.2
+
+    This property holds html data, if any.
+*/
+
+/*!
+    \qmlproperty string QtQuick2::DragEvent::text
+    \since QtQuick 2.2
+
+    This property holds text data, if any.
+*/
+
+/*!
+    \qmlproperty urllist QtQuick2::DragEvent::urls
+    \since QtQuick 2.2
+
+    This property holds a list of urls, if any.
+*/
+
+/*!
+    \qmlproperty stringlist QtQuick2::DragEvent::formats
+    \since QtQuick 2.2
+
+    This property holds a list of mime type formats contained in the drag data.
+*/
+
+/*!
+    \qmlmethod string QtQuick2::DragEvent::getDataAsString(string format)
+    \since QtQuick 2.2
+
+    Returns the data for the given \a format converted to a string. \a format should be one contained in the \l formats property.
+*/
+
+QObject *QQuickDropEvent::source()
+{
+    if (const QQuickDragMimeData *dragMime = qobject_cast<const QQuickDragMimeData *>(event->mimeData()))
+        return dragMime->source();
+    else
+        return event->source();
+}
+
+QStringList QQuickDropEvent::keys() const
+{
+    return d->getKeys(event->mimeData());
+}
+
+bool QQuickDropEvent::hasColor() const
+{
+    return event->mimeData()->hasColor();
+}
+
+bool QQuickDropEvent::hasHtml() const
+{
+    return event->mimeData()->hasHtml();
+}
+
+bool QQuickDropEvent::hasText() const
+{
+    return event->mimeData()->hasText();
+}
+
+bool QQuickDropEvent::hasUrls() const
+{
+    return event->mimeData()->hasUrls();
+}
+
+QVariant QQuickDropEvent::colorData() const
+{
+    return event->mimeData()->colorData();
+}
+
+QString QQuickDropEvent::html() const
+{
+    return event->mimeData()->html();
+}
+
+QString QQuickDropEvent::text() const
+{
+    return event->mimeData()->text();
+}
+
+QList<QUrl> QQuickDropEvent::urls() const
+{
+    return event->mimeData()->urls();
+}
+
+QStringList QQuickDropEvent::formats() const
+{
+    return event->mimeData()->formats();
+}
+
+void QQuickDropEvent::getDataAsString(QQmlV4Function *args)
+{
+    if (args->length() != 0) {
+        QV4::Value v = (*args)[0];
+        QString format = v.toQString();
+        QString rv = QString::fromUtf8(event->mimeData()->data(format));
+        QV4::ExecutionEngine *v4 = QV8Engine::getV4(args->engine());
+        args->setReturnValue(QV4::Value::fromString(v4, rv));
+    }
+}
+
+void QQuickDropEvent::acceptProposedAction(QQmlV4Function *)
+{
+    event->acceptProposedAction();
+}
+
 void QQuickDropEvent::accept(QQmlV4Function *args)
 {
     Qt::DropAction action = event->dropAction();
@@ -425,6 +581,7 @@ void QQuickDropEvent::accept(QQmlV4Function *args)
         if (v.isInt32())
             action = Qt::DropAction(v.integerValue());
     }
+
     // get action from arguments.
     event->setDropAction(action);
     event->accept();
diff --git a/src/quick/items/qquickdroparea_p.h b/src/quick/items/qquickdroparea_p.h
index 3bdbe7f72e..6ba876ef34 100644
--- a/src/quick/items/qquickdroparea_p.h
+++ b/src/quick/items/qquickdroparea_p.h
@@ -62,8 +62,18 @@ class QQuickDropEvent : public QObject
     Q_PROPERTY(QObject *source READ source)
     Q_PROPERTY(QStringList keys READ keys)
     Q_PROPERTY(Qt::DropActions supportedActions READ supportedActions)
+    Q_PROPERTY(Qt::DropActions proposedAction READ proposedAction)
     Q_PROPERTY(Qt::DropAction action READ action WRITE setAction RESET resetAction)
     Q_PROPERTY(bool accepted READ accepted WRITE setAccepted)
+    Q_PROPERTY(bool hasColor READ hasColor)
+    Q_PROPERTY(bool hasHtml READ hasHtml)
+    Q_PROPERTY(bool hasText READ hasText)
+    Q_PROPERTY(bool hasUrls READ hasUrls)
+    Q_PROPERTY(QVariant colorData READ colorData)
+    Q_PROPERTY(QString html READ html)
+    Q_PROPERTY(QString text READ text)
+    Q_PROPERTY(QList<QUrl> urls READ urls)
+    Q_PROPERTY(QStringList formats READ formats)
 public:
     QQuickDropEvent(QQuickDropAreaPrivate *d, QDropEvent *event) : d(d), event(event) {}
 
@@ -73,6 +83,7 @@ public:
     QObject *source();
 
     Qt::DropActions supportedActions() const { return event->possibleActions(); }
+    Qt::DropActions proposedAction() const { return event->proposedAction(); }
     Qt::DropAction action() const { return event->dropAction(); }
     void setAction(Qt::DropAction action) { event->setDropAction(action); }
     void resetAction() { event->setDropAction(event->proposedAction()); }
@@ -82,6 +93,18 @@ public:
     bool accepted() const { return event->isAccepted(); }
     void setAccepted(bool accepted) { event->setAccepted(accepted); }
 
+    bool hasColor() const;
+    bool hasHtml() const;
+    bool hasText() const;
+    bool hasUrls() const;
+    QVariant colorData() const;
+    QString html() const;
+    QString text() const;
+    QList<QUrl> urls() const;
+    QStringList formats() const;
+
+    Q_INVOKABLE void getDataAsString(QQmlV4Function *);
+    Q_INVOKABLE void acceptProposedAction(QQmlV4Function *);
     Q_INVOKABLE void accept(QQmlV4Function *);
 
 private:
diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp
index 1970a03bee..8a73a5d73d 100644
--- a/src/quick/items/qquickmousearea.cpp
+++ b/src/quick/items/qquickmousearea.cpp
@@ -61,137 +61,6 @@ DEFINE_BOOL_CONFIG_OPTION(qmlVisualTouchDebugging, QML_VISUAL_TOUCH_DEBUGGING)
 
 static const int PressAndHoldDelay = 800;
 
-#ifndef QT_NO_DRAGANDDROP
-
-QQuickDrag::QQuickDrag(QObject *parent)
-: QObject(parent), _target(0), _axis(XAndYAxis), _xmin(-FLT_MAX),
-_xmax(FLT_MAX), _ymin(-FLT_MAX), _ymax(FLT_MAX), _active(false), _filterChildren(false)
-{
-}
-
-QQuickDrag::~QQuickDrag()
-{
-}
-
-QQuickItem *QQuickDrag::target() const
-{
-    return _target;
-}
-
-void QQuickDrag::setTarget(QQuickItem *t)
-{
-    if (_target == t)
-        return;
-    _target = t;
-    emit targetChanged();
-}
-
-void QQuickDrag::resetTarget()
-{
-    if (_target == 0)
-        return;
-    _target = 0;
-    emit targetChanged();
-}
-
-QQuickDrag::Axis QQuickDrag::axis() const
-{
-    return _axis;
-}
-
-void QQuickDrag::setAxis(QQuickDrag::Axis a)
-{
-    if (_axis == a)
-        return;
-    _axis = a;
-    emit axisChanged();
-}
-
-qreal QQuickDrag::xmin() const
-{
-    return _xmin;
-}
-
-void QQuickDrag::setXmin(qreal m)
-{
-    if (_xmin == m)
-        return;
-    _xmin = m;
-    emit minimumXChanged();
-}
-
-qreal QQuickDrag::xmax() const
-{
-    return _xmax;
-}
-
-void QQuickDrag::setXmax(qreal m)
-{
-    if (_xmax == m)
-        return;
-    _xmax = m;
-    emit maximumXChanged();
-}
-
-qreal QQuickDrag::ymin() const
-{
-    return _ymin;
-}
-
-void QQuickDrag::setYmin(qreal m)
-{
-    if (_ymin == m)
-        return;
-    _ymin = m;
-    emit minimumYChanged();
-}
-
-qreal QQuickDrag::ymax() const
-{
-    return _ymax;
-}
-
-void QQuickDrag::setYmax(qreal m)
-{
-    if (_ymax == m)
-        return;
-    _ymax = m;
-    emit maximumYChanged();
-}
-
-bool QQuickDrag::active() const
-{
-    return _active;
-}
-
-void QQuickDrag::setActive(bool drag)
-{
-    if (_active == drag)
-        return;
-    _active = drag;
-    emit activeChanged();
-}
-
-bool QQuickDrag::filterChildren() const
-{
-    return _filterChildren;
-}
-
-void QQuickDrag::setFilterChildren(bool filter)
-{
-    if (_filterChildren == filter)
-        return;
-    _filterChildren = filter;
-    emit filterChildrenChanged();
-}
-
-QQuickDragAttached *QQuickDrag::qmlAttachedProperties(QObject *obj)
-{
-    return new QQuickDragAttached(obj);
-}
-
-#endif // QT_NO_DRAGANDDROP
-
 QQuickMouseAreaPrivate::QQuickMouseAreaPrivate()
 : enabled(true), hovered(false), longPress(false),
   moved(false), stealMouse(false), doubleClick(false), preventStealing(false),
diff --git a/src/quick/items/qquickmousearea_p.h b/src/quick/items/qquickmousearea_p.h
index fa32f32b65..ffe75ad843 100644
--- a/src/quick/items/qquickmousearea_p.h
+++ b/src/quick/items/qquickmousearea_p.h
@@ -49,78 +49,7 @@
 QT_BEGIN_NAMESPACE
 
 class QQuickMouseEvent;
-
-#ifndef QT_NO_DRAGANDDROP
-
-class QQuickDragAttached;
-class Q_AUTOTEST_EXPORT QQuickDrag : public QObject
-{
-    Q_OBJECT
-
-    Q_ENUMS(Axis)
-    Q_PROPERTY(QQuickItem *target READ target WRITE setTarget NOTIFY targetChanged RESET resetTarget)
-    Q_PROPERTY(Axis axis READ axis WRITE setAxis NOTIFY axisChanged)
-    Q_PROPERTY(qreal minimumX READ xmin WRITE setXmin NOTIFY minimumXChanged)
-    Q_PROPERTY(qreal maximumX READ xmax WRITE setXmax NOTIFY maximumXChanged)
-    Q_PROPERTY(qreal minimumY READ ymin WRITE setYmin NOTIFY minimumYChanged)
-    Q_PROPERTY(qreal maximumY READ ymax WRITE setYmax NOTIFY maximumYChanged)
-    Q_PROPERTY(bool active READ active NOTIFY activeChanged)
-    Q_PROPERTY(bool filterChildren READ filterChildren WRITE setFilterChildren NOTIFY filterChildrenChanged)
-    //### consider drag and drop
-
-public:
-    QQuickDrag(QObject *parent=0);
-    ~QQuickDrag();
-
-    QQuickItem *target() const;
-    void setTarget(QQuickItem *target);
-    void resetTarget();
-
-    enum Axis { XAxis=0x01, YAxis=0x02, XAndYAxis=0x03, XandYAxis=XAndYAxis };
-    Axis axis() const;
-    void setAxis(Axis);
-
-    qreal xmin() const;
-    void setXmin(qreal);
-    qreal xmax() const;
-    void setXmax(qreal);
-    qreal ymin() const;
-    void setYmin(qreal);
-    qreal ymax() const;
-    void setYmax(qreal);
-
-    bool active() const;
-    void setActive(bool);
-
-    bool filterChildren() const;
-    void setFilterChildren(bool);
-
-    static QQuickDragAttached *qmlAttachedProperties(QObject *obj);
-
-Q_SIGNALS:
-    void targetChanged();
-    void axisChanged();
-    void minimumXChanged();
-    void maximumXChanged();
-    void minimumYChanged();
-    void maximumYChanged();
-    void activeChanged();
-    void filterChildrenChanged();
-
-private:
-    QQuickItem *_target;
-    Axis _axis;
-    qreal _xmin;
-    qreal _xmax;
-    qreal _ymin;
-    qreal _ymax;
-    bool _active : 1;
-    bool _filterChildren: 1;
-    Q_DISABLE_COPY(QQuickDrag)
-};
-
-#endif // QT_NO_DRAGANDDROP
-
+class QQuickDrag;
 class QQuickMouseAreaPrivate;
 class QQuickWheelEvent;
 // used in Qt Location
@@ -244,10 +173,6 @@ private:
 
 QT_END_NAMESPACE
 
-#ifndef QT_NO_DRAGANDDROP
-QML_DECLARE_TYPE(QQuickDrag)
-QML_DECLARE_TYPEINFO(QQuickDrag, QML_HAS_ATTACHED_PROPERTIES)
-#endif
 QML_DECLARE_TYPE(QQuickMouseArea)
 
 #endif // QQUICKMOUSEAREA_P_H
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp
index 6bdd8dc221..c195994de4 100644
--- a/src/quick/items/qquicktextinput.cpp
+++ b/src/quick/items/qquicktextinput.cpp
@@ -48,6 +48,7 @@
 
 
 #include <QtCore/qcoreapplication.h>
+#include <QtCore/qmimedata.h>
 #include <QtQml/qqmlinfo.h>
 #include <QtGui/qevent.h>
 #include <QTextBoundaryFinder>
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp
index 21e1a009b0..41c7cd9618 100644
--- a/src/quick/items/qquickwindow.cpp
+++ b/src/quick/items/qquickwindow.cpp
@@ -46,6 +46,8 @@
 #include "qquickitem_p.h"
 #include "qquickevents_p_p.h"
 
+#include <private/qquickdrag_p.h>
+
 #include <QtQuick/private/qsgrenderer_p.h>
 #include <QtQuick/private/qsgtexture_p.h>
 #include <QtQuick/private/qsgflashnode_p.h>
@@ -363,6 +365,9 @@ QQuickWindowPrivate::QQuickWindowPrivate()
     , mouseGrabberItem(0)
 #ifndef QT_NO_CURSOR
     , cursorItem(0)
+#endif
+#ifndef QT_NO_DRAGANDDROP
+    , dragGrabber(0)
 #endif
     , touchMouseId(-1)
     , touchMousePressTimestamp(0)
@@ -380,6 +385,9 @@ QQuickWindowPrivate::QQuickWindowPrivate()
     , renderTargetId(0)
     , incubationController(0)
 {
+#ifndef QT_NO_DRAGANDDROP
+    dragGrabber = new QQuickDragGrabber;
+#endif
 }
 
 QQuickWindowPrivate::~QQuickWindowPrivate()
@@ -984,7 +992,9 @@ QQuickWindow::~QQuickWindow()
 
     QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
     delete d->incubationController; d->incubationController = 0;
-
+#ifndef QT_NO_DRAGANDDROP
+    delete d->dragGrabber; d->dragGrabber = 0;
+#endif
     delete d->contentItem; d->contentItem = 0;
 }
 
@@ -1202,7 +1212,7 @@ bool QQuickWindow::event(QEvent *e)
     case QEvent::DragLeave:
     case QEvent::DragMove:
     case QEvent::Drop:
-        d->deliverDragEvent(&d->dragGrabber, e);
+        d->deliverDragEvent(d->dragGrabber, e);
         break;
 #endif
     case QEvent::WindowDeactivate:
diff --git a/src/quick/items/qquickwindow_p.h b/src/quick/items/qquickwindow_p.h
index aa7d7c5128..ad861754d7 100644
--- a/src/quick/items/qquickwindow_p.h
+++ b/src/quick/items/qquickwindow_p.h
@@ -57,7 +57,6 @@
 #include "qquickwindow.h"
 
 #include <QtQuick/private/qsgcontext_p.h>
-#include <private/qquickdrag_p.h>
 
 #include <QtCore/qthread.h>
 #include <QtCore/qmutex.h>
@@ -73,6 +72,7 @@ QT_BEGIN_NAMESPACE
 //Make it easy to identify and customize the root item if needed
 
 class QSGRenderLoop;
+class QQuickDragGrabber;
 
 class QQuickRootItem : public QQuickItem
 {
@@ -116,7 +116,7 @@ public:
     QQuickItem *cursorItem;
 #endif
 #ifndef QT_NO_DRAGANDDROP
-    QQuickDragGrabber dragGrabber;
+    QQuickDragGrabber *dragGrabber;
 #endif
     int touchMouseId;
     bool checkIfDoubleClicked(ulong newPressEventTimestamp);
diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
index 5e7370f8a5..de1c12097b 100644
--- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
+++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
@@ -41,6 +41,7 @@
 
 #include <QtTest/QtTest>
 #include <QtTest/QSignalSpy>
+#include <QtQuick/private/qquickdrag_p.h>
 #include <QtQuick/private/qquickmousearea_p.h>
 #include <QtQuick/private/qquickrectangle_p.h>
 #include <private/qquickflickable_p.h>
-- 
GitLab