QQuickWindowPrivate::removeGrabber: take params for mouse and touch
QQuickItem::ungrabTouchPoints() wasn't intended to ungrab mouse and QQuickItem::ungrabMouse() wasn't intended to ungrab touch. This seems to make the tests more likely to pass. Change-Id: I2d39028dc8267b7c8b0e1bac721f1a12014f0b25 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
This commit is contained in:
parent
e00b9df034
commit
e7d6606e2d
|
@ -7208,16 +7208,7 @@ void QQuickItem::ungrabMouse()
|
|||
if (!d->window)
|
||||
return;
|
||||
QQuickWindowPrivate *windowPriv = QQuickWindowPrivate::get(d->window);
|
||||
if (windowPriv->mouseGrabberItem != this) {
|
||||
qWarning("QQuickItem::ungrabMouse(): Item is not the mouse grabber.");
|
||||
return;
|
||||
}
|
||||
|
||||
qCDebug(DBG_MOUSE_TARGET) << "ungrabMouse" << windowPriv->mouseGrabberItem << "-> null";
|
||||
windowPriv->mouseGrabberItem = 0;
|
||||
|
||||
QEvent ev(QEvent::UngrabMouse);
|
||||
d->window->sendEvent(this, &ev);
|
||||
windowPriv->removeGrabber(this, true, false);
|
||||
}
|
||||
|
||||
|
||||
|
@ -7304,7 +7295,7 @@ void QQuickItem::ungrabTouchPoints()
|
|||
if (!d->window)
|
||||
return;
|
||||
QQuickWindowPrivate *windowPriv = QQuickWindowPrivate::get(d->window);
|
||||
windowPriv->removeGrabber(this);
|
||||
windowPriv->removeGrabber(this, false, true);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
|
@ -771,17 +771,19 @@ void QQuickWindowPrivate::setMouseGrabber(QQuickItem *grabber)
|
|||
}
|
||||
}
|
||||
|
||||
void QQuickWindowPrivate::removeGrabber(QQuickItem *grabber)
|
||||
void QQuickWindowPrivate::removeGrabber(QQuickItem *grabber, bool mouse, bool touch)
|
||||
{
|
||||
Q_Q(QQuickWindow);
|
||||
QMutableHashIterator<int, QQuickItem *> itemTouchMapIt(itemForTouchPointId);
|
||||
while (itemTouchMapIt.hasNext()) {
|
||||
if (itemTouchMapIt.next().value() == grabber) {
|
||||
itemTouchMapIt.remove();
|
||||
grabber->touchUngrabEvent();
|
||||
if (Q_LIKELY(touch)) {
|
||||
QMutableHashIterator<int, QQuickItem *> itemTouchMapIt(itemForTouchPointId);
|
||||
while (itemTouchMapIt.hasNext()) {
|
||||
if (itemTouchMapIt.next().value() == grabber) {
|
||||
itemTouchMapIt.remove();
|
||||
grabber->touchUngrabEvent();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mouseGrabberItem == grabber) {
|
||||
if (Q_LIKELY(mouse) && mouseGrabberItem == grabber) {
|
||||
qCDebug(DBG_MOUSE_TARGET) << "removeGrabber" << mouseGrabberItem << "-> null";
|
||||
mouseGrabberItem = 0;
|
||||
QEvent ev(QEvent::UngrabMouse);
|
||||
|
|
|
@ -143,7 +143,7 @@ public:
|
|||
bool translateTouchToMouse(QQuickItem *item, QTouchEvent *event);
|
||||
void translateTouchEvent(QTouchEvent *touchEvent);
|
||||
void setMouseGrabber(QQuickItem *grabber);
|
||||
void removeGrabber(QQuickItem *grabber);
|
||||
void removeGrabber(QQuickItem *grabber, bool mouse = true, bool touch = true);
|
||||
static void transformTouchPoints(QList<QTouchEvent::TouchPoint> &touchPoints, const QTransform &transform);
|
||||
static QMouseEvent *cloneMouseEvent(QMouseEvent *event, QPointF *transformedLocalPos = 0);
|
||||
bool deliverInitialMousePressEvent(QQuickItem *, QMouseEvent *);
|
||||
|
|
Loading…
Reference in New Issue