Changeset View
Changeset View
Standalone View
Standalone View
applets/kicker/plugin/draghelper.cpp
Show All 18 Lines | |||||
19 | 19 | | |||
20 | #include "draghelper.h" | 20 | #include "draghelper.h" | ||
21 | 21 | | |||
22 | #include <QApplication> | 22 | #include <QApplication> | ||
23 | #include <QDrag> | 23 | #include <QDrag> | ||
24 | #include <QMimeData> | 24 | #include <QMimeData> | ||
25 | #include <QQuickItem> | 25 | #include <QQuickItem> | ||
26 | #include <QQuickWindow> | 26 | #include <QQuickWindow> | ||
27 | #include <QTimer> | ||||
27 | 28 | | |||
28 | DragHelper::DragHelper(QObject* parent) : QObject(parent) | 29 | DragHelper::DragHelper(QObject* parent) : QObject(parent) | ||
29 | , m_dragIconSize(32) | 30 | , m_dragIconSize(32) | ||
31 | , m_dragging(false) | ||||
30 | { | 32 | { | ||
31 | } | 33 | } | ||
32 | 34 | | |||
33 | DragHelper::~DragHelper() | 35 | DragHelper::~DragHelper() | ||
34 | { | 36 | { | ||
35 | } | 37 | } | ||
36 | 38 | | |||
37 | int DragHelper::dragIconSize() const | 39 | int DragHelper::dragIconSize() const | ||
Show All 23 Lines | 60 | { | |||
61 | // change). | 63 | // change). | ||
62 | 64 | | |||
63 | QMetaObject::invokeMethod(this, "doDrag", Qt::QueuedConnection, | 65 | QMetaObject::invokeMethod(this, "doDrag", Qt::QueuedConnection, | ||
64 | Q_ARG(QQuickItem*, item), Q_ARG(QUrl, url), Q_ARG(QIcon, icon), | 66 | Q_ARG(QQuickItem*, item), Q_ARG(QUrl, url), Q_ARG(QIcon, icon), | ||
65 | Q_ARG(QString, extraMimeType), Q_ARG(QString, extraMimeData)); | 67 | Q_ARG(QString, extraMimeType), Q_ARG(QString, extraMimeData)); | ||
66 | } | 68 | } | ||
67 | 69 | | |||
68 | void DragHelper::doDrag(QQuickItem *item, const QUrl &url, const QIcon &icon, | 70 | void DragHelper::doDrag(QQuickItem *item, const QUrl &url, const QIcon &icon, | ||
69 | const QString &extraMimeType, const QString &extraMimeData) const | 71 | const QString &extraMimeType, const QString &extraMimeData) | ||
70 | { | 72 | { | ||
73 | setDragging(true); | ||||
74 | | ||||
71 | if (item && item->window() && item->window()->mouseGrabberItem()) { | 75 | if (item && item->window() && item->window()->mouseGrabberItem()) { | ||
72 | item->window()->mouseGrabberItem()->ungrabMouse(); | 76 | item->window()->mouseGrabberItem()->ungrabMouse(); | ||
73 | } | 77 | } | ||
74 | 78 | | |||
75 | QDrag *drag = new QDrag(item); | 79 | QDrag *drag = new QDrag(item); | ||
76 | 80 | | |||
77 | QMimeData *mimeData = new QMimeData(); | 81 | QMimeData *mimeData = new QMimeData(); | ||
78 | 82 | | |||
Show All 9 Lines | |||||
88 | 92 | | |||
89 | if (!icon.isNull()) { | 93 | if (!icon.isNull()) { | ||
90 | drag->setPixmap(icon.pixmap(m_dragIconSize, m_dragIconSize)); | 94 | drag->setPixmap(icon.pixmap(m_dragIconSize, m_dragIconSize)); | ||
91 | } | 95 | } | ||
92 | 96 | | |||
93 | drag->exec(); | 97 | drag->exec(); | ||
94 | 98 | | |||
95 | emit dropped(); | 99 | emit dropped(); | ||
100 | | ||||
101 | // Ensure dragging is still true when onRelease is called. | ||||
102 | QTimer::singleShot(0, qApp, [this] { | ||||
103 | setDragging(false); | ||||
104 | }); | ||||
96 | } | 105 | } | ||
97 | 106 | | |||
107 | void DragHelper::setDragging(bool dragging) | ||||
108 | { | ||||
109 | if (m_dragging == dragging) | ||||
110 | return; | ||||
111 | m_dragging = dragging; | ||||
112 | emit draggingChanged(); | ||||
113 | } | ||||
114 | No newline at end of file |