diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-04-19 13:39:41 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-04-19 12:50:52 +0000 |
commit | a02a54622a4eef49807060f9735c4c0d09833267 (patch) | |
tree | 6abb7770f72a7415021503ad7fc2ff3f64fdc080 /src/quicktemplates2/qquickcombobox.cpp | |
parent | 0846541cd97b0fb30d51796ab9bf31d7684eb15b (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.cpp | 61 |
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) { |