diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2020-07-02 12:10:13 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2020-07-02 22:42:25 +0200 |
commit | 117a5aa744e990fdf44e764a4347335d85db03d0 (patch) | |
tree | 8faa64d583e6a38ec17c3fd7b3965eeede93e62a /src/widgets/widgets/qabstractspinbox.cpp | |
parent | 2a6cdec718934ca2cc7f6f9c616ebe62f6912123 (diff) |
Maintain keyboard modifier state in QAbstractSpinBox's input event handlers
Gets rid of calls to QGuiApplication::keyboardModifiers. Need to handle
key and mouse events, since the spin buttons may be clicked on without
the spinbox having focus.
Task-number: QTBUG-73829
Change-Id: I455c42987f19bb5b7997dc8d61272863d7bc394e
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/widgets/widgets/qabstractspinbox.cpp')
-rw-r--r-- | src/widgets/widgets/qabstractspinbox.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/widgets/widgets/qabstractspinbox.cpp b/src/widgets/widgets/qabstractspinbox.cpp index f7e19ae7c8..bdda50603b 100644 --- a/src/widgets/widgets/qabstractspinbox.cpp +++ b/src/widgets/widgets/qabstractspinbox.cpp @@ -1010,6 +1010,8 @@ void QAbstractSpinBox::keyPressEvent(QKeyEvent *event) { Q_D(QAbstractSpinBox); + d->keyboardModifiers = event->modifiers(); + if (!event->text().isEmpty() && d->edit->cursorPosition() < d->prefix.size()) d->edit->setCursorPosition(d->prefix.size()); @@ -1150,6 +1152,7 @@ void QAbstractSpinBox::keyReleaseEvent(QKeyEvent *event) { Q_D(QAbstractSpinBox); + d->keyboardModifiers = event->modifiers(); if (d->buttonState & Keyboard && !event->isAutoRepeat()) { d->reset(); } else { @@ -1282,7 +1285,7 @@ void QAbstractSpinBox::timerEvent(QTimerEvent *event) } if (doStep) { - const bool increaseStepRate = QGuiApplication::keyboardModifiers() & d->stepModifier; + const bool increaseStepRate = d->keyboardModifiers & d->stepModifier; const StepEnabled st = stepEnabled(); if (d->buttonState & Up) { if (!(st & StepUpEnabled)) { @@ -1359,6 +1362,7 @@ void QAbstractSpinBox::mouseMoveEvent(QMouseEvent *event) { Q_D(QAbstractSpinBox); + d->keyboardModifiers = event->modifiers(); d->updateHoverControl(event->position().toPoint()); // If we have a timer ID, update the state @@ -1382,6 +1386,7 @@ void QAbstractSpinBox::mousePressEvent(QMouseEvent *event) { Q_D(QAbstractSpinBox); + d->keyboardModifiers = event->modifiers(); if (event->button() != Qt::LeftButton || d->buttonState != None) { return; } @@ -1406,6 +1411,7 @@ void QAbstractSpinBox::mouseReleaseEvent(QMouseEvent *event) { Q_D(QAbstractSpinBox); + d->keyboardModifiers = event->modifiers(); if ((d->buttonState & Mouse) != 0) d->reset(); event->accept(); @@ -1421,7 +1427,7 @@ void QAbstractSpinBox::mouseReleaseEvent(QMouseEvent *event) QAbstractSpinBoxPrivate::QAbstractSpinBoxPrivate() : edit(nullptr), type(QMetaType::UnknownType), spinClickTimerId(-1), spinClickTimerInterval(100), spinClickThresholdTimerId(-1), spinClickThresholdTimerInterval(-1), - effectiveSpinRepeatRate(1), buttonState(None), cachedText(QLatin1String("\x01")), + effectiveSpinRepeatRate(1), buttonState(None), keyboardModifiers{}, cachedText(QLatin1String("\x01")), cachedState(QValidator::Invalid), pendingEmit(false), readOnly(false), wrapping(false), ignoreCursorPositionChanged(false), frame(true), accelerate(false), keyboardTracking(true), cleared(false), ignoreUpdateEdit(false), correctionMode(QAbstractSpinBox::CorrectToPreviousValue), @@ -1679,7 +1685,7 @@ void QAbstractSpinBoxPrivate::updateState(bool up, bool fromKeyboard /* = false spinClickThresholdTimerId = q->startTimer(spinClickThresholdTimerInterval); buttonState = (up ? Up : Down) | (fromKeyboard ? Keyboard : Mouse); int steps = up ? 1 : -1; - if (QGuiApplication::keyboardModifiers() & stepModifier) + if (keyboardModifiers & stepModifier) steps *= 10; q->stepBy(steps); #ifndef QT_NO_ACCESSIBILITY |