aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-04-21 08:00:01 +0300
committerJ-P Nurmi <jpnurmi@qt.io>2017-04-21 08:00:01 +0300
commit284057d12fea9339744ddc646aa53cfe6c3c95a1 (patch)
tree61bb12637c56a282830d683e346057b00d332b7a /src/quicktemplates2
parent91b2721fdc2aba28d3c45111779fed70f7c4f87d (diff)
parentc8e9b5f25fb12c3b7983658d738165181b4d6672 (diff)
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts: src/imports/controls/RoundButton.qml src/imports/controls/universal/RadioDelegate.qml Change-Id: I4cb14c19bd5f6e19b70b03fb394c76712e6dda08
Diffstat (limited to 'src/quicktemplates2')
-rw-r--r--src/quicktemplates2/qquickabstractbutton.cpp110
-rw-r--r--src/quicktemplates2/qquickabstractbutton_p.h5
-rw-r--r--src/quicktemplates2/qquickabstractbutton_p_p.h11
-rw-r--r--src/quicktemplates2/qquickcombobox.cpp64
-rw-r--r--src/quicktemplates2/qquickcombobox_p.h4
-rw-r--r--src/quicktemplates2/qquickcontrol.cpp117
-rw-r--r--src/quicktemplates2/qquickcontrol_p.h3
-rw-r--r--src/quicktemplates2/qquickcontrol_p_p.h7
-rw-r--r--src/quicktemplates2/qquickdial.cpp92
-rw-r--r--src/quicktemplates2/qquickdial_p.h3
-rw-r--r--src/quicktemplates2/qquickdialogbuttonbox.cpp7
-rw-r--r--src/quicktemplates2/qquickpopup.cpp10
-rw-r--r--src/quicktemplates2/qquickpopup_p.h2
-rw-r--r--src/quicktemplates2/qquickpopupitem.cpp12
-rw-r--r--src/quicktemplates2/qquickpopupitem_p_p.h2
-rw-r--r--src/quicktemplates2/qquickrangeslider.cpp95
-rw-r--r--src/quicktemplates2/qquickrangeslider_p.h3
-rw-r--r--src/quicktemplates2/qquickscrollbar.cpp78
-rw-r--r--src/quicktemplates2/qquickscrollbar_p.h5
-rw-r--r--src/quicktemplates2/qquickscrollbar_p_p.h9
-rw-r--r--src/quicktemplates2/qquickslider.cpp92
-rw-r--r--src/quicktemplates2/qquickslider_p.h3
-rw-r--r--src/quicktemplates2/qquickspinbox.cpp106
-rw-r--r--src/quicktemplates2/qquickspinbox_p.h6
24 files changed, 317 insertions, 529 deletions
diff --git a/src/quicktemplates2/qquickabstractbutton.cpp b/src/quicktemplates2/qquickabstractbutton.cpp
index 7551ead0..a308834c 100644
--- a/src/quicktemplates2/qquickabstractbutton.cpp
+++ b/src/quicktemplates2/qquickabstractbutton.cpp
@@ -155,11 +155,10 @@ QQuickAbstractButtonPrivate::QQuickAbstractButtonPrivate()
autoExclusive(false),
autoRepeat(false),
wasHeld(false),
- touchId(-1),
holdTimer(0),
delayTimer(0),
repeatTimer(0),
- repeatButton(Qt::NoButton),
+ pressButtons(Qt::NoButton),
indicator(nullptr),
group(nullptr),
icon(nullptr),
@@ -168,27 +167,27 @@ QQuickAbstractButtonPrivate::QQuickAbstractButtonPrivate()
{
}
-void QQuickAbstractButtonPrivate::handlePress(const QPointF &point, Qt::MouseButton button, Qt::MouseButtons buttons)
+void QQuickAbstractButtonPrivate::handlePress(const QPointF &point)
{
Q_Q(QQuickAbstractButton);
+ QQuickControlPrivate::handlePress(point);
pressPoint = point;
q->setPressed(true);
emit q->pressed();
- if (autoRepeat) {
+ if (autoRepeat)
startRepeatDelay();
- repeatButton = button;
- } else if (Qt::LeftButton == (buttons & Qt::LeftButton)) {
+ else if (touchId != -1 || Qt::LeftButton == (pressButtons & Qt::LeftButton))
startPressAndHold();
- } else {
+ else
stopPressAndHold();
- }
}
void QQuickAbstractButtonPrivate::handleMove(const QPointF &point)
{
Q_Q(QQuickAbstractButton);
+ QQuickControlPrivate::handleMove(point);
q->setPressed(keepPressed || q->contains(point));
if (!pressed && autoRepeat)
@@ -200,9 +199,10 @@ void QQuickAbstractButtonPrivate::handleMove(const QPointF &point)
void QQuickAbstractButtonPrivate::handleRelease(const QPointF &point)
{
Q_Q(QQuickAbstractButton);
+ QQuickControlPrivate::handleRelease(point);
bool wasPressed = pressed;
q->setPressed(false);
- touchId = -1;
+ pressButtons = Qt::NoButton;
if (!wasHeld && (keepPressed || q->contains(point)))
q->nextCheckState();
@@ -221,14 +221,15 @@ void QQuickAbstractButtonPrivate::handleRelease(const QPointF &point)
stopPressAndHold();
}
-void QQuickAbstractButtonPrivate::handleCancel()
+void QQuickAbstractButtonPrivate::handleUngrab()
{
Q_Q(QQuickAbstractButton);
+ QQuickControlPrivate::handleUngrab();
+ pressButtons = Qt::NoButton;
if (!pressed)
return;
q->setPressed(false);
- touchId = -1;
stopPressRepeat();
stopPressAndHold();
emit q->canceled();
@@ -779,7 +780,8 @@ void QQuickAbstractButton::focusOutEvent(QFocusEvent *event)
{
Q_D(QQuickAbstractButton);
QQuickControl::focusOutEvent(event);
- d->handleCancel();
+ if (d->touchId == -1) // don't ungrab on multi-touch if another control gets focused
+ d->handleUngrab();
}
void QQuickAbstractButton::keyPressEvent(QKeyEvent *event)
@@ -790,10 +792,8 @@ void QQuickAbstractButton::keyPressEvent(QKeyEvent *event)
d->pressPoint = QPoint(qRound(width() / 2), qRound(height() / 2));
setPressed(true);
- if (d->autoRepeat) {
+ if (d->autoRepeat)
d->startRepeatDelay();
- d->repeatButton = Qt::NoButton;
- }
emit pressed();
event->accept();
@@ -820,22 +820,8 @@ void QQuickAbstractButton::keyReleaseEvent(QKeyEvent *event)
void QQuickAbstractButton::mousePressEvent(QMouseEvent *event)
{
Q_D(QQuickAbstractButton);
+ d->pressButtons = event->buttons();
QQuickControl::mousePressEvent(event);
- d->handlePress(event->localPos(), event->button(), event->buttons());
-}
-
-void QQuickAbstractButton::mouseMoveEvent(QMouseEvent *event)
-{
- Q_D(QQuickAbstractButton);
- QQuickControl::mouseMoveEvent(event);
- d->handleMove(event->localPos());
-}
-
-void QQuickAbstractButton::mouseReleaseEvent(QMouseEvent *event)
-{
- Q_D(QQuickAbstractButton);
- QQuickControl::mouseReleaseEvent(event);
- d->handleRelease(event->localPos());
}
void QQuickAbstractButton::mouseDoubleClickEvent(QMouseEvent *event)
@@ -844,13 +830,6 @@ void QQuickAbstractButton::mouseDoubleClickEvent(QMouseEvent *event)
emit doubleClicked();
}
-void QQuickAbstractButton::mouseUngrabEvent()
-{
- Q_D(QQuickAbstractButton);
- QQuickControl::mouseUngrabEvent();
- d->handleCancel();
-}
-
void QQuickAbstractButton::timerEvent(QTimerEvent *event)
{
Q_D(QQuickAbstractButton);
@@ -868,63 +847,6 @@ void QQuickAbstractButton::timerEvent(QTimerEvent *event)
}
}
-void QQuickAbstractButton::touchEvent(QTouchEvent *event)
-{
- Q_D(QQuickAbstractButton);
- switch (event->type()) {
- case QEvent::TouchBegin:
- if (d->touchId == -1) {
- const QTouchEvent::TouchPoint point = event->touchPoints().first();
- d->touchId = point.id();
- d->handlePress(point.pos());
- }
- break;
-
- case QEvent::TouchUpdate:
- for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() != d->touchId)
- continue;
-
- switch (point.state()) {
- case Qt::TouchPointPressed:
- d->handlePress(point.pos());
- break;
- case Qt::TouchPointMoved:
- d->handleMove(point.pos());
- break;
- case Qt::TouchPointReleased:
- d->handleRelease(point.pos());
- break;
- default:
- break;
- }
- }
- break;
-
- case QEvent::TouchEnd:
- for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() == d->touchId)
- d->handleRelease(point.pos());
- }
- break;
-
- case QEvent::TouchCancel:
- d->handleCancel();
- break;
-
- default:
- QQuickControl::touchEvent(event);
- break;
- }
-}
-
-void QQuickAbstractButton::touchUngrabEvent()
-{
- Q_D(QQuickAbstractButton);
- QQuickControl::touchUngrabEvent();
- d->handleCancel();
-}
-
void QQuickAbstractButton::buttonChange(ButtonChange change)
{
Q_D(QQuickAbstractButton);
diff --git a/src/quicktemplates2/qquickabstractbutton_p.h b/src/quicktemplates2/qquickabstractbutton_p.h
index daa34735..c6a50665 100644
--- a/src/quicktemplates2/qquickabstractbutton_p.h
+++ b/src/quicktemplates2/qquickabstractbutton_p.h
@@ -143,13 +143,8 @@ protected:
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override;
- void mouseUngrabEvent() override;
void timerEvent(QTimerEvent *event) override;
- void touchEvent(QTouchEvent *event) override;
- void touchUngrabEvent() override;
enum ButtonChange {
ButtonAutoRepeatChange,
diff --git a/src/quicktemplates2/qquickabstractbutton_p_p.h b/src/quicktemplates2/qquickabstractbutton_p_p.h
index 41eb72c1..61a546d1 100644
--- a/src/quicktemplates2/qquickabstractbutton_p_p.h
+++ b/src/quicktemplates2/qquickabstractbutton_p_p.h
@@ -69,10 +69,10 @@ public:
return button->d_func();
}
- virtual void handlePress(const QPointF &point, Qt::MouseButton button = Qt::LeftButton, Qt::MouseButtons buttons = Qt::LeftButton);
- virtual void handleMove(const QPointF &point);
- virtual void handleRelease(const QPointF &point);
- virtual void handleCancel();
+ void handlePress(const QPointF &point) override;
+ void handleMove(const QPointF &point) override;
+ void handleRelease(const QPointF &point) override;
+ void handleUngrab() override;
bool isPressAndHoldConnected();
void startPressAndHold();
@@ -99,12 +99,11 @@ public:
bool autoExclusive;
bool autoRepeat;
bool wasHeld;
- int touchId;
int holdTimer;
int delayTimer;
int repeatTimer;
QPointF pressPoint;
- Qt::MouseButton repeatButton;
+ Qt::MouseButtons pressButtons;
QQuickItem *indicator;
QQuickButtonGroup *group;
QQuickIcon *icon;
diff --git a/src/quicktemplates2/qquickcombobox.cpp b/src/quicktemplates2/qquickcombobox.cpp
index 85c577b4..c2fc3aff 100644
--- a/src/quicktemplates2/qquickcombobox.cpp
+++ b/src/quicktemplates2/qquickcombobox.cpp
@@ -243,6 +243,11 @@ public:
void createDelegateModel();
+ void handlePress(const QPointF &point) override;
+ void handleMove(const QPointF &point) override;
+ void handleRelease(const QPointF &point) override;
+ void handleUngrab() override;
+
bool flat;
bool down;
bool hasDown;
@@ -622,6 +627,37 @@ void QQuickComboBoxPrivate::createDelegateModel()
delete oldModel;
}
+void QQuickComboBoxPrivate::handlePress(const QPointF &point)
+{
+ Q_Q(QQuickComboBox);
+ QQuickControlPrivate::handlePress(point);
+ q->setPressed(true);
+}
+
+void QQuickComboBoxPrivate::handleMove(const QPointF &point)
+{
+ Q_Q(QQuickComboBox);
+ QQuickControlPrivate::handleMove(point);
+ q->setPressed(q->contains(point));
+}
+
+void QQuickComboBoxPrivate::handleRelease(const QPointF &point)
+{
+ Q_Q(QQuickComboBox);
+ QQuickControlPrivate::handleRelease(point);
+ if (pressed) {
+ q->setPressed(false);
+ togglePopup(false);
+ }
+}
+
+void QQuickComboBoxPrivate::handleUngrab()
+{
+ Q_Q(QQuickComboBox);
+ QQuickControlPrivate::handleUngrab();
+ q->setPressed(false);
+}
+
QQuickComboBox::QQuickComboBox(QQuickItem *parent)
: QQuickControl(*(new QQuickComboBoxPrivate), parent)
{
@@ -1471,34 +1507,6 @@ void QQuickComboBox::keyReleaseEvent(QKeyEvent *event)
}
}
-void QQuickComboBox::mousePressEvent(QMouseEvent *event)
-{
- QQuickControl::mousePressEvent(event);
- setPressed(true);
-}
-
-void QQuickComboBox::mouseMoveEvent(QMouseEvent* event)
-{
- QQuickControl::mouseMoveEvent(event);
- setPressed(contains(event->pos()));
-}
-
-void QQuickComboBox::mouseReleaseEvent(QMouseEvent *event)
-{
- Q_D(QQuickComboBox);
- QQuickControl::mouseReleaseEvent(event);
- if (d->pressed) {
- setPressed(false);
- d->togglePopup(false);
- }
-}
-
-void QQuickComboBox::mouseUngrabEvent()
-{
- QQuickControl::mouseUngrabEvent();
- setPressed(false);
-}
-
#if QT_CONFIG(wheelevent)
void QQuickComboBox::wheelEvent(QWheelEvent *event)
{
diff --git a/src/quicktemplates2/qquickcombobox_p.h b/src/quicktemplates2/qquickcombobox_p.h
index 76dce2d5..851392aa 100644
--- a/src/quicktemplates2/qquickcombobox_p.h
+++ b/src/quicktemplates2/qquickcombobox_p.h
@@ -183,10 +183,6 @@ protected:
#endif
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
- void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void mouseUngrabEvent() override;
#if QT_CONFIG(wheelevent)
void wheelEvent(QWheelEvent *event) override;
#endif
diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp
index 95686360..d57c3260 100644
--- a/src/quicktemplates2/qquickcontrol.cpp
+++ b/src/quicktemplates2/qquickcontrol.cpp
@@ -120,6 +120,7 @@ QQuickControlPrivate::QQuickControlPrivate()
hovered(false),
explicitHoverEnabled(false),
#endif
+ touchId(-1),
padding(0),
topPadding(0),
leftPadding(0),
@@ -144,6 +145,49 @@ QQuickControlPrivate::~QQuickControlPrivate()
#endif
}
+bool QQuickControlPrivate::acceptTouch(const QTouchEvent::TouchPoint &point)
+{
+ if (point.id() == touchId)
+ return true;
+
+ if (touchId == -1 && point.state() == Qt::TouchPointPressed) {
+ touchId = point.id();
+ return true;
+ }
+
+ return false;
+}
+
+void QQuickControlPrivate::handlePress(const QPointF &)
+{
+ Q_Q(QQuickControl);
+ if ((focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && !QGuiApplication::styleHints()->setFocusOnTouchRelease())
+ q->forceActiveFocus(Qt::MouseFocusReason);
+}
+
+void QQuickControlPrivate::handleMove(const QPointF &point)
+{
+#if QT_CONFIG(quicktemplates2_hover)
+ Q_Q(QQuickControl);
+ q->setHovered(hoverEnabled && q->contains(point));
+#else
+ Q_UNUSED(point);
+#endif
+}
+
+void QQuickControlPrivate::handleRelease(const QPointF &)
+{
+ Q_Q(QQuickControl);
+ if ((focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && QGuiApplication::styleHints()->setFocusOnTouchRelease())
+ q->forceActiveFocus(Qt::MouseFocusReason);
+ touchId = -1;
+}
+
+void QQuickControlPrivate::handleUngrab()
+{
+ touchId = -1;
+}
+
void QQuickControlPrivate::mirrorChange()
{
Q_Q(QQuickControl);
@@ -1220,30 +1264,85 @@ void QQuickControl::hoverLeaveEvent(QHoverEvent *event)
void QQuickControl::mousePressEvent(QMouseEvent *event)
{
Q_D(QQuickControl);
- if ((d->focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && !QGuiApplication::styleHints()->setFocusOnTouchRelease())
- forceActiveFocus(Qt::MouseFocusReason);
-
+ d->handlePress(event->localPos());
event->accept();
}
void QQuickControl::mouseMoveEvent(QMouseEvent *event)
{
-#if QT_CONFIG(quicktemplates2_hover)
Q_D(QQuickControl);
- setHovered(d->hoverEnabled && contains(event->pos()));
-#endif
+ d->handleMove(event->localPos());
event->accept();
}
void QQuickControl::mouseReleaseEvent(QMouseEvent *event)
{
Q_D(QQuickControl);
- if ((d->focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && QGuiApplication::styleHints()->setFocusOnTouchRelease())
- forceActiveFocus(Qt::MouseFocusReason);
-
+ d->handleRelease(event->localPos());
event->accept();
}
+void QQuickControl::mouseUngrabEvent()
+{
+ Q_D(QQuickControl);
+ d->handleUngrab();
+}
+
+void QQuickControl::touchEvent(QTouchEvent *event)
+{
+ Q_D(QQuickControl);
+ switch (event->type()) {
+ case QEvent::TouchBegin:
+ for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
+ if (d->acceptTouch(point))
+ d->handlePress(point.pos());
+ }
+ break;
+
+ case QEvent::TouchUpdate:
+ for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
+ if (!d->acceptTouch(point))
+ continue;
+
+ switch (point.state()) {
+ case Qt::TouchPointPressed:
+ d->handlePress(point.pos());
+ break;
+ case Qt::TouchPointMoved:
+ d->handleMove(point.pos());
+ break;
+ case Qt::TouchPointReleased:
+ d->handleRelease(point.pos());
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+
+ case QEvent::TouchEnd:
+ for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
+ if (d->acceptTouch(point))
+ d->handleRelease(point.pos());
+ }
+ break;
+
+ case QEvent::TouchCancel:
+ d->handleUngrab();
+ break;
+
+ default:
+ QQuickItem::touchEvent(event);
+ break;
+ }
+}
+
+void QQuickControl::touchUngrabEvent()
+{
+ Q_D(QQuickControl);
+ d->handleUngrab();
+}
+
#if QT_CONFIG(wheelevent)
void QQuickControl::wheelEvent(QWheelEvent *event)
{
diff --git a/src/quicktemplates2/qquickcontrol_p.h b/src/quicktemplates2/qquickcontrol_p.h
index ab92d6ab..feb6646e 100644
--- a/src/quicktemplates2/qquickcontrol_p.h
+++ b/src/quicktemplates2/qquickcontrol_p.h
@@ -184,6 +184,9 @@ protected:
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
+ void mouseUngrabEvent() override;
+ void touchEvent(QTouchEvent *event) override;
+ void touchUngrabEvent() override;
#if QT_CONFIG(wheelevent)
void wheelEvent(QWheelEvent *event) override;
#endif
diff --git a/src/quicktemplates2/qquickcontrol_p_p.h b/src/quicktemplates2/qquickcontrol_p_p.h
index 113110de..a6825640 100644
--- a/src/quicktemplates2/qquickcontrol_p_p.h
+++ b/src/quicktemplates2/qquickcontrol_p_p.h
@@ -78,6 +78,12 @@ public:
return control->d_func();
}
+ virtual bool acceptTouch(const QTouchEvent::TouchPoint &point);
+ virtual void handlePress(const QPointF &point);
+ virtual void handleMove(const QPointF &point);
+ virtual void handleRelease(const QPointF &point);
+ virtual void handleUngrab();
+
void mirrorChange() override;
void setTopPadding(qreal value, bool reset = false);
@@ -136,6 +142,7 @@ public:
bool hovered;
bool explicitHoverEnabled;
#endif
+ int touchId;
qreal padding;
qreal topPadding;
qreal leftPadding;
diff --git a/src/quicktemplates2/qquickdial.cpp b/src/quicktemplates2/qquickdial.cpp
index 5b98992b..98ca8186 100644
--- a/src/quicktemplates2/qquickdial.cpp
+++ b/src/quicktemplates2/qquickdial.cpp
@@ -96,8 +96,7 @@ class QQuickDialPrivate : public QQuickControlPrivate
public:
QQuickDialPrivate()
- : touchId(-1),
- from(0),
+ : from(0),
to(1),
value(0),
position(0),
@@ -118,12 +117,11 @@ public:
void updatePosition();
bool isLargeChange(const QPointF &eventPos, qreal proposedPosition) const;
- void handlePress(const QPointF &point);
- void handleMove(const QPointF &point);
- void handleRelease(const QPointF &point);
- void handleUngrab();
+ void handlePress(const QPointF &point) override;
+ void handleMove(const QPointF &point) override;
+ void handleRelease(const QPointF &point) override;
+ void handleUngrab() override;
- int touchId;
qreal from;
qreal to;
qreal value;
@@ -200,6 +198,7 @@ bool QQuickDialPrivate::isLargeChange(const QPointF &eventPos, qreal proposedPos
void QQuickDialPrivate::handlePress(const QPointF &point)
{
Q_Q(QQuickDial);
+ QQuickControlPrivate::handlePress(point);
pressPoint = point;
q->setPressed(true);
}
@@ -207,6 +206,7 @@ void QQuickDialPrivate::handlePress(const QPointF &point)
void QQuickDialPrivate::handleMove(const QPointF &point)
{
Q_Q(QQuickDial);
+ QQuickControlPrivate::handleMove(point);
const qreal oldPos = position;
qreal pos = positionAt(point);
if (snapMode == QQuickDial::SnapAlways)
@@ -225,6 +225,7 @@ void QQuickDialPrivate::handleMove(const QPointF &point)
void QQuickDialPrivate::handleRelease(const QPointF &point)
{
Q_Q(QQuickDial);
+ QQuickControlPrivate::handleRelease(point);
if (q->keepMouseGrab() || q->keepTouchGrab()) {
const qreal oldPos = position;
qreal pos = positionAt(point);
@@ -242,14 +243,13 @@ void QQuickDialPrivate::handleRelease(const QPointF &point)
q->setPressed(false);
pressPoint = QPointF();
- touchId = -1;
}
void QQuickDialPrivate::handleUngrab()
{
Q_Q(QQuickDial);
+ QQuickControlPrivate::handleUngrab();
pressPoint = QPointF();
- touchId = -1;
q->setPressed(false);
}
@@ -648,14 +648,12 @@ void QQuickDial::mousePressEvent(QMouseEvent *event)
{
Q_D(QQuickDial);
QQuickControl::mousePressEvent(event);
- d->handlePress(event->localPos());
d->handleMove(event->localPos());
}
void QQuickDial::mouseMoveEvent(QMouseEvent *event)
{
Q_D(QQuickDial);
- QQuickControl::mouseMoveEvent(event);
if (!keepMouseGrab()) {
bool overXDragThreshold = QQuickWindowPrivate::dragOverThreshold(event->localPos().x() - d->pressPoint.x(), Qt::XAxis, event);
setKeepMouseGrab(overXDragThreshold);
@@ -665,82 +663,46 @@ void QQuickDial::mouseMoveEvent(QMouseEvent *event)
setKeepMouseGrab(overYDragThreshold);
}
}
- d->handleMove(event->localPos());
-}
-
-void QQuickDial::mouseReleaseEvent(QMouseEvent *event)
-{
- Q_D(QQuickDial);
- QQuickControl::mouseReleaseEvent(event);
- d->handleRelease(event->localPos());
-}
-
-void QQuickDial::mouseUngrabEvent()
-{
- Q_D(QQuickDial);
- QQuickControl::mouseUngrabEvent();
- d->handleUngrab();
+ QQuickControl::mouseMoveEvent(event);
}
void QQuickDial::touchEvent(QTouchEvent *event)
{
Q_D(QQuickDial);
switch (event->type()) {
- case QEvent::TouchBegin:
- if (d->touchId == -1) {
- const QTouchEvent::TouchPoint point = event->touchPoints().first();
- d->touchId = point.id();
- d->handlePress(point.pos());
- } else {
- event->ignore();
- }
- break;
-
case QEvent::TouchUpdate:
for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() != d->touchId)
+ if (!d->acceptTouch(point))
continue;
- if (!keepTouchGrab()) {
- bool overXDragThreshold = QQuickWindowPrivate::dragOverThreshold(point.pos().x() - d->pressPoint.x(), Qt::XAxis, &point);
- setKeepTouchGrab(overXDragThreshold);
+ switch (point.state()) {
+ case Qt::TouchPointMoved:
+ if (!keepTouchGrab()) {
+ bool overXDragThreshold = QQuickWindowPrivate::dragOverThreshold(point.pos().x() - d->pressPoint.x(), Qt::XAxis, &point);
+ setKeepTouchGrab(overXDragThreshold);
- if (!overXDragThreshold) {
- bool overYDragThreshold = QQuickWindowPrivate::dragOverThreshold(point.pos().y() - d->pressPoint.y(), Qt::YAxis, &point);
- setKeepTouchGrab(overYDragThreshold);
+ if (!overXDragThreshold) {
+ bool overYDragThreshold = QQuickWindowPrivate::dragOverThreshold(point.pos().y() - d->pressPoint.y(), Qt::YAxis, &point);
+ setKeepTouchGrab(overYDragThreshold);
+ }
}
- }
- if (keepTouchGrab())
- d->handleMove(point.pos());
- }
- break;
+ if (keepTouchGrab())
+ d->handleMove(point.pos());
+ break;
- case QEvent::TouchEnd:
- for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() != d->touchId)
- continue;
-
- d->handleRelease(point.pos());
+ default:
+ QQuickControl::touchEvent(event);
+ break;
+ }
}
break;
- case QEvent::TouchCancel:
- d->handleUngrab();
- break;
-
default:
QQuickControl::touchEvent(event);
break;
}
}
-void QQuickDial::touchUngrabEvent()
-{
- Q_D(QQuickDial);
- QQuickControl::touchUngrabEvent();
- d->handleUngrab();
-}
-
#if QT_CONFIG(wheelevent)
void QQuickDial::wheelEvent(QWheelEvent *event)
{
diff --git a/src/quicktemplates2/qquickdial_p.h b/src/quicktemplates2/qquickdial_p.h
index e402922d..1a6d70fd 100644
--- a/src/quicktemplates2/qquickdial_p.h
+++ b/src/quicktemplates2/qquickdial_p.h
@@ -136,10 +136,7 @@ protected:
void keyReleaseEvent(QKeyEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void mouseUngrabEvent() override;
void touchEvent(QTouchEvent *event) override;
- void touchUngrabEvent() override;
#if QT_CONFIG(wheelevent)
void wheelEvent(QWheelEvent *event) override;
#endif
diff --git a/src/quicktemplates2/qquickdialogbuttonbox.cpp b/src/quicktemplates2/qquickdialogbuttonbox.cpp
index 386577da..3c422268 100644
--- a/src/quicktemplates2/qquickdialogbuttonbox.cpp
+++ b/src/quicktemplates2/qquickdialogbuttonbox.cpp
@@ -258,7 +258,12 @@ void QQuickDialogButtonBoxPrivate::updateLayout()
return firstRole != QPlatformDialogHelper::InvalidRole;
}
- const int *m_layout = QPlatformDialogHelper::buttonLayout();
+ static const int *themeButtonLayout()
+ {
+ const int hint = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::DialogButtonBoxLayout).toInt();
+ return QPlatformDialogHelper::buttonLayout(Qt::Horizontal, static_cast<QPlatformDialogHelper::ButtonLayout>(hint));
+ }
+ const int *m_layout = themeButtonLayout();
};
std::sort(buttons.begin(), buttons.end(), ButtonLayout());
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp
index 8c37ea84..e0c5c653 100644
--- a/src/quicktemplates2/qquickpopup.cpp
+++ b/src/quicktemplates2/qquickpopup.cpp
@@ -1853,6 +1853,16 @@ bool QQuickPopup::overlayEvent(QQuickItem *item, QEvent *event)
}
}
+void QQuickPopup::touchEvent(QTouchEvent *event)
+{
+ // TODO: QQuickPopup and QQuickDrawer still rely on synthesized mouse events
+ event->ignore();
+}
+
+void QQuickPopup::touchUngrabEvent()
+{
+}
+
#if QT_CONFIG(wheelevent)
void QQuickPopup::wheelEvent(QWheelEvent *event)
{
diff --git a/src/quicktemplates2/qquickpopup_p.h b/src/quicktemplates2/qquickpopup_p.h
index d1b0dfac..8d311e4a 100644
--- a/src/quicktemplates2/qquickpopup_p.h
+++ b/src/quicktemplates2/qquickpopup_p.h
@@ -351,6 +351,8 @@ protected:
virtual void mouseDoubleClickEvent(QMouseEvent *event);
virtual void mouseUngrabEvent();
virtual bool overlayEvent(QQuickItem *item, QEvent *event);
+ virtual void touchEvent(QTouchEvent *event);
+ virtual void touchUngrabEvent();
#if QT_CONFIG(wheelevent)
virtual void wheelEvent(QWheelEvent *event);
#endif
diff --git a/src/quicktemplates2/qquickpopupitem.cpp b/src/quicktemplates2/qquickpopupitem.cpp
index 94bd7dec..abcb86aa 100644
--- a/src/quicktemplates2/qquickpopupitem.cpp
+++ b/src/quicktemplates2/qquickpopupitem.cpp
@@ -229,6 +229,18 @@ void QQuickPopupItem::mouseUngrabEvent()
d->popup->mouseUngrabEvent();
}
+void QQuickPopupItem::touchEvent(QTouchEvent *event)
+{
+ Q_D(QQuickPopupItem);
+ d->popup->touchEvent(event);
+}
+
+void QQuickPopupItem::touchUngrabEvent()
+{
+ Q_D(QQuickPopupItem);
+ d->popup->touchUngrabEvent();
+}
+
#if QT_CONFIG(wheelevent)
void QQuickPopupItem::wheelEvent(QWheelEvent *event)
{
diff --git a/src/quicktemplates2/qquickpopupitem_p_p.h b/src/quicktemplates2/qquickpopupitem_p_p.h
index 9ceb8389..9b3c76df 100644
--- a/src/quicktemplates2/qquickpopupitem_p_p.h
+++ b/src/quicktemplates2/qquickpopupitem_p_p.h
@@ -79,6 +79,8 @@ protected:
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override;
void mouseUngrabEvent() override;
+ void touchEvent(QTouchEvent *event) override;
+ void touchUngrabEvent() override;
#if QT_CONFIG(wheelevent)
void wheelEvent(QWheelEvent *event) override;
#endif
diff --git a/src/quicktemplates2/qquickrangeslider.cpp b/src/quicktemplates2/qquickrangeslider.cpp
index 9996d041..1468d358 100644
--- a/src/quicktemplates2/qquickrangeslider.cpp
+++ b/src/quicktemplates2/qquickrangeslider.cpp
@@ -327,10 +327,12 @@ public:
}
QQuickRangeSliderNode *pressedNode(int touchId = -1) const;
- void handlePress(const QPointF &point, int touchId = -1);
- void handleMove(const QPointF &point, int touchId = -1);
- void handleRelease(const QPointF &point, int touchId = -1);
- void handleUngrab();
+
+ bool acceptTouch(const QTouchEvent::TouchPoint &point) override;
+ void handlePress(const QPointF &point) override;
+ void handleMove(const QPointF &point) override;
+ void handleRelease(const QPointF &point) override;
+ void handleUngrab() override;
void updateHover(const QPointF &pos);
@@ -395,9 +397,23 @@ QQuickRangeSliderNode *QQuickRangeSliderPrivate::pressedNode(int touchId) const
return nullptr;
}
-void QQuickRangeSliderPrivate::handlePress(const QPointF &point, int touchId)
+bool QQuickRangeSliderPrivate::acceptTouch(const QTouchEvent::TouchPoint &point)
+{
+ int firstId = QQuickRangeSliderNodePrivate::get(first)->touchId;
+ int secondId = QQuickRangeSliderNodePrivate::get(second)->touchId;
+
+ if (((firstId == -1 || secondId == -1) && point.state() == Qt::TouchPointPressed) || point.id() == firstId || point.id() == secondId) {
+ touchId = point.id();
+ return true;
+ }
+
+ return false;
+}
+
+void QQuickRangeSliderPrivate::handlePress(const QPointF &point)
{
Q_Q(QQuickRangeSlider);
+ QQuickControlPrivate::handlePress(point);
pressPoint = point;
QQuickItem *firstHandle = first->handle();
@@ -453,9 +469,10 @@ void QQuickRangeSliderPrivate::handlePress(const QPointF &point, int touchId)
otherNode->handle()->setZ(0);
}
-void QQuickRangeSliderPrivate::handleMove(const QPointF &point, int touchId)
+void QQuickRangeSliderPrivate::handleMove(const QPointF &point)
{
Q_Q(QQuickRangeSlider);
+ QQuickControlPrivate::handleMove(point);
QQuickRangeSliderNode *pressedNode = QQuickRangeSliderPrivate::pressedNode(touchId);
if (pressedNode) {
qreal pos = positionAt(q, pressedNode->handle(), point);
@@ -468,9 +485,10 @@ void QQuickRangeSliderPrivate::handleMove(const QPointF &point, int touchId)
}
}
-void QQuickRangeSliderPrivate::handleRelease(const QPointF &point, int touchId)
+void QQuickRangeSliderPrivate::handleRelease(const QPointF &point)
{
Q_Q(QQuickRangeSlider);
+ QQuickControlPrivate::handleRelease(point);
pressPoint = QPointF();
QQuickRangeSliderNode *pressedNode = QQuickRangeSliderPrivate::pressedNode(touchId);
@@ -496,6 +514,7 @@ void QQuickRangeSliderPrivate::handleRelease(const QPointF &point, int touchId)
void QQuickRangeSliderPrivate::handleUngrab()
{
+ QQuickControlPrivate::handleUngrab();
pressPoint = QPointF();
first->setPressed(false);
second->setPressed(false);
@@ -982,57 +1001,33 @@ void QQuickRangeSlider::mousePressEvent(QMouseEvent *event)
{
Q_D(QQuickRangeSlider);
QQuickControl::mousePressEvent(event);
- d->handlePress(event->localPos());
d->handleMove(event->localPos());
}
void QQuickRangeSlider::mouseMoveEvent(QMouseEvent *event)
{
Q_D(QQuickRangeSlider);
- QQuickControl::mouseMoveEvent(event);
if (!keepMouseGrab()) {
if (d->orientation == Qt::Horizontal)
setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().x() - d->pressPoint.x(), Qt::XAxis, event));
else
setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().y() - d->pressPoint.y(), Qt::YAxis, event));
}
- if (keepMouseGrab())
- d->handleMove(event->localPos());
-}
-
-void QQuickRangeSlider::mouseReleaseEvent(QMouseEvent *event)
-{
- Q_D(QQuickRangeSlider);
- QQuickControl::mouseReleaseEvent(event);
- d->handleRelease(event->localPos());
-}
-
-void QQuickRangeSlider::mouseUngrabEvent()
-{
- Q_D(QQuickRangeSlider);
- QQuickControl::mouseUngrabEvent();
- d->handleUngrab();
+ QQuickControl::mouseMoveEvent(event);
}
void QQuickRangeSlider::touchEvent(QTouchEvent *event)
{
Q_D(QQuickRangeSlider);
switch (event->type()) {
- case QEvent::TouchBegin:
- if (!d->first->isPressed() || !d->second->isPressed()) {
- const QTouchEvent::TouchPoint point = event->touchPoints().first();
- d->handlePress(point.pos(), point.id());
- } else {
- event->ignore();
- }
- break;
-
case QEvent::TouchUpdate:
for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
+ if (!d->acceptTouch(point))
+ continue;
+
switch (point.state()) {
case Qt::TouchPointPressed:
- if (!d->first->isPressed() || !d->second->isPressed())
- d->handlePress(point.pos(), point.id());
+ d->handlePress(point.pos());
break;
case Qt::TouchPointMoved:
if (!keepTouchGrab()) {
@@ -1041,14 +1036,11 @@ void QQuickRangeSlider::touchEvent(QTouchEvent *event)
else
setKeepTouchGrab(QQuickWindowPrivate::dragOverThreshold(point.pos().y() - point.startPos().y(), Qt::YAxis, &point));
}
- if (point.id() == QQuickRangeSliderNodePrivate::get(d->first)->touchId
- || point.id() == QQuickRangeSliderNodePrivate::get(d->second)->touchId)
- d->handleMove(point.pos(), point.id());
+ if (keepTouchGrab())
+ d->handleMove(point.pos());
break;
case Qt::TouchPointReleased:
- if (point.id() == QQuickRangeSliderNodePrivate::get(d->first)->touchId
- || point.id() == QQuickRangeSliderNodePrivate::get(d->second)->touchId)
- d->handleRelease(point.pos(), point.id());
+ d->handleRelease(point.pos());
break;
default:
break;
@@ -1056,31 +1048,12 @@ void QQuickRangeSlider::touchEvent(QTouchEvent *event)
}
break;
- case QEvent::TouchEnd:
- for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() == QQuickRangeSliderNodePrivate::get(d->first)->touchId
- || point.id() == QQuickRangeSliderNodePrivate::get(d->second)->touchId)
- d->handleRelease(point.pos(), point.id());
- }
- break;
-
- case QEvent::TouchCancel:
- d->handleUngrab();
- break;
-
default:
QQuickControl::touchEvent(event);
break;
}
}
-void QQuickRangeSlider::touchUngrabEvent()
-{
- Q_D(QQuickRangeSlider);
- QQuickControl::touchUngrabEvent();
- d->handleUngrab();
-}
-
void QQuickRangeSlider::mirrorChange()
{
Q_D(QQuickRangeSlider);
diff --git a/src/quicktemplates2/qquickrangeslider_p.h b/src/quicktemplates2/qquickrangeslider_p.h
index affb734a..b4553501 100644
--- a/src/quicktemplates2/qquickrangeslider_p.h
+++ b/src/quicktemplates2/qquickrangeslider_p.h
@@ -122,10 +122,7 @@ protected:
void keyReleaseEvent(QKeyEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void mouseUngrabEvent() override;
void touchEvent(QTouchEvent *event) override;
- void touchUngrabEvent() override;
void mirrorChange() override;
void componentComplete() override;
diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp
index 240f6601..128bca6f 100644
--- a/src/quicktemplates2/qquickscrollbar.cpp
+++ b/src/quicktemplates2/qquickscrollbar.cpp
@@ -165,7 +165,6 @@ QQuickScrollBarPrivate::QQuickScrollBarPrivate()
moving(false),
interactive(true),
explicitInteractive(false),
- touchId(-1),
orientation(Qt::Vertical),
snapMode(QQuickScrollBar::NoSnap),
policy(QQuickScrollBar::AsNeeded)
@@ -246,6 +245,7 @@ void QQuickScrollBarPrivate::resizeContent()
void QQuickScrollBarPrivate::handlePress(const QPointF &point)
{
Q_Q(QQuickScrollBar);
+ QQuickControlPrivate::handlePress(point);
offset = positionAt(point) - position;
if (offset < 0 || offset > size)
offset = size / 2;
@@ -255,6 +255,7 @@ void QQuickScrollBarPrivate::handlePress(const QPointF &point)
void QQuickScrollBarPrivate::handleMove(const QPointF &point)
{
Q_Q(QQuickScrollBar);
+ QQuickControlPrivate::handleMove(point);
qreal pos = qBound<qreal>(0.0, positionAt(point) - offset, 1.0 - size);
if (snapMode == QQuickScrollBar::SnapAlways)
pos = snapPosition(pos);
@@ -264,20 +265,20 @@ void QQuickScrollBarPrivate::handleMove(const QPointF &point)
void QQuickScrollBarPrivate::handleRelease(const QPointF &point)
{
Q_Q(QQuickScrollBar);
+ QQuickControlPrivate::handleRelease(point);
qreal pos = qBound<qreal>(0.0, positionAt(point) - offset, 1.0 - size);
if (snapMode != QQuickScrollBar::NoSnap)
pos = snapPosition(pos);
q->setPosition(pos);
offset = 0.0;
- touchId = -1;
q->setPressed(false);
}
void QQuickScrollBarPrivate::handleUngrab()
{
Q_Q(QQuickScrollBar);
+ QQuickControlPrivate::handleUngrab();
offset = 0.0;
- touchId = -1;
q->setPressed(false);
}
@@ -627,80 +628,9 @@ void QQuickScrollBar::mousePressEvent(QMouseEvent *event)
{
Q_D(QQuickScrollBar);
QQuickControl::mousePressEvent(event);
- d->handlePress(event->localPos());
d->handleMove(event->localPos());
}
-void QQuickScrollBar::mouseMoveEvent(QMouseEvent *event)
-{
- Q_D(QQuickScrollBar);
- QQuickControl::mouseMoveEvent(event);
- d->handleMove(event->localPos());
-}
-
-void QQuickScrollBar::mouseReleaseEvent(QMouseEvent *event)
-{
- Q_D(QQuickScrollBar);
- QQuickControl::mouseReleaseEvent(event);
- d->handleRelease(event->localPos());
-}
-
-void QQuickScrollBar::mouseUngrabEvent()
-{
- Q_D(QQuickScrollBar);
- QQuickControl::mouseUngrabEvent();
- d->handleUngrab();
-}
-
-void QQuickScrollBar::touchEvent(QTouchEvent *event)
-{
- Q_D(QQuickScrollBar);
- switch (event->type()) {
- case QEvent::TouchBegin:
- if (d->touchId == -1) {
- const QTouchEvent::TouchPoint point = event->touchPoints().first();
- d->touchId = point.id();
- d->handlePress(point.pos());
- } else {
- event->ignore();
- }
- break;
-
- case QEvent::TouchUpdate:
- for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() != d->touchId)
- continue;
-
- d->handleMove(point.pos());
- }
- break;
-
- case QEvent::TouchEnd:
- for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() != d->touchId)
- continue;
-
- d->handleRelease(point.pos());
- }
- break;
-
- case QEvent::TouchCancel:
- d->handleUngrab();
- break;
-
- default:
- QQuickControl::touchEvent(event);
- break;
- }
-}
-
-void QQuickScrollBar::touchUngrabEvent()
-{
- Q_D(QQuickScrollBar);
- QQuickControl::touchUngrabEvent();
- d->handleUngrab();
-}
-
#if QT_CONFIG(quicktemplates2_hover)
void QQuickScrollBar::hoverChange()
{
diff --git a/src/quicktemplates2/qquickscrollbar_p.h b/src/quicktemplates2/qquickscrollbar_p.h
index d7457876..9b417a2b 100644
--- a/src/quicktemplates2/qquickscrollbar_p.h
+++ b/src/quicktemplates2/qquickscrollbar_p.h
@@ -136,11 +136,6 @@ Q_SIGNALS:
protected:
void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void mouseUngrabEvent() override;
- void touchEvent(QTouchEvent *event) override;
- void touchUngrabEvent() override;
#if QT_CONFIG(quicktemplates2_hover)
void hoverChange() override;
diff --git a/src/quicktemplates2/qquickscrollbar_p_p.h b/src/quicktemplates2/qquickscrollbar_p_p.h
index 409b952b..431bb383 100644
--- a/src/quicktemplates2/qquickscrollbar_p_p.h
+++ b/src/quicktemplates2/qquickscrollbar_p_p.h
@@ -74,10 +74,10 @@ public:
void updateActive();
void resizeContent() override;
- void handlePress(const QPointF &point);
- void handleMove(const QPointF &point);
- void handleRelease(const QPointF &point);
- void handleUngrab();
+ void handlePress(const QPointF &point) override;
+ void handleMove(const QPointF &point) override;
+ void handleRelease(const QPointF &point) override;
+ void handleUngrab() override;
qreal size;
qreal position;
@@ -88,7 +88,6 @@ public:
bool moving;
bool interactive;
bool explicitInteractive;
- int touchId;
Qt::Orientation orientation;
QQuickScrollBar::SnapMode snapMode;
QQuickScrollBar::Policy policy;
diff --git a/src/quicktemplates2/qquickslider.cpp b/src/quicktemplates2/qquickslider.cpp
index 7c64957b..2e337c3a 100644
--- a/src/quicktemplates2/qquickslider.cpp
+++ b/src/quicktemplates2/qquickslider.cpp
@@ -96,7 +96,6 @@ public:
stepSize(0),
live(true),
pressed(false),
- touchId(-1),
orientation(Qt::Horizontal),
snapMode(QQuickSlider::NoSnap),
handle(nullptr)
@@ -108,10 +107,10 @@ public:
void setPosition(qreal position);
void updatePosition();
- void handlePress(const QPointF &point);
- void handleMove(const QPointF &point);
- void handleRelease(const QPointF &point);
- void handleUngrab();
+ void handlePress(const QPointF &point) override;
+ void handleMove(const QPointF &point) override;
+ void handleRelease(const QPointF &point) override;
+ void handleUngrab() override;
qreal from;
qreal to;
@@ -120,7 +119,6 @@ public:
qreal stepSize;
bool live;
bool pressed;
- int touchId;
QPointF pressPoint;
Qt::Orientation orientation;
QQuickSlider::SnapMode snapMode;
@@ -187,6 +185,7 @@ void QQuickSliderPrivate::updatePosition()
void QQuickSliderPrivate::handlePress(const QPointF &point)
{
Q_Q(QQuickSlider);
+ QQuickControlPrivate::handlePress(point);
pressPoint = point;
q->setPressed(true);
}
@@ -194,6 +193,7 @@ void QQuickSliderPrivate::handlePress(const QPointF &point)
void QQuickSliderPrivate::handleMove(const QPointF &point)
{
Q_Q(QQuickSlider);
+ QQuickControlPrivate::handleMove(point);
const qreal oldPos = position;
qreal pos = positionAt(point);
if (snapMode == QQuickSlider::SnapAlways)
@@ -209,7 +209,7 @@ void QQuickSliderPrivate::handleMove(const QPointF &point)
void QQuickSliderPrivate::handleRelease(const QPointF &point)
{
Q_Q(QQuickSlider);
- touchId = -1;
+ QQuickControlPrivate::handleRelease(point);
pressPoint = QPointF();
const qreal oldPos = position;
qreal pos = positionAt(point);
@@ -230,7 +230,7 @@ void QQuickSliderPrivate::handleRelease(const QPointF &point)
void QQuickSliderPrivate::handleUngrab()
{
Q_Q(QQuickSlider);
- touchId = -1;
+ QQuickControlPrivate::handleUngrab();
pressPoint = QPointF();
q->setPressed(false);
}
@@ -650,93 +650,59 @@ void QQuickSlider::mousePressEvent(QMouseEvent *event)
{
Q_D(QQuickSlider);
QQuickControl::mousePressEvent(event);
- d->handlePress(event->localPos());
d->handleMove(event->localPos());
}
void QQuickSlider::mouseMoveEvent(QMouseEvent *event)
{
Q_D(QQuickSlider);
- QQuickControl::mouseMoveEvent(event);
if (!keepMouseGrab()) {
if (d->orientation == Qt::Horizontal)
setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().x() - d->pressPoint.x(), Qt::XAxis, event));
else
setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().y() - d->pressPoint.y(), Qt::YAxis, event));
}
- d->handleMove(event->localPos());
-}
-
-void QQuickSlider::mouseReleaseEvent(QMouseEvent *event)
-{
- Q_D(QQuickSlider);
- QQuickControl::mouseReleaseEvent(event);
- d->handleRelease(event->localPos());
-}
-
-void QQuickSlider::mouseUngrabEvent()
-{
- Q_D(QQuickSlider);
- QQuickControl::mouseUngrabEvent();
- d->handleUngrab();
+ QQuickControl::mouseMoveEvent(event);
}
void QQuickSlider::touchEvent(QTouchEvent *event)
{
Q_D(QQuickSlider);
switch (event->type()) {
- case QEvent::TouchBegin:
- if (d->touchId == -1) {
- const QTouchEvent::TouchPoint point = event->touchPoints().first();
- d->touchId = point.id();
- d->handlePress(point.pos());
- } else {
- event->ignore();
- }
- break;
-
case QEvent::TouchUpdate:
for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() != d->touchId)
+ if (!d->acceptTouch(point))
continue;
- if (!keepTouchGrab()) {
- if (d->orientation == Qt::Horizontal)
- setKeepTouchGrab(QQuickWindowPrivate::dragOverThreshold(point.pos().x() - d->pressPoint.x(), Qt::XAxis, &point));
- else
- setKeepTouchGrab(QQuickWindowPrivate::dragOverThreshold(point.pos().y() - d->pressPoint.y(), Qt::YAxis, &point));
+ switch (point.state()) {
+ case Qt::TouchPointPressed:
+ d->handlePress(point.pos());
+ break;
+ case Qt::TouchPointMoved:
+ if (!keepTouchGrab()) {
+ if (d->orientation == Qt::Horizontal)
+ setKeepTouchGrab(QQuickWindowPrivate::dragOverThreshold(point.pos().x() - d->pressPoint.x(), Qt::XAxis, &point));
+ else
+ setKeepTouchGrab(QQuickWindowPrivate::dragOverThreshold(point.pos().y() - d->pressPoint.y(), Qt::YAxis, &point));
+ }
+ if (keepTouchGrab())
+ d->handleMove(point.pos());
+ break;
+ case Qt::TouchPointReleased:
+ d->handleRelease(point.pos());
+ break;
+ default:
+ break;
}
- if (keepTouchGrab())
- d->handleMove(point.pos());
- }
- break;
-
- case QEvent::TouchEnd:
- for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() != d->touchId)
- continue;
-
- d->handleRelease(point.pos());
}
break;
- case QEvent::TouchCancel:
- d->handleUngrab();
- break;
-
default:
QQuickControl::touchEvent(event);
break;
}
}
-void QQuickSlider::touchUngrabEvent()
-{
- Q_D(QQuickSlider);
- QQuickControl::touchUngrabEvent();
- d->handleUngrab();
-}
-
#if QT_CONFIG(wheelevent)
void QQuickSlider::wheelEvent(QWheelEvent *event)
{
diff --git a/src/quicktemplates2/qquickslider_p.h b/src/quicktemplates2/qquickslider_p.h
index f2a13217..cb441ddd 100644
--- a/src/quicktemplates2/qquickslider_p.h
+++ b/src/quicktemplates2/qquickslider_p.h
@@ -139,10 +139,7 @@ protected:
void keyReleaseEvent(QKeyEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void mouseUngrabEvent() override;
void touchEvent(QTouchEvent *event) override;
- void touchUngrabEvent() override;
#if QT_CONFIG(wheelevent)
void wheelEvent(QWheelEvent *event) override;
#endif
diff --git a/src/quicktemplates2/qquickspinbox.cpp b/src/quicktemplates2/qquickspinbox.cpp
index b70366ea..b6e99609 100644
--- a/src/quicktemplates2/qquickspinbox.cpp
+++ b/src/quicktemplates2/qquickspinbox.cpp
@@ -114,7 +114,6 @@ public:
stepSize(1),
delayTimer(0),
repeatTimer(0),
- touchId(-1),
up(nullptr),
down(nullptr),
validator(nullptr),
@@ -138,10 +137,10 @@ public:
void startPressRepeat();
void stopPressRepeat();
- bool handlePress(const QPointF &point);
- bool handleMove(const QPointF &point);
- bool handleRelease(const QPointF &point);
- bool handleUngrab();
+ void handlePress(const QPointF &point) override;
+ void handleMove(const QPointF &point) override;
+ void handleRelease(const QPointF &point) override;
+ void handleUngrab() override;
bool editable;
int from;
@@ -150,7 +149,6 @@ public:
int stepSize;
int delayTimer;
int repeatTimer;
- int touchId;
QQuickSpinButton *up;
QQuickSpinButton *down;
QValidator *validator;
@@ -273,9 +271,10 @@ void QQuickSpinBoxPrivate::stopPressRepeat()
}
}
-bool QQuickSpinBoxPrivate::handlePress(const QPointF &point)
+void QQuickSpinBoxPrivate::handlePress(const QPointF &point)
{
Q_Q(QQuickSpinBox);
+ QQuickControlPrivate::handlePress(point);
QQuickItem *ui = up->indicator();
QQuickItem *di = down->indicator();
up->setPressed(ui && ui->isEnabled() && ui->contains(ui->mapFromItem(q, point)));
@@ -285,12 +284,12 @@ bool QQuickSpinBoxPrivate::handlePress(const QPointF &point)
q->setAccessibleProperty("pressed", pressed);
if (pressed)
startRepeatDelay();
- return pressed;
}
-bool QQuickSpinBoxPrivate::handleMove(const QPointF &point)
+void QQuickSpinBoxPrivate::handleMove(const QPointF &point)
{
Q_Q(QQuickSpinBox);
+ QQuickControlPrivate::handleMove(point);
QQuickItem *ui = up->indicator();
QQuickItem *di = down->indicator();
up->setPressed(ui && ui->isEnabled() && ui->contains(ui->mapFromItem(q, point)));
@@ -300,17 +299,16 @@ bool QQuickSpinBoxPrivate::handleMove(const QPointF &point)
q->setAccessibleProperty("pressed", pressed);
if (!pressed)
stopPressRepeat();
- return pressed;
}
-bool QQuickSpinBoxPrivate::handleRelease(const QPointF &point)
+void QQuickSpinBoxPrivate::handleRelease(const QPointF &point)
{
Q_Q(QQuickSpinBox);
+ QQuickControlPrivate::handleRelease(point);
QQuickItem *ui = up->indicator();
QQuickItem *di = down->indicator();
int oldValue = value;
- bool wasPressed = up->isPressed() || down->isPressed();
if (up->isPressed()) {
up->setPressed(false);
if (repeatTimer <= 0 && ui && ui->contains(ui->mapFromItem(q, point)))
@@ -323,22 +321,19 @@ bool QQuickSpinBoxPrivate::handleRelease(const QPointF &point)
if (value != oldValue)
emit q->valueModified();
- touchId = -1;
q->setAccessibleProperty("pressed", false);
stopPressRepeat();
- return wasPressed;
}
-bool QQuickSpinBoxPrivate::handleUngrab()
+void QQuickSpinBoxPrivate::handleUngrab()
{
Q_Q(QQuickSpinBox);
+ QQuickControlPrivate::handleUngrab();
up->setPressed(false);
down->setPressed(false);
- touchId = -1;
q->setAccessibleProperty("pressed", false);
stopPressRepeat();
- return false;
}
QQuickSpinBox::QQuickSpinBox(QQuickItem *parent)
@@ -791,34 +786,6 @@ void QQuickSpinBox::keyReleaseEvent(QKeyEvent *event)
setAccessibleProperty("pressed", false);
}
-void QQuickSpinBox::mousePressEvent(QMouseEvent *event)
-{
- Q_D(QQuickSpinBox);
- QQuickControl::mousePressEvent(event);
- d->handlePress(event->localPos());
-}
-
-void QQuickSpinBox::mouseMoveEvent(QMouseEvent *event)
-{
- Q_D(QQuickSpinBox);
- QQuickControl::mouseMoveEvent(event);
- d->handleMove(event->localPos());
-}
-
-void QQuickSpinBox::mouseReleaseEvent(QMouseEvent *event)
-{
- Q_D(QQuickSpinBox);
- QQuickControl::mouseReleaseEvent(event);
- d->handleRelease(event->localPos());
-}
-
-void QQuickSpinBox::mouseUngrabEvent()
-{
- Q_D(QQuickSpinBox);
- QQuickControl::mouseUngrabEvent();
- d->handleUngrab();
-}
-
void QQuickSpinBox::timerEvent(QTimerEvent *event)
{
Q_D(QQuickSpinBox);
@@ -833,55 +800,6 @@ void QQuickSpinBox::timerEvent(QTimerEvent *event)
}
}
-void QQuickSpinBox::touchEvent(QTouchEvent *event)
-{
- Q_D(QQuickSpinBox);
- switch (event->type()) {
- case QEvent::TouchBegin:
- if (d->touchId == -1) {
- const QTouchEvent::TouchPoint point = event->touchPoints().first();
- d->touchId = point.id();
- d->handlePress(point.pos());
- } else {
- event->ignore();
- }
- break;
-
- case QEvent::TouchUpdate:
- for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() != d->touchId)
- continue;
-
- d->handleMove(point.pos());
- }
- break;
-
- case QEvent::TouchEnd:
- for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
- if (point.id() != d->touchId)
- continue;
-
- d->handleRelease(point.pos());
- }
- break;
-
- case QEvent::TouchCancel:
- d->handleUngrab();
- break;
-
- default:
- QQuickControl::touchEvent(event);
- break;
- }
-}
-
-void QQuickSpinBox::touchUngrabEvent()
-{
- Q_D(QQuickSpinBox);
- QQuickControl::touchUngrabEvent();
- d->handleUngrab();
-}
-
#if QT_CONFIG(wheelevent)
void QQuickSpinBox::wheelEvent(QWheelEvent *event)
{
diff --git a/src/quicktemplates2/qquickspinbox_p.h b/src/quicktemplates2/qquickspinbox_p.h
index 3d554870..d51a2ccb 100644
--- a/src/quicktemplates2/qquickspinbox_p.h
+++ b/src/quicktemplates2/qquickspinbox_p.h
@@ -132,13 +132,7 @@ protected:
void hoverLeaveEvent(QHoverEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
- void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void mouseUngrabEvent() override;
void timerEvent(QTimerEvent *event) override;
- void touchEvent(QTouchEvent *event) override;
- void touchUngrabEvent() override;
#if QT_CONFIG(wheelevent)
void wheelEvent(QWheelEvent *event) override;
#endif