summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/dnd/qsimpledrag_p.h
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-02-22 10:58:28 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-29 20:10:30 +0100
commit3a72a1c7ed5adcdf3e473b50cc9c932e9290ee81 (patch)
treec9c6ab476e935c1141675382c051ef86e003440d /src/platformsupport/dnd/qsimpledrag_p.h
parent70784b9069fbd1c73eddbbfc83ffb44b2ca15854 (diff)
Refactor the QPA dnd interface.
- Give QPlatformDrag a synchronous drag() function returning the Qt::DropAction - Move the base functionality for asynchronous event handling to the platformsupport library as QBasicDrag (extendable base class handling drag icon and providing new virtuals) and QSimpleDrag (sample implementation for drag within the Qt application). - Change the Windows implementation accordingly. - Change XCB to be based on QBasicDrag. - Clean up QDragManager. Change-Id: I654f76f0e55a385ba189bd74f3ceaded6a8fe318 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
Diffstat (limited to 'src/platformsupport/dnd/qsimpledrag_p.h')
-rw-r--r--src/platformsupport/dnd/qsimpledrag_p.h64
1 files changed, 56 insertions, 8 deletions
diff --git a/src/platformsupport/dnd/qsimpledrag_p.h b/src/platformsupport/dnd/qsimpledrag_p.h
index 536ae241ff..7270684082 100644
--- a/src/platformsupport/dnd/qsimpledrag_p.h
+++ b/src/platformsupport/dnd/qsimpledrag_p.h
@@ -44,32 +44,80 @@
#include <qplatformdrag_qpa.h>
+#include <QtCore/QObject>
+
QT_BEGIN_NAMESPACE
+QT_BEGIN_HEADER
+
class QMouseEvent;
class QWindow;
-
+class QEventLoop;
class QDropData;
+class QShapedPixmapWindow;
-class QSimpleDrag : public QPlatformDrag
+class QBasicDrag : public QPlatformDrag, public QObject
{
public:
- QSimpleDrag();
- ~QSimpleDrag();
+ virtual ~QBasicDrag();
- virtual QMimeData *platformDropData();
+ virtual Qt::DropAction drag(QDrag *drag);
+
+ virtual bool eventFilter(QObject *o, QEvent *e);
-// virtual Qt::DropAction drag(QDrag *);
+protected:
+ QBasicDrag();
+ virtual void startDrag();
virtual void cancel();
virtual void move(const QMouseEvent *me);
virtual void drop(const QMouseEvent *me);
+ virtual void endDrag();
+
+ QShapedPixmapWindow *shapedPixmapWindow() const { return m_drag_icon_window; }
+ void updateCursor(Qt::DropAction action);
+
+ bool canDrop() const { return m_can_drop; }
+ void setCanDrop(bool c) { m_can_drop = c; }
+
+ Qt::DropAction executedDropAction() const { return m_executed_drop_action; }
+ void setExecutedDropAction(Qt::DropAction da) { m_executed_drop_action = da; }
+
+ QDrag *drag() const { return m_drag; }
+
private:
- QDropData *m_dropData;
+ void enableEventFilter();
+ void disableEventFilter();
+ void resetDndState(bool deleteSource);
+ void exitDndEventLoop();
+
+ bool m_restoreCursor;
+ QEventLoop *m_eventLoop;
+ Qt::DropAction m_executed_drop_action;
+ bool m_can_drop;
+ QDrag *m_drag;
+ QShapedPixmapWindow *m_drag_icon_window;
+ Qt::DropAction m_cursor_drop_action;
+};
+
+class QSimpleDrag : public QBasicDrag
+{
+public:
+ QSimpleDrag();
+ virtual QMimeData *platformDropData();
- QWindow *currentWindow;
+protected:
+ virtual void startDrag();
+ virtual void cancel();
+ virtual void move(const QMouseEvent *me);
+ virtual void drop(const QMouseEvent *me);
+
+private:
+ QWindow *m_current_window;
};
+QT_END_HEADER
+
QT_END_NAMESPACE
#endif