diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2019-05-23 11:16:23 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2019-05-23 09:33:53 +0000 |
commit | 2f24150b03a8141b3e64442bcfcc08448b9a79e5 (patch) | |
tree | d742b17e50d24b82f7e5e58a04abf6c7a73cb4c2 | |
parent | c8c2db3f5b157131542025ce556d248c7a916a00 (diff) |
Add a feature for Drag&Drop support in Qt Quick
Even if we have drag&drop in QtGui we don't necessarily want it in
QtQuick. Also, since the QQuickDropArea needs QRegularExpression,
quick-draganddrop needs to depend on regularexpression.
Change-Id: I623e910178160ad3e3af3c01c96c30e88dc1b7ba
Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
-rw-r--r-- | src/quick/configure.json | 13 | ||||
-rw-r--r-- | src/quick/items/items.pri | 14 | ||||
-rw-r--r-- | src/quick/items/qquickdrag.cpp | 3 | ||||
-rw-r--r-- | src/quick/items/qquickdrag_p.h | 4 | ||||
-rw-r--r-- | src/quick/items/qquickdroparea.cpp | 4 | ||||
-rw-r--r-- | src/quick/items/qquickdroparea_p.h | 4 | ||||
-rw-r--r-- | src/quick/items/qquickitem.cpp | 8 | ||||
-rw-r--r-- | src/quick/items/qquickitem.h | 2 | ||||
-rw-r--r-- | src/quick/items/qquickitemsmodule.cpp | 4 | ||||
-rw-r--r-- | src/quick/items/qquickmousearea.cpp | 22 | ||||
-rw-r--r-- | src/quick/items/qquickmousearea_p.h | 4 | ||||
-rw-r--r-- | src/quick/items/qquickmousearea_p_p.h | 2 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 14 | ||||
-rw-r--r-- | src/quick/items/qquickwindow_p.h | 4 | ||||
-rw-r--r-- | src/quickwidgets/qquickwidget.cpp | 6 | ||||
-rw-r--r-- | src/quickwidgets/qquickwidget.h | 2 |
16 files changed, 62 insertions, 48 deletions
diff --git a/src/quick/configure.json b/src/quick/configure.json index 4098db87aa..0cb1e7470b 100644 --- a/src/quick/configure.json +++ b/src/quick/configure.json @@ -1,6 +1,7 @@ { "module": "quick", "depends": [ + "core-private", "qml-private", "gui-private", "qmlmodels-private" @@ -180,6 +181,18 @@ "output": [ "privateFeature" ] + }, + "quick-draganddrop": { + "label": "Drag & Drop", + "purpose": "Drag and drop support for Qt Quick", + "section": "Qt Quick", + "condition": [ + "features.draganddrop", + "features.regularexpression" + ], + "output": [ + "publicFeature" + ] } }, diff --git a/src/quick/items/items.pri b/src/quick/items/items.pri index e649b5429d..6f2f9fbd8e 100644 --- a/src/quick/items/items.pri +++ b/src/quick/items/items.pri @@ -52,8 +52,6 @@ HEADERS += \ $$PWD/qquickstateoperations_p.h \ $$PWD/qquickimplicitsizeitem_p.h \ $$PWD/qquickimplicitsizeitem_p_p.h \ - $$PWD/qquickdrag_p.h \ - $$PWD/qquickdroparea_p.h \ $$PWD/qquickmultipointtoucharea_p.h \ $$PWD/qquickscreen_p.h \ $$PWD/qquickwindowattached_p.h \ @@ -95,8 +93,6 @@ SOURCES += \ $$PWD/qquickstateoperations.cpp \ $$PWD/qquickimplicitsizeitem.cpp \ $$PWD/qquickaccessibleattached.cpp \ - $$PWD/qquickdrag.cpp \ - $$PWD/qquickdroparea.cpp \ $$PWD/qquickmultipointtoucharea.cpp \ $$PWD/qquickwindowmodule.cpp \ $$PWD/qquickscreen.cpp \ @@ -105,6 +101,16 @@ SOURCES += \ $$PWD/qquickgraphicsinfo.cpp \ $$PWD/qquickitemgrabresult.cpp +qtConfig(quick-draganddrop) { + HEADERS += \ + $$PWD/qquickdrag_p.h \ + $$PWD/qquickdroparea_p.h \ + + SOURCES += \ + $$PWD/qquickdrag.cpp \ + $$PWD/qquickdroparea.cpp \ +} + qtConfig(quick-animatedimage) { HEADERS += \ $$PWD/qquickanimatedimage_p.h \ diff --git a/src/quick/items/qquickdrag.cpp b/src/quick/items/qquickdrag.cpp index 74a00435e7..028b2b153d 100644 --- a/src/quick/items/qquickdrag.cpp +++ b/src/quick/items/qquickdrag.cpp @@ -52,7 +52,6 @@ #include <QtGui/qstylehints.h> #include <QtGui/qguiapplication.h> -#if QT_CONFIG(draganddrop) #include <qpa/qplatformdrag.h> #include <QtGui/qdrag.h> @@ -996,5 +995,3 @@ QQuickDragAttached *QQuickDrag::qmlAttachedProperties(QObject *obj) QT_END_NAMESPACE #include "moc_qquickdrag_p.cpp" - -#endif // draganddrop diff --git a/src/quick/items/qquickdrag_p.h b/src/quick/items/qquickdrag_p.h index 81f3fb5e5c..094070aa2c 100644 --- a/src/quick/items/qquickdrag_p.h +++ b/src/quick/items/qquickdrag_p.h @@ -60,7 +60,7 @@ #include <QtCore/qstringlist.h> #include <QtCore/qurl.h> -#if QT_CONFIG(draganddrop) +QT_REQUIRE_CONFIG(quick_draganddrop); QT_BEGIN_NAMESPACE @@ -318,6 +318,4 @@ QT_END_NAMESPACE QML_DECLARE_TYPE(QQuickDrag) QML_DECLARE_TYPEINFO(QQuickDrag, QML_HAS_ATTACHED_PROPERTIES) -#endif // draganddrop - #endif diff --git a/src/quick/items/qquickdroparea.cpp b/src/quick/items/qquickdroparea.cpp index cb87bdce76..4f6afb1863 100644 --- a/src/quick/items/qquickdroparea.cpp +++ b/src/quick/items/qquickdroparea.cpp @@ -43,8 +43,6 @@ #include <private/qv4arraybuffer_p.h> -#if QT_CONFIG(draganddrop) - QT_BEGIN_NAMESPACE QQuickDropAreaDrag::QQuickDropAreaDrag(QQuickDropAreaPrivate *d, QObject *parent) @@ -619,5 +617,3 @@ void QQuickDropEvent::accept(QQmlV4Function *args) QT_END_NAMESPACE #include "moc_qquickdroparea_p.cpp" - -#endif // draganddrop diff --git a/src/quick/items/qquickdroparea_p.h b/src/quick/items/qquickdroparea_p.h index d25cd4decc..2b2ace2eae 100644 --- a/src/quick/items/qquickdroparea_p.h +++ b/src/quick/items/qquickdroparea_p.h @@ -55,7 +55,7 @@ #include <QtGui/qevent.h> -#if QT_CONFIG(draganddrop) +QT_REQUIRE_CONFIG(quick_draganddrop); QT_BEGIN_NAMESPACE @@ -190,6 +190,4 @@ QT_END_NAMESPACE QML_DECLARE_TYPE(QQuickDropEvent) QML_DECLARE_TYPE(QQuickDropArea) -#endif // draganddrop - #endif // QQUICKDROPAREA_P_H diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index e114404524..52a1d59e77 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -4163,7 +4163,7 @@ void QQuickItem::hoverLeaveEvent(QHoverEvent *event) Q_UNUSED(event); } -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) /*! This event handler can be reimplemented in a subclass to receive drag-enter events for an item. The event information is provided by the @@ -4231,7 +4231,7 @@ void QQuickItem::dropEvent(QDropEvent *event) { Q_UNUSED(event); } -#endif // draganddrop +#endif // quick_draganddrop /*! Reimplement this method to filter the mouse events that are received by @@ -8118,7 +8118,7 @@ bool QQuickItem::event(QEvent *ev) wheelEvent(static_cast<QWheelEvent*>(ev)); break; #endif -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) case QEvent::DragEnter: dragEnterEvent(static_cast<QDragEnterEvent*>(ev)); break; @@ -8131,7 +8131,7 @@ bool QQuickItem::event(QEvent *ev) case QEvent::Drop: dropEvent(static_cast<QDropEvent*>(ev)); break; -#endif // draganddrop +#endif // quick_draganddrop #if QT_CONFIG(gestures) case QEvent::NativeGesture: ev->ignore(); diff --git a/src/quick/items/qquickitem.h b/src/quick/items/qquickitem.h index 6f601e0872..ad9bab2a90 100644 --- a/src/quick/items/qquickitem.h +++ b/src/quick/items/qquickitem.h @@ -433,7 +433,7 @@ protected: virtual void hoverEnterEvent(QHoverEvent *event); virtual void hoverMoveEvent(QHoverEvent *event); virtual void hoverLeaveEvent(QHoverEvent *event); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) virtual void dragEnterEvent(QDragEnterEvent *); virtual void dragMoveEvent(QDragMoveEvent *); virtual void dragLeaveEvent(QDragLeaveEvent *); diff --git a/src/quick/items/qquickitemsmodule.cpp b/src/quick/items/qquickitemsmodule.cpp index 2a1c442653..eaad06e0c4 100644 --- a/src/quick/items/qquickitemsmodule.cpp +++ b/src/quick/items/qquickitemsmodule.cpp @@ -110,8 +110,10 @@ #include "qquickshadereffect_p.h" #include "qquickshadereffectmesh_p.h" #endif +#if QT_CONFIG(quick_draganddrop) #include "qquickdrag_p.h" #include "qquickdroparea_p.h" +#endif #include "qquickmultipointtoucharea_p.h" #include <QtQuick/private/qquickaccessibleattached_p.h> @@ -305,7 +307,7 @@ static void qt_quickitems_defineModule(const char *uri, int major, int minor) qmlRegisterType<QQuickPathInterpolator>("QtQuick",2,0,"PathInterpolator"); #endif -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) qmlRegisterType<QQuickDropArea>("QtQuick", 2, 0, "DropArea"); qmlRegisterType<QQuickDropEvent>(); qmlRegisterType<QQuickDropAreaDrag>(); diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp index 0b345697ec..53a5e5df1c 100644 --- a/src/quick/items/qquickmousearea.cpp +++ b/src/quick/items/qquickmousearea.cpp @@ -40,7 +40,9 @@ #include "qquickmousearea_p.h" #include "qquickmousearea_p_p.h" #include "qquickwindow.h" +#if QT_CONFIG(quick_draganddrop) #include "qquickdrag_p.h" +#endif #include <private/qqmldata_p.h> #include <private/qsgadaptationlayer_p.h> @@ -62,7 +64,7 @@ QQuickMouseAreaPrivate::QQuickMouseAreaPrivate() moved(false), stealMouse(false), doubleClick(false), preventStealing(false), propagateComposedEvents(false), overThreshold(false), pressed(nullptr), pressAndHoldInterval(-1) -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) , drag(nullptr) #endif #if QT_CONFIG(cursor) @@ -73,7 +75,7 @@ QQuickMouseAreaPrivate::QQuickMouseAreaPrivate() QQuickMouseAreaPrivate::~QQuickMouseAreaPrivate() { -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) delete drag; #endif #if QT_CONFIG(cursor) @@ -685,7 +687,7 @@ void QQuickMouseArea::mousePressEvent(QMouseEvent *event) } else { d->longPress = false; d->saveEvent(event); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) if (d->drag) d->drag->setActive(false); #endif @@ -712,7 +714,7 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event) // ### can GV handle this for us? setHovered(contains(d->lastPos)); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) if (d->drag && d->drag->target()) { if (!d->moved) { d->targetStartPos = d->drag->target()->parentItem() @@ -806,7 +808,7 @@ void QQuickMouseArea::mouseReleaseEvent(QMouseEvent *event) setPressed(event->button(), false, event->source()); if (!d->pressed) { // no other buttons are pressed -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) if (d->drag) d->drag->setActive(false); #endif @@ -916,7 +918,7 @@ void QQuickMouseArea::ungrabMouse() d->overThreshold = false; setKeepMouseGrab(false); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) if (d->drag) d->drag->setActive(false); #endif @@ -999,7 +1001,7 @@ bool QQuickMouseArea::childMouseEventFilter(QQuickItem *i, QEvent *e) Q_D(QQuickMouseArea); if (!d->pressed && (!d->enabled || !isVisible() -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) || !d->drag || !d->drag->filterChildren() #endif ) @@ -1022,7 +1024,7 @@ void QQuickMouseArea::timerEvent(QTimerEvent *event) Q_D(QQuickMouseArea); if (event->timerId() == d->pressAndHoldTimer.timerId()) { d->pressAndHoldTimer.stop(); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) bool dragged = d->drag && d->drag->active(); #else bool dragged = false; @@ -1198,7 +1200,7 @@ bool QQuickMouseArea::setPressed(Qt::MouseButton button, bool p, Qt::MouseEventS { Q_D(QQuickMouseArea); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) bool dragged = d->drag && d->drag->active(); #else bool dragged = false; @@ -1404,7 +1406,7 @@ void QQuickMouseArea::resetPressAndHoldInterval() */ -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) QQuickDrag *QQuickMouseArea::drag() { Q_D(QQuickMouseArea); diff --git a/src/quick/items/qquickmousearea_p.h b/src/quick/items/qquickmousearea_p.h index 0a8449957f..76e5c98b35 100644 --- a/src/quick/items/qquickmousearea_p.h +++ b/src/quick/items/qquickmousearea_p.h @@ -75,7 +75,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickMouseArea : public QQuickItem Q_PROPERTY(Qt::MouseButtons pressedButtons READ pressedButtons NOTIFY pressedButtonsChanged) Q_PROPERTY(Qt::MouseButtons acceptedButtons READ acceptedButtons WRITE setAcceptedButtons NOTIFY acceptedButtonsChanged) Q_PROPERTY(bool hoverEnabled READ hoverEnabled WRITE setHoverEnabled NOTIFY hoverEnabledChanged) -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) Q_PROPERTY(QQuickDrag *drag READ drag CONSTANT) //### add flicking to QQuickDrag or add a QQuickFlick ??? #endif Q_PROPERTY(bool preventStealing READ preventStealing WRITE setPreventStealing NOTIFY preventStealingChanged) @@ -111,7 +111,7 @@ public: bool hoverEnabled() const; void setHoverEnabled(bool h); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) QQuickDrag *drag(); #endif diff --git a/src/quick/items/qquickmousearea_p_p.h b/src/quick/items/qquickmousearea_p_p.h index 0dd2690d43..fba383e268 100644 --- a/src/quick/items/qquickmousearea_p_p.h +++ b/src/quick/items/qquickmousearea_p_p.h @@ -97,7 +97,7 @@ public: bool overThreshold : 1; Qt::MouseButtons pressed; int pressAndHoldInterval; -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) QQuickDrag *drag; #endif QPointer<QQuickPointerMask> mask; diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 5dcd101462..24a17ce80f 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -45,7 +45,9 @@ #include "qquickitem_p.h" #include "qquickevents_p_p.h" +#if QT_CONFIG(quick_draganddrop) #include <private/qquickdrag_p.h> +#endif #include <private/qquickhoverhandler_p.h> #include <private/qquickpointerhandler_p.h> @@ -496,7 +498,7 @@ QQuickWindowPrivate::QQuickWindowPrivate() #if QT_CONFIG(cursor) , cursorItem(nullptr) #endif -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) , dragGrabber(nullptr) #endif , touchMouseId(-1) @@ -524,7 +526,7 @@ QQuickWindowPrivate::QQuickWindowPrivate() , vaoHelper(nullptr) , incubationController(nullptr) { -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) dragGrabber = new QQuickDragGrabber; #endif } @@ -1346,7 +1348,7 @@ QQuickWindow::~QQuickWindow() } delete d->incubationController; d->incubationController = nullptr; -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) delete d->dragGrabber; d->dragGrabber = nullptr; #endif QQuickRootItem *root = d->contentItem; @@ -1635,7 +1637,7 @@ bool QQuickWindow::event(QEvent *e) d->clearHover(); d->lastMousePosition = QPointF(); break; -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) case QEvent::DragEnter: case QEvent::DragLeave: case QEvent::DragMove: @@ -2714,7 +2716,7 @@ void QQuickWindowPrivate::deliverMatchingPointsToItem(QQuickItem *item, QQuickPo } } -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) void QQuickWindowPrivate::deliverDragEvent(QQuickDragGrabber *grabber, QEvent *event) { grabber->resetTarget(); @@ -2837,7 +2839,7 @@ bool QQuickWindowPrivate::deliverDragEvent(QQuickDragGrabber *grabber, QQuickIte return accepted; } -#endif // draganddrop +#endif // quick_draganddrop #if QT_CONFIG(cursor) void QQuickWindowPrivate::updateCursor(const QPointF &scenePos) diff --git a/src/quick/items/qquickwindow_p.h b/src/quick/items/qquickwindow_p.h index 63760a3b68..b4b456fbaa 100644 --- a/src/quick/items/qquickwindow_p.h +++ b/src/quick/items/qquickwindow_p.h @@ -130,7 +130,7 @@ public: #if QT_CONFIG(cursor) QQuickItem *cursorItem; #endif -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) QQuickDragGrabber *dragGrabber; #endif int touchMouseId; @@ -186,7 +186,7 @@ public: Qt::KeyboardModifiers modifiers, ulong timestamp, bool accepted); bool clearHover(ulong timestamp = 0); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) void deliverDragEvent(QQuickDragGrabber *, QEvent *); bool deliverDragEvent(QQuickDragGrabber *, QQuickItem *, QDragMoveEvent *); #endif diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp index f1a0f0c863..6970553fc6 100644 --- a/src/quickwidgets/qquickwidget.cpp +++ b/src/quickwidgets/qquickwidget.cpp @@ -129,7 +129,7 @@ void QQuickWidgetPrivate::init(QQmlEngine* e) if (!engine.isNull() && !engine.data()->incubationController()) engine.data()->setIncubationController(offscreenWindow->incubationController()); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) q->setAcceptDrops(true); #endif @@ -1530,7 +1530,7 @@ bool QQuickWidget::event(QEvent *e) return QWidget::event(e); } -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) /*! \reimp */ void QQuickWidget::dragEnterEvent(QDragEnterEvent *e) @@ -1565,7 +1565,7 @@ void QQuickWidget::dropEvent(QDropEvent *e) d->offscreenWindow->event(e); } -#endif // draganddrop +#endif // quick_draganddrop // TODO: try to separate the two cases of // 1. render() unconditionally without sync diff --git a/src/quickwidgets/qquickwidget.h b/src/quickwidgets/qquickwidget.h index 5543705f13..1ceb7449b3 100644 --- a/src/quickwidgets/qquickwidget.h +++ b/src/quickwidgets/qquickwidget.h @@ -134,7 +134,7 @@ protected: void wheelEvent(QWheelEvent *) override; #endif -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(quick_draganddrop) void dragEnterEvent(QDragEnterEvent *) override; void dragMoveEvent(QDragMoveEvent *) override; void dragLeaveEvent(QDragLeaveEvent *) override; |