Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
6.0.0 Beta3
-
None
-
262d7eb305e1dea8dac660bec3ccc50193258ea9 (qt/qtdeclarative/dev)
Description
Easy to see with qtdeclarative/tests/manual/pointer/pinchAndWheel.qml for example: you're supposed to be able to spin the mouse wheel to zoom in and out, but it will only work once, until you move the mouse. The reason is here:
bool QQuickItemPrivate::handlePointerEvent(QPointerEvent *event, bool avoidExclusiveGrabber) { bool delivered = false; if (extra.isAllocated()) { for (QQuickPointerHandler *handler : extra->pointerHandlers) { bool avoidThisHandler = false; if (avoidExclusiveGrabber) { for (auto &p : event->points()) { if (event->exclusiveGrabber(p) == handler) { avoidThisHandler = true; break; } } } if (!avoidThisHandler && QQuickPointerHandlerPrivate::deviceDeliveryTargets(event->device()).contains(handler)) qDebug() << "avoiding" << handler << "because it's in deviceDeliveryTargets" << event; if (!avoidThisHandler && !QQuickPointerHandlerPrivate::deviceDeliveryTargets(event->device()).contains(handler)) { handler->handlePointerEvent(event); delivered = true; } } } return delivered; }
QQuickWindowPrivate::deliverPointerEvent() clears deviceDeliveryTargets but QQuickWindowPrivate::deliverSinglePointEventUntilAccepted() does not.