Platform style hints: Introduce keyboard repeat rate.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 9 Jan 2012 12:11:14 +0000 (13:11 +0100)
committerQt by Nokia <qt-info@nokia.com>
Tue, 10 Jan 2012 08:13:11 +0000 (09:13 +0100)
Change-Id: I556c2ecec7d5368122875a659af3ae7db88aa481
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
src/gui/kernel/qplatformintegration_qpa.cpp
src/gui/kernel/qplatformintegration_qpa.h
src/gui/kernel/qstylehints.cpp
src/gui/kernel/qstylehints.h
src/plugins/platforms/windows/qwindowsintegration.cpp
src/widgets/widgets/qabstractspinbox.cpp

index 39664f6..35cb9a1 100644 (file)
@@ -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:
index d6e3be8..f9a8a20 100644 (file)
@@ -106,7 +106,8 @@ public:
         KeyboardInputInterval,
         MouseDoubleClickInterval,
         StartDragDistance,
-        StartDragTime
+        StartDragTime,
+        KeyboardAutoRepeatRate
     };
 
     virtual QVariant styleHint(StyleHint hint) const;
index 1fa395c..4218477 100644 (file)
@@ -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();
index c61ae9a..d4e0415 100644 (file)
@@ -60,6 +60,7 @@ public:
     int startDragDistance() const;
     int startDragTime() const;
     int keyboardInputInterval() const;
+    int keyboardAutoRepeatRate() const;
     int cursorFlashTime() const;
 private:
     friend class QGuiApplication;
index 4633173..8bb8baf 100644 (file)
@@ -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<int>(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:
index 105dd3c..4f5a135 100644 (file)
@@ -48,6 +48,7 @@
 #ifndef QT_NO_SPINBOX
 
 #include <qapplication.h>
+#include <qstylehints.h>
 #include <qclipboard.h>
 #include <qdatetime.h>
 #include <qdatetimeedit.h>
@@ -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<int>(1000 / static_cast<int>(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;