QQuickControl: Accept all the mouse events by default

Controls are mouse-opaque items in the sense that, if
the control doesn't do anything with the mouse (or touch)
event, there's no need to propagate it further. This avoids
issues with controls like ToolBar, where clicking on its
background may send the mouse event to an item below it.

Change-Id: Ib3c95a55db2abfd6a13333f4b0187852a656ec03
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
This commit is contained in:
Gabriel de Dietrich 2015-06-24 18:26:42 +02:00
parent 8c5100ca39
commit d88d9d6342
5 changed files with 18 additions and 9 deletions

View File

@ -229,14 +229,12 @@ void QQuickButton::mousePressEvent(QMouseEvent *event)
QQuickControl::mousePressEvent(event);
setPressed(true);
emit pressed();
event->accept();
}
void QQuickButton::mouseMoveEvent(QMouseEvent *event)
{
QQuickControl::mouseMoveEvent(event);
setPressed(contains(event->pos()));
event->accept();
}
void QQuickButton::mouseReleaseEvent(QMouseEvent *event)
@ -251,7 +249,6 @@ void QQuickButton::mouseReleaseEvent(QMouseEvent *event)
} else {
emit canceled();
}
event->accept();
}
void QQuickButton::mouseUngrabEvent()

View File

@ -454,6 +454,21 @@ void QQuickControl::setContentItem(QQuickItem *item)
}
}
void QQuickControl::mousePressEvent(QMouseEvent *event)
{
event->accept();
}
void QQuickControl::mouseMoveEvent(QMouseEvent *event)
{
event->accept();
}
void QQuickControl::mouseReleaseEvent(QMouseEvent *event)
{
event->accept();
}
void QQuickControl::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
{
Q_D(QQuickControl);

View File

@ -126,6 +126,9 @@ Q_SIGNALS:
protected:
QQuickControl(QQuickControlPrivate &dd, QQuickItem *parent);
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE;
virtual void mirrorChange();

View File

@ -262,7 +262,6 @@ void QQuickScrollBar::mousePressEvent(QMouseEvent *event)
if (d->offset < 0 || d->offset > d->size)
d->offset = d->size / 2;
setPressed(true);
event->accept();
}
void QQuickScrollBar::mouseMoveEvent(QMouseEvent *event)
@ -270,7 +269,6 @@ void QQuickScrollBar::mouseMoveEvent(QMouseEvent *event)
Q_D(QQuickScrollBar);
QQuickControl::mouseMoveEvent(event);
setPosition(qBound(0.0, positionAt(event->pos()) - d->offset, 1.0 - d->size));
event->accept();
}
void QQuickScrollBar::mouseReleaseEvent(QMouseEvent *event)
@ -280,7 +278,6 @@ void QQuickScrollBar::mouseReleaseEvent(QMouseEvent *event)
setPosition(qBound(0.0, positionAt(event->pos()) - d->offset, 1.0 - d->size));
d->offset = 0.0;
setPressed(false);
event->accept();
}
qreal QQuickScrollBar::positionAt(const QPoint &point) const

View File

@ -499,7 +499,6 @@ void QQuickSlider::mousePressEvent(QMouseEvent *event)
QQuickControl::mousePressEvent(event);
d->pressPoint = event->pos();
setPressed(true);
event->accept();
}
void QQuickSlider::mouseMoveEvent(QMouseEvent *event)
@ -518,7 +517,6 @@ void QQuickSlider::mouseMoveEvent(QMouseEvent *event)
pos = d->snapPosition(pos);
d->setPosition(pos);
}
event->accept();
}
void QQuickSlider::mouseReleaseEvent(QMouseEvent *event)
@ -534,7 +532,6 @@ void QQuickSlider::mouseReleaseEvent(QMouseEvent *event)
setKeepMouseGrab(false);
}
setPressed(false);
event->accept();
}
void QQuickSlider::mouseUngrabEvent()