Platform style hints: Introduce keyboard repeat rate.

Change-Id: I556c2ecec7d5368122875a659af3ae7db88aa481
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
This commit is contained in:
Friedemann Kleint 2012-01-09 13:11:14 +01:00 committed by Qt by Nokia
parent 1f6f1de163
commit 7024ddba4b
6 changed files with 22 additions and 12 deletions

View 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:

View File

@ -106,7 +106,8 @@ public:
KeyboardInputInterval,
MouseDoubleClickInterval,
StartDragDistance,
StartDragTime
StartDragTime,
KeyboardAutoRepeatRate
};
virtual QVariant styleHint(StyleHint hint) const;

View 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();

View 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;

View 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:

View 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;