Add QStyleHints::keyboardAutoRepeatRateF()

The keyboardAutoRepeatRate() function returning an int assumes
the rate can not be lower than one event per second, but this
is not always the case, e.g. on macOS where the slowest setting
for key repeat results in a two second delay between events.

Change-Id: I806fb57883ce0085c835fb0a43d6b86bd6da375a
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Tor Arne Vestbø 2022-09-28 21:25:53 +02:00
parent ff4e624cd6
commit 87cabd0b92
4 changed files with 20 additions and 2 deletions

View File

@ -278,15 +278,28 @@ int QStyleHints::keyboardInputInterval() const
themeableHint(QPlatformTheme::KeyboardInputInterval, QPlatformIntegration::KeyboardInputInterval).toInt(); themeableHint(QPlatformTheme::KeyboardInputInterval, QPlatformIntegration::KeyboardInputInterval).toInt();
} }
#if QT_DEPRECATED_SINCE(6, 5)
/*! /*!
\property QStyleHints::keyboardAutoRepeatRate \property QStyleHints::keyboardAutoRepeatRate
\brief the rate, in events per second, in which additional repeated key \brief the rate, in events per second, in which additional repeated key
presses will automatically be generated if a key is being held down. presses will automatically be generated if a key is being held down.
\deprecated Use keyboardAutoRepeatRateF() instead
*/ */
int QStyleHints::keyboardAutoRepeatRate() const int QStyleHints::keyboardAutoRepeatRate() const
{ {
return themeableHint(QPlatformTheme::KeyboardAutoRepeatRate, QPlatformIntegration::KeyboardAutoRepeatRate).toInt(); return themeableHint(QPlatformTheme::KeyboardAutoRepeatRate, QPlatformIntegration::KeyboardAutoRepeatRate).toInt();
} }
#endif
/*!
\property QStyleHints::keyboardAutoRepeatRateF
\brief the rate, in events per second, in which additional repeated key
presses will automatically be generated if a key is being held down.
*/
qreal QStyleHints::keyboardAutoRepeatRateF() const
{
return themeableHint(QPlatformTheme::KeyboardAutoRepeatRate, QPlatformIntegration::KeyboardAutoRepeatRate).toReal();
}
/*! /*!
Sets the \a cursorFlashTime. Sets the \a cursorFlashTime.

View File

@ -20,6 +20,7 @@ class Q_GUI_EXPORT QStyleHints : public QObject
Q_PROPERTY(int cursorFlashTime READ cursorFlashTime NOTIFY cursorFlashTimeChanged FINAL) Q_PROPERTY(int cursorFlashTime READ cursorFlashTime NOTIFY cursorFlashTimeChanged FINAL)
Q_PROPERTY(qreal fontSmoothingGamma READ fontSmoothingGamma STORED false CONSTANT FINAL) Q_PROPERTY(qreal fontSmoothingGamma READ fontSmoothingGamma STORED false CONSTANT FINAL)
Q_PROPERTY(int keyboardAutoRepeatRate READ keyboardAutoRepeatRate STORED false CONSTANT FINAL) Q_PROPERTY(int keyboardAutoRepeatRate READ keyboardAutoRepeatRate STORED false CONSTANT FINAL)
Q_PROPERTY(int keyboardAutoRepeatRateF READ keyboardAutoRepeatRateF STORED false CONSTANT FINAL)
Q_PROPERTY(int keyboardInputInterval READ keyboardInputInterval Q_PROPERTY(int keyboardInputInterval READ keyboardInputInterval
NOTIFY keyboardInputIntervalChanged FINAL) NOTIFY keyboardInputIntervalChanged FINAL)
Q_PROPERTY(int mouseDoubleClickInterval READ mouseDoubleClickInterval Q_PROPERTY(int mouseDoubleClickInterval READ mouseDoubleClickInterval
@ -65,7 +66,11 @@ public:
int startDragVelocity() const; int startDragVelocity() const;
void setKeyboardInputInterval(int keyboardInputInterval); void setKeyboardInputInterval(int keyboardInputInterval);
int keyboardInputInterval() const; int keyboardInputInterval() const;
#if QT_DEPRECATED_SINCE(6, 5)
QT_DEPRECATED_VERSION_X_6_5("Use keyboardAutoRepeatRateF() instead")
int keyboardAutoRepeatRate() const; int keyboardAutoRepeatRate() const;
#endif
qreal keyboardAutoRepeatRateF() const;
void setCursorFlashTime(int cursorFlashTime); void setCursorFlashTime(int cursorFlashTime);
int cursorFlashTime() const; int cursorFlashTime() const;
bool showIsFullScreen() const; bool showIsFullScreen() const;

View File

@ -1236,7 +1236,7 @@ void QAbstractSpinBox::timerEvent(QTimerEvent *event)
killTimer(d->spinClickThresholdTimerId); killTimer(d->spinClickThresholdTimerId);
d->spinClickThresholdTimerId = -1; d->spinClickThresholdTimerId = -1;
d->effectiveSpinRepeatRate = d->buttonState & Keyboard d->effectiveSpinRepeatRate = d->buttonState & Keyboard
? QGuiApplication::styleHints()->keyboardAutoRepeatRate() ? QGuiApplication::styleHints()->keyboardAutoRepeatRateF()
: d->spinClickTimerInterval; : d->spinClickTimerInterval;
d->spinClickTimerId = startTimer(d->effectiveSpinRepeatRate); d->spinClickTimerId = startTimer(d->effectiveSpinRepeatRate);
doStep = true; doStep = true;

View File

@ -102,7 +102,7 @@ public:
int spinClickTimerInterval = 100; int spinClickTimerInterval = 100;
int spinClickThresholdTimerId = -1; int spinClickThresholdTimerId = -1;
int spinClickThresholdTimerInterval = -1; int spinClickThresholdTimerInterval = -1;
int effectiveSpinRepeatRate = 1; qreal effectiveSpinRepeatRate = 1;
int acceleration = 0; int acceleration = 0;
int wheelDeltaRemainder = 0; int wheelDeltaRemainder = 0;