Fix settable style hints.

Introduce QStyleHintsPrivate and introduce internal
setters called by QApplication.

Task-number: QTBUG-33991
Change-Id: Id61f8b1e2b5c9cfd7b4713aaded66e93e6f63719
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
This commit is contained in:
Friedemann Kleint 2013-10-15 14:12:34 +02:00 committed by The Qt Project
parent 93cd08bfcc
commit 2d107c20b9
4 changed files with 130 additions and 13 deletions

View File

@ -62,6 +62,25 @@ static inline QVariant themeableHint(QPlatformTheme::ThemeHint th,
return QGuiApplicationPrivate::platformIntegration()->styleHint(ih);
}
class QStyleHintsPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QStyleHints)
public:
inline QStyleHintsPrivate()
: m_mouseDoubleClickInterval(-1)
, m_startDragDistance(-1)
, m_startDragTime(-1)
, m_keyboardInputInterval(-1)
, m_cursorFlashTime(-1)
{}
int m_mouseDoubleClickInterval;
int m_startDragDistance;
int m_startDragTime;
int m_keyboardInputInterval;
int m_cursorFlashTime;
};
/*!
\class QStyleHints
\since 5.0
@ -80,17 +99,44 @@ static inline QVariant themeableHint(QPlatformTheme::ThemeHint th,
\sa QGuiApplication::styleHints(), QPlatformTheme
*/
QStyleHints::QStyleHints()
: QObject()
: QObject(*new QStyleHintsPrivate(), 0)
{
}
/*!
Sets the \a mouseDoubleClickInterval.
\internal
\sa mouseDoubleClickInterval()
\since 5.3
*/
void QStyleHints::setMouseDoubleClickInterval(int mouseDoubleClickInterval)
{
Q_D(QStyleHints);
d->m_mouseDoubleClickInterval = mouseDoubleClickInterval;
}
/*!
Returns the time limit in milliseconds that distinguishes a double click
from two consecutive mouse clicks.
*/
int QStyleHints::mouseDoubleClickInterval() const
{
return themeableHint(QPlatformTheme::MouseDoubleClickInterval, QPlatformIntegration::MouseDoubleClickInterval).toInt();
Q_D(const QStyleHints);
return d->m_mouseDoubleClickInterval >= 0 ?
d->m_mouseDoubleClickInterval :
themeableHint(QPlatformTheme::MouseDoubleClickInterval, QPlatformIntegration::MouseDoubleClickInterval).toInt();
}
/*!
Sets the \a startDragDistance.
\internal
\sa startDragDistance()
\since 5.3
*/
void QStyleHints::setStartDragDistance(int startDragDistance)
{
Q_D(QStyleHints);
d->m_startDragDistance = startDragDistance;
}
/*!
@ -112,7 +158,22 @@ int QStyleHints::mouseDoubleClickInterval() const
*/
int QStyleHints::startDragDistance() const
{
return themeableHint(QPlatformTheme::StartDragDistance, QPlatformIntegration::StartDragDistance).toInt();
Q_D(const QStyleHints);
return d->m_startDragDistance >= 0 ?
d->m_startDragDistance :
themeableHint(QPlatformTheme::StartDragDistance, QPlatformIntegration::StartDragDistance).toInt();
}
/*!
Sets the \a startDragDragTime.
\internal
\sa startDragTime()
\since 5.3
*/
void QStyleHints::setStartDragTime(int startDragTime)
{
Q_D(QStyleHints);
d->m_startDragTime = startDragTime;
}
/*!
@ -127,7 +188,10 @@ int QStyleHints::startDragDistance() const
*/
int QStyleHints::startDragTime() const
{
return themeableHint(QPlatformTheme::StartDragTime, QPlatformIntegration::StartDragTime).toInt();
Q_D(const QStyleHints);
return d->m_startDragTime >= 0 ?
d->m_startDragTime :
themeableHint(QPlatformTheme::StartDragTime, QPlatformIntegration::StartDragTime).toInt();
}
/*!
@ -142,13 +206,28 @@ int QStyleHints::startDragVelocity() const
return themeableHint(QPlatformTheme::StartDragVelocity, QPlatformIntegration::StartDragVelocity).toInt();
}
/*!
Sets the \a keyboardInputInterval.
\internal
\sa keyboardInputInterval()
\since 5.3
*/
void QStyleHints::setKeyboardInputInterval(int keyboardInputInterval)
{
Q_D(QStyleHints);
d->m_keyboardInputInterval = keyboardInputInterval;
}
/*!
Returns the time limit, in milliseconds, that distinguishes a key press
from two consecutive key presses.
*/
int QStyleHints::keyboardInputInterval() const
{
return themeableHint(QPlatformTheme::KeyboardInputInterval, QPlatformIntegration::KeyboardInputInterval).toInt();
Q_D(const QStyleHints);
return d->m_keyboardInputInterval >= 0 ?
d->m_keyboardInputInterval :
themeableHint(QPlatformTheme::KeyboardInputInterval, QPlatformIntegration::KeyboardInputInterval).toInt();
}
/*!
@ -160,6 +239,18 @@ int QStyleHints::keyboardAutoRepeatRate() const
return themeableHint(QPlatformTheme::KeyboardAutoRepeatRate, QPlatformIntegration::KeyboardAutoRepeatRate).toInt();
}
/*!
Sets the \a cursorFlashTime.
\internal
\sa cursorFlashTime()
\since 5.3
*/
void QStyleHints::setCursorFlashTime(int cursorFlashTime)
{
Q_D(QStyleHints);
d->m_cursorFlashTime = cursorFlashTime;
}
/*!
Returns the text cursor's flash (blink) time in milliseconds.
@ -169,7 +260,10 @@ int QStyleHints::keyboardAutoRepeatRate() const
*/
int QStyleHints::cursorFlashTime() const
{
return themeableHint(QPlatformTheme::CursorFlashTime, QPlatformIntegration::CursorFlashTime).toInt();
Q_D(const QStyleHints);
return d->m_cursorFlashTime >= 0 ?
d->m_cursorFlashTime :
themeableHint(QPlatformTheme::CursorFlashTime, QPlatformIntegration::CursorFlashTime).toInt();
}
/*!

View File

@ -48,17 +48,24 @@ QT_BEGIN_NAMESPACE
class QPlatformIntegration;
class QStyleHintsPrivate;
class Q_GUI_EXPORT QStyleHints : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QStyleHints)
public:
void setMouseDoubleClickInterval(int mouseDoubleClickInterval);
int mouseDoubleClickInterval() const;
void setStartDragDistance(int startDragDistance);
int startDragDistance() const;
void setStartDragTime(int startDragTime);
int startDragTime() const;
int startDragVelocity() const;
void setKeyboardInputInterval(int keyboardInputInterval);
int keyboardInputInterval() const;
int keyboardAutoRepeatRate() const;
void setCursorFlashTime(int cursorFlashTime);
int cursorFlashTime() const;
bool showIsFullScreen() const;
int passwordMaskDelay() const;

View File

@ -2599,7 +2599,7 @@ QDesktopWidget *QApplication::desktop()
void QApplication::setStartDragTime(int ms)
{
Q_UNUSED(ms)
QGuiApplication::styleHints()->setStartDragTime(ms);
}
/*!
@ -2632,7 +2632,7 @@ int QApplication::startDragTime()
void QApplication::setStartDragDistance(int l)
{
Q_UNUSED(l);
QGuiApplication::styleHints()->setStartDragDistance(l);
}
/*!
@ -3599,7 +3599,7 @@ bool QApplication::keypadNavigationEnabled()
*/
void QApplication::setCursorFlashTime(int msecs)
{
Q_UNUSED(msecs);
QGuiApplication::styleHints()->setCursorFlashTime(msecs);
}
int QApplication::cursorFlashTime()
@ -3614,12 +3614,10 @@ int QApplication::cursorFlashTime()
The default value on X11 is 400 milliseconds. On Windows and Mac OS, the
operating system's value is used.
Setting the interval is not supported anymore in Qt 5.
*/
void QApplication::setDoubleClickInterval(int ms)
{
Q_UNUSED(ms);
QGuiApplication::styleHints()->setMouseDoubleClickInterval(ms);
}
int QApplication::doubleClickInterval()
@ -3647,7 +3645,7 @@ int QApplication::doubleClickInterval()
*/
void QApplication::setKeyboardInputInterval(int ms)
{
Q_UNUSED(ms);
QGuiApplication::styleHints()->setKeyboardInputInterval(ms);
}
int QApplication::keyboardInputInterval()

View File

@ -178,6 +178,8 @@ private slots:
void globalStaticObjectDestruction(); // run this last
void abortQuitOnShow();
void settableStyleHints(); // Needs to run last as it changes style hints.
};
class EventSpy : public QObject
@ -2247,6 +2249,22 @@ void tst_QApplication::abortQuitOnShow()
QCOMPARE(app.exec(), 1);
}
void tst_QApplication::settableStyleHints()
{
int argc = 0;
QApplication app(argc, 0);
QApplication::setCursorFlashTime(437);
QCOMPARE(QApplication::cursorFlashTime(), 437);
QApplication::setDoubleClickInterval(128);
QCOMPARE(QApplication::doubleClickInterval(), 128);
QApplication::setStartDragDistance(122000);
QCOMPARE(QApplication::startDragDistance(), 122000);
QApplication::setStartDragTime(834);
QCOMPARE(QApplication::startDragTime(), 834);
QApplication::setKeyboardInputInterval(309);
QCOMPARE(QApplication::keyboardInputInterval(), 309);
}
/*
This test is meant to ensure that certain objects (public & commonly used)
can safely be used in a Q_GLOBAL_STATIC such that their destructors are