aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickcombobox.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-04-19 13:39:41 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-04-19 12:50:52 +0000
commita02a54622a4eef49807060f9735c4c0d09833267 (patch)
tree6abb7770f72a7415021503ad7fc2ff3f64fdc080 /src/quicktemplates2/qquickcombobox.cpp
parent0846541cd97b0fb30d51796ab9bf31d7684eb15b (diff)
QQuickComboBox: handle touch events
Task-number: QTBUG-58389 Change-Id: I7120d7bce827beb97a9ae3eaf4e99cf6b6e9f209 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickcombobox.cpp')
-rw-r--r--src/quicktemplates2/qquickcombobox.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/quicktemplates2/qquickcombobox.cpp b/src/quicktemplates2/qquickcombobox.cpp
index 1e24f022..09a5eede 100644
--- a/src/quicktemplates2/qquickcombobox.cpp
+++ b/src/quicktemplates2/qquickcombobox.cpp
@@ -257,6 +257,7 @@ public:
bool hasCurrentIndex;
int highlightedIndex;
int currentIndex;
+ int touchId;
QVariant model;
QString textRole;
QString currentText;
@@ -295,6 +296,7 @@ QQuickComboBoxPrivate::QQuickComboBoxPrivate()
hasCurrentIndex(false),
highlightedIndex(-1),
currentIndex(-1),
+ touchId(-1),
delegateModel(nullptr),
delegate(nullptr),
indicator(nullptr),
@@ -646,12 +648,14 @@ void QQuickComboBoxPrivate::handleRelease(const QPointF &)
q->setPressed(false);
togglePopup(false);
}
+ touchId = -1;
}
void QQuickComboBoxPrivate::handleUngrab()
{
Q_Q(QQuickComboBox);
q->setPressed(false);
+ touchId = -1;
}
QQuickComboBox::QQuickComboBox(QQuickItem *parent)
@@ -1531,6 +1535,63 @@ void QQuickComboBox::mouseUngrabEvent()
d->handleUngrab();
}
+void QQuickComboBox::touchEvent(QTouchEvent *event)
+{
+ Q_D(QQuickComboBox);
+ 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->handleUngrab();
+ break;
+
+ default:
+ QQuickControl::touchEvent(event);
+ break;
+ }
+}
+
+void QQuickComboBox::touchUngrabEvent()
+{
+ Q_D(QQuickComboBox);
+ QQuickControl::touchUngrabEvent();
+ d->handleUngrab();
+}
+
#if QT_CONFIG(wheelevent)
void QQuickComboBox::wheelEvent(QWheelEvent *event)
{