wasm: add dragleave event handling
Fixes: QTBUG-129149 Change-Id: I946f43e3a696c801a60a9a209a70ccaf57252a60 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> Reviewed-by: Piotr Wierciński <piotr.wiercinski@qt.io> (cherry picked from commit 8a93093271329f1fb867c0627e63f61ed7330860) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
a12be9e909
commit
8375adcbe4
@ -187,6 +187,12 @@ void QWasmDrag::onNativeDragFinished(DragEvent *event)
|
|||||||
m_dragState->quitEventLoopClosure();
|
m_dragState->quitEventLoopClosure();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QWasmDrag::onNativeDragLeave(DragEvent *event)
|
||||||
|
{
|
||||||
|
m_dragState->dropAction = event->dropAction;
|
||||||
|
event->dataTransfer.setDropAction(Qt::DropAction::IgnoreAction);
|
||||||
|
}
|
||||||
|
|
||||||
QWasmDrag::DragState::DragImage::DragImage(const QPixmap &pixmap, const QMimeData *mimeData,
|
QWasmDrag::DragState::DragImage::DragImage(const QPixmap &pixmap, const QMimeData *mimeData,
|
||||||
QWindow *window)
|
QWindow *window)
|
||||||
: m_temporaryImageElementParent(QWasmWindow::fromWindow(window)->containerElement())
|
: m_temporaryImageElementParent(QWasmWindow::fromWindow(window)->containerElement())
|
||||||
|
@ -32,6 +32,7 @@ public:
|
|||||||
void onNativeDrop(DragEvent *event);
|
void onNativeDrop(DragEvent *event);
|
||||||
void onNativeDragStarted(DragEvent *event);
|
void onNativeDragStarted(DragEvent *event);
|
||||||
void onNativeDragFinished(DragEvent *event);
|
void onNativeDragFinished(DragEvent *event);
|
||||||
|
void onNativeDragLeave(DragEvent *event);
|
||||||
|
|
||||||
// QPlatformDrag:
|
// QPlatformDrag:
|
||||||
Qt::DropAction drag(QDrag *drag) final;
|
Qt::DropAction drag(QDrag *drag) final;
|
||||||
|
@ -260,7 +260,6 @@ std::optional<DragEvent> DragEvent::fromWeb(emscripten::val event, QWindow *targ
|
|||||||
{
|
{
|
||||||
const auto eventType = ([&event]() -> std::optional<EventType> {
|
const auto eventType = ([&event]() -> std::optional<EventType> {
|
||||||
const auto eventTypeString = event["type"].as<std::string>();
|
const auto eventTypeString = event["type"].as<std::string>();
|
||||||
|
|
||||||
if (eventTypeString == "dragend")
|
if (eventTypeString == "dragend")
|
||||||
return EventType::DragEnd;
|
return EventType::DragEnd;
|
||||||
if (eventTypeString == "dragover")
|
if (eventTypeString == "dragover")
|
||||||
@ -269,6 +268,8 @@ std::optional<DragEvent> DragEvent::fromWeb(emscripten::val event, QWindow *targ
|
|||||||
return EventType::DragStart;
|
return EventType::DragStart;
|
||||||
if (eventTypeString == "drop")
|
if (eventTypeString == "drop")
|
||||||
return EventType::Drop;
|
return EventType::Drop;
|
||||||
|
if (eventTypeString == "dragleave")
|
||||||
|
return EventType::DragLeave;
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
})();
|
})();
|
||||||
if (!eventType)
|
if (!eventType)
|
||||||
|
@ -25,6 +25,7 @@ enum class EventType {
|
|||||||
DragEnd,
|
DragEnd,
|
||||||
DragOver,
|
DragOver,
|
||||||
DragStart,
|
DragStart,
|
||||||
|
DragLeave,
|
||||||
Drop,
|
Drop,
|
||||||
KeyDown,
|
KeyDown,
|
||||||
KeyUp,
|
KeyUp,
|
||||||
|
@ -60,6 +60,13 @@ ClientArea::ClientArea(QWasmWindow *window, QWasmScreen *screen, emscripten::val
|
|||||||
QWasmDrag::instance()->onNativeDragFinished(&event);
|
QWasmDrag::instance()->onNativeDragFinished(&event);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
m_dragLeaveCallback = std::make_unique<qstdweb::EventCallback>(
|
||||||
|
element, "dragleave", [this](emscripten::val webEvent) {
|
||||||
|
webEvent.call<void>("preventDefault");
|
||||||
|
auto event = *DragEvent::fromWeb(webEvent, m_window->window());
|
||||||
|
QWasmDrag::instance()->onNativeDragLeave(&event);
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClientArea::processPointer(const PointerEvent &event)
|
bool ClientArea::processPointer(const PointerEvent &event)
|
||||||
|
@ -40,6 +40,7 @@ private:
|
|||||||
std::unique_ptr<qstdweb::EventCallback> m_dragStartCallback;
|
std::unique_ptr<qstdweb::EventCallback> m_dragStartCallback;
|
||||||
std::unique_ptr<qstdweb::EventCallback> m_dragEndCallback;
|
std::unique_ptr<qstdweb::EventCallback> m_dragEndCallback;
|
||||||
std::unique_ptr<qstdweb::EventCallback> m_dropCallback;
|
std::unique_ptr<qstdweb::EventCallback> m_dropCallback;
|
||||||
|
std::unique_ptr<qstdweb::EventCallback> m_dragLeaveCallback;
|
||||||
|
|
||||||
QMap<int, QWindowSystemInterface::TouchPoint> m_pointerIdToTouchPoints;
|
QMap<int, QWindowSystemInterface::TouchPoint> m_pointerIdToTouchPoints;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user