QmlMaterial 0.1.0
Loading...
Searching...
No Matches
pointer_delivery.hpp
1#pragma once
2
3#include <QCoreApplication>
4#include <QPointer>
5#include <QQuickWindow>
6#include <QtQuick/private/qquickdeliveryagent_p_p.h>
7#include <QtQuick/private/qquickitem_p.h>
8#include <memory>
9
10namespace qml_material::pointer_delivery
11{
12inline std::unique_ptr<QPointerEvent> cloneForWindow(QPointerEvent* event) {
13 return std::unique_ptr<QPointerEvent>(QQuickDeliveryAgentPrivate::clonePointerEvent(
14 event, event->points().first().scenePosition()));
15}
16
17inline void send(QQuickItem* owner, QQuickWindow* window, QPointerEvent* event) {
18 auto* agent = QQuickItemPrivate::get(owner)->deliveryAgent();
19 if (! agent) return;
20 QPointer<QQuickDeliveryAgent> guard(agent);
21 auto* state = QQuickItemPrivate::get(owner)->deliveryAgentPrivate();
22 const bool filtering = state->allowChildEventFiltering;
23 state->allowChildEventFiltering = false;
24 QCoreApplication::sendEvent(window, event);
25 if (guard) state->allowChildEventFiltering = filtering;
26}
27} // namespace qml_material::pointer_delivery