40class QQuickHoverHandlerPrivate :
public QQuickSinglePointHandlerPrivate
42 Q_DECLARE_PUBLIC(QQuickHoverHandler)
45 void onEnabledChanged() override;
46 void onParentChanged(QQuickItem *oldParent, QQuickItem *newParent) override;
48 void updateHasHoverInChild(QQuickItem *item,
bool hasHover);
51void QQuickHoverHandlerPrivate::onEnabledChanged()
53 Q_Q(QQuickHoverHandler);
55 if (
auto parent = q->parentItem())
56 updateHasHoverInChild(parent, enabled);
60 QQuickSinglePointHandlerPrivate::onEnabledChanged();
63void QQuickHoverHandlerPrivate::onParentChanged(QQuickItem *oldParent, QQuickItem *newParent)
66 updateHasHoverInChild(oldParent,
false);
68 updateHasHoverInChild(newParent,
true);
70 QQuickSinglePointHandlerPrivate::onParentChanged(oldParent, newParent);
73void QQuickHoverHandlerPrivate::updateHasHoverInChild(QQuickItem *item,
bool hasHover)
75 QQuickItemPrivate *itemPriv = QQuickItemPrivate::get(item);
76 itemPriv->setHasHoverInChild(hasHover);
80 itemPriv->dirty(QQuickItemPrivate::Content);
83QQuickHoverHandler::QQuickHoverHandler(QQuickItem *parent)
84 : QQuickSinglePointHandler(*(
new QQuickHoverHandlerPrivate), parent)
86 Q_D(QQuickHoverHandler);
88 d->acceptedButtons = Qt::NoButton;
90 d->updateHasHoverInChild(parent,
true);
143bool QQuickHoverHandler::wantsPointerEvent(QPointerEvent *event)
146 if (event->isSinglePointEvent() &&
static_cast<QSinglePointEvent *>(event)->button())
148 auto &point = event->point(0);
149 const bool inside = parentContains(point);
150 if (QQuickPointerDeviceHandler::wantsPointerEvent(event) && wantsEventPoint(event, point) && inside) {
152 setPointId(point.id());
167 if (!inside || !(m_hoveredTablet && QQuickDeliveryAgentPrivate::isMouseEvent(event)))
173void QQuickHoverHandler::handleEventPoint(QPointerEvent *ev, QEventPoint &point)
176 if (point.state() == QEventPoint::Released &&
177 ev->pointingDevice()->pointerType() == QPointingDevice::PointerType::Finger)
179 else if (QQuickDeliveryAgentPrivate::isTabletEvent(ev))
180 m_hoveredTablet =
true;