summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets/qabstractspinbox.cpp
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2020-07-02 12:10:13 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2020-07-02 22:42:25 +0200
commit117a5aa744e990fdf44e764a4347335d85db03d0 (patch)
tree8faa64d583e6a38ec17c3fd7b3965eeede93e62a /src/widgets/widgets/qabstractspinbox.cpp
parent2a6cdec718934ca2cc7f6f9c616ebe62f6912123 (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.cpp12
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