aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/templates/qquickspinbox.cpp60
-rw-r--r--src/templates/qquickspinbox_p.h4
2 files changed, 48 insertions, 16 deletions
diff --git a/src/templates/qquickspinbox.cpp b/src/templates/qquickspinbox.cpp
index 1b06bfd4..13770e46 100644
--- a/src/templates/qquickspinbox.cpp
+++ b/src/templates/qquickspinbox.cpp
@@ -169,19 +169,19 @@ void QQuickSpinBoxPrivate::stopPressRepeat()
}
}
-bool QQuickSpinBoxPrivate::handleMousePressEvent(QQuickItem *child, QMouseEvent *)
+bool QQuickSpinBoxPrivate::handleMousePressEvent(QQuickItem *child, QMouseEvent *event)
{
Q_Q(QQuickSpinBox);
QQuickItem *ui = up->indicator();
QQuickItem *di = down->indicator();
- up->setPressed(child == ui);
- down->setPressed(child == di);
+ up->setPressed(ui && ui->contains(ui->mapFromItem(child, event->pos())));
+ down->setPressed(di && di->contains(di->mapFromItem(child, event->pos())));
bool pressed = up->isPressed() || down->isPressed();
q->setAccessibleProperty("pressed", pressed);
if (pressed)
startRepeatDelay();
- return child == ui || child == di;
+ return up->isPressed() || down->isPressed();
}
bool QQuickSpinBoxPrivate::handleMouseMoveEvent(QQuickItem *child, QMouseEvent *event)
@@ -189,13 +189,13 @@ bool QQuickSpinBoxPrivate::handleMouseMoveEvent(QQuickItem *child, QMouseEvent *
Q_Q(QQuickSpinBox);
QQuickItem *ui = up->indicator();
QQuickItem *di = down->indicator();
- up->setPressed(child == ui && ui->contains(event->pos()));
- down->setPressed(child == di && di->contains(event->pos()));
+ up->setPressed(ui && ui->contains(ui->mapFromItem(child, event->pos())));
+ down->setPressed(di && di->contains(di->mapFromItem(child, event->pos())));
bool pressed = up->isPressed() || down->isPressed();
q->setAccessibleProperty("pressed", pressed);
stopPressRepeat();
- return child == ui || child == di;
+ return up->isPressed() || down->isPressed();
}
bool QQuickSpinBoxPrivate::handleMouseReleaseEvent(QQuickItem *child, QMouseEvent *event)
@@ -203,32 +203,31 @@ bool QQuickSpinBoxPrivate::handleMouseReleaseEvent(QQuickItem *child, QMouseEven
Q_Q(QQuickSpinBox);
QQuickItem *ui = up->indicator();
QQuickItem *di = down->indicator();
- if (child == ui) {
+ bool wasPressed = up->isPressed() || down->isPressed();
+ if (up->isPressed()) {
up->setPressed(false);
- if (repeatTimer <= 0 && ui->contains(event->pos()))
+ if (repeatTimer <= 0 && ui && ui->contains(ui->mapFromItem(child, event->pos())))
q->increase();
- } else if (child == di) {
+ } else if (down->isPressed()) {
down->setPressed(false);
- if (repeatTimer <= 0 && di->contains(event->pos()))
+ if (repeatTimer <= 0 && di && di->contains(di->mapFromItem(child, event->pos())))
q->decrease();
}
q->setAccessibleProperty("pressed", false);
stopPressRepeat();
- return child == ui || child == di;
+ return wasPressed;
}
-bool QQuickSpinBoxPrivate::handleMouseUngrabEvent(QQuickItem *child)
+bool QQuickSpinBoxPrivate::handleMouseUngrabEvent(QQuickItem *)
{
Q_Q(QQuickSpinBox);
- QQuickItem *ui = up->indicator();
- QQuickItem *di = down->indicator();
up->setPressed(false);
down->setPressed(false);
q->setAccessibleProperty("pressed", false);
stopPressRepeat();
- return child == ui || child == di;
+ return false;
}
QQuickSpinBox::QQuickSpinBox(QQuickItem *parent) :
@@ -240,6 +239,7 @@ QQuickSpinBox::QQuickSpinBox(QQuickItem *parent) :
setFlag(ItemIsFocusScope);
setFiltersChildMouseEvents(true);
+ setAcceptedMouseButtons(Qt::LeftButton);
}
/*!
@@ -543,6 +543,34 @@ bool QQuickSpinBox::childMouseEventFilter(QQuickItem *child, QEvent *event)
}
}
+void QQuickSpinBox::mousePressEvent(QMouseEvent *event)
+{
+ Q_D(QQuickSpinBox);
+ QQuickControl::mousePressEvent(event);
+ d->handleMousePressEvent(this, event);
+}
+
+void QQuickSpinBox::mouseMoveEvent(QMouseEvent *event)
+{
+ Q_D(QQuickSpinBox);
+ QQuickControl::mouseMoveEvent(event);
+ d->handleMouseMoveEvent(this, event);
+}
+
+void QQuickSpinBox::mouseReleaseEvent(QMouseEvent *event)
+{
+ Q_D(QQuickSpinBox);
+ QQuickControl::mouseReleaseEvent(event);
+ d->handleMouseReleaseEvent(this, event);
+}
+
+void QQuickSpinBox::mouseUngrabEvent()
+{
+ Q_D(QQuickSpinBox);
+ QQuickControl::mouseUngrabEvent();
+ d->handleMouseUngrabEvent(this);
+}
+
void QQuickSpinBox::timerEvent(QTimerEvent *event)
{
Q_D(QQuickSpinBox);
diff --git a/src/templates/qquickspinbox_p.h b/src/templates/qquickspinbox_p.h
index 3db12a10..edfb3ea0 100644
--- a/src/templates/qquickspinbox_p.h
+++ b/src/templates/qquickspinbox_p.h
@@ -115,6 +115,10 @@ protected:
bool childMouseEventFilter(QQuickItem *child, QEvent *event) Q_DECL_OVERRIDE;
void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseUngrabEvent() Q_DECL_OVERRIDE;
void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
void componentComplete() Q_DECL_OVERRIDE;