From 7024ddba4b91d66341e1e076aca90b55aaf6641d Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 9 Jan 2012 13:11:14 +0100 Subject: Platform style hints: Introduce keyboard repeat rate. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I556c2ecec7d5368122875a659af3ae7db88aa481 Reviewed-by: Samuel Rødal --- src/gui/kernel/qplatformintegration_qpa.cpp | 2 ++ src/gui/kernel/qplatformintegration_qpa.h | 3 ++- src/gui/kernel/qstylehints.cpp | 5 +++++ src/gui/kernel/qstylehints.h | 1 + src/plugins/platforms/windows/qwindowsintegration.cpp | 11 ++++++++++- src/widgets/widgets/qabstractspinbox.cpp | 12 ++---------- 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp index 39664f61c8..35cb9a160d 100644 --- a/src/gui/kernel/qplatformintegration_qpa.cpp +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -227,6 +227,8 @@ QVariant QPlatformIntegration::styleHint(StyleHint hint) const return 1000; case KeyboardInputInterval: return 400; + case KeyboardAutoRepeatRate: + return 30; case MouseDoubleClickInterval: return 400; case StartDragDistance: diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index d6e3be85e1..f9a8a206a8 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -106,7 +106,8 @@ public: KeyboardInputInterval, MouseDoubleClickInterval, StartDragDistance, - StartDragTime + StartDragTime, + KeyboardAutoRepeatRate }; virtual QVariant styleHint(StyleHint hint) const; diff --git a/src/gui/kernel/qstylehints.cpp b/src/gui/kernel/qstylehints.cpp index 1fa395c285..4218477aac 100644 --- a/src/gui/kernel/qstylehints.cpp +++ b/src/gui/kernel/qstylehints.cpp @@ -76,6 +76,11 @@ int QStyleHints::keyboardInputInterval() const return hint(QPlatformIntegration::KeyboardInputInterval).toInt(); } +int QStyleHints::keyboardAutoRepeatRate() const +{ + return hint(QPlatformIntegration::KeyboardAutoRepeatRate).toInt(); +} + int QStyleHints::cursorFlashTime() const { return hint(QPlatformIntegration::CursorFlashTime).toInt(); diff --git a/src/gui/kernel/qstylehints.h b/src/gui/kernel/qstylehints.h index c61ae9aca2..d4e0415ba4 100644 --- a/src/gui/kernel/qstylehints.h +++ b/src/gui/kernel/qstylehints.h @@ -60,6 +60,7 @@ public: int startDragDistance() const; int startDragTime() const; int keyboardInputInterval() const; + int keyboardAutoRepeatRate() const; int cursorFlashTime() const; private: friend class QGuiApplication; diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 4633173e7e..8bb8bafe74 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -271,6 +271,14 @@ QPlatformFontDatabase *QWindowsIntegration::fontDatabase() const return d->m_fontDatabase; } +static inline int keyBoardAutoRepeatRateMS() +{ + DWORD time = 0; + if (SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, &time, 0)) + return time ? 1000 / static_cast(time) : 500; + return 30; +} + QVariant QWindowsIntegration::styleHint(QPlatformIntegration::StyleHint hint) const { switch (hint) { @@ -278,7 +286,8 @@ QVariant QWindowsIntegration::styleHint(QPlatformIntegration::StyleHint hint) co if (const unsigned timeMS = GetCaretBlinkTime()) return QVariant(int(timeMS)); break; - + case KeyboardAutoRepeatRate: + return QVariant(keyBoardAutoRepeatRateMS()); case QPlatformIntegration::StartDragTime: case QPlatformIntegration::StartDragDistance: case QPlatformIntegration::MouseDoubleClickInterval: diff --git a/src/widgets/widgets/qabstractspinbox.cpp b/src/widgets/widgets/qabstractspinbox.cpp index 105dd3cde8..4f5a135842 100644 --- a/src/widgets/widgets/qabstractspinbox.cpp +++ b/src/widgets/widgets/qabstractspinbox.cpp @@ -48,6 +48,7 @@ #ifndef QT_NO_SPINBOX #include +#include #include #include #include @@ -1169,15 +1170,6 @@ void QAbstractSpinBox::hideEvent(QHideEvent *event) Remember that time value should be given in msecs. */ -static int getKeyboardAutoRepeatRate() { - int ret = 30; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) - DWORD time; - if (SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, &time, 0) != FALSE) - ret = static_cast(1000 / static_cast(time)); // msecs -#endif - return ret; // msecs -} /*! \reimp @@ -1192,7 +1184,7 @@ void QAbstractSpinBox::timerEvent(QTimerEvent *event) killTimer(d->spinClickThresholdTimerId); d->spinClickThresholdTimerId = -1; d->effectiveSpinRepeatRate = d->buttonState & Keyboard - ? getKeyboardAutoRepeatRate() + ? qApp->styleHints()->keyboardAutoRepeatRate() : d->spinClickTimerInterval; d->spinClickTimerId = startTimer(d->effectiveSpinRepeatRate); doStep = true; -- cgit v1.2.3