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:
parent
93cd08bfcc
commit
2d107c20b9
@ -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();
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -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;
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user