From 405f1becac28ee324364df4e3df0446d951425e8 Mon Sep 17 00:00:00 2001 From: Risto Avila <risto.avila@digia.com> Date: Tue, 11 Mar 2014 12:04:52 +0200 Subject: [PATCH] Makes PasswordMaskDelay configurable through TextInput Adds a new property to TextInput which can be used to override QPlatformTheme::PasswordMaskDelay. The new property is TextInput.passwordMaskDelay and takes in delay (ms) which time character is shown before masking it. This is only when echoMode is set to TextInput.Password [ChangeLog][QtQuick][TextInput] Added passwordMaskDelay property Change-Id: I52812b883db11fdd21b25154887c51df8a44f69c Reviewed-by: J-P Nurmi <jpnurmi@digia.com> --- src/quick/items/qquickitemsmodule.cpp | 1 + src/quick/items/qquicktextinput.cpp | 38 ++++++++++++++++++++++----- src/quick/items/qquicktextinput_p.h | 6 +++++ src/quick/items/qquicktextinput_p_p.h | 2 ++ 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/quick/items/qquickitemsmodule.cpp b/src/quick/items/qquickitemsmodule.cpp index c9c8eeace3..0aed784b2e 100644 --- a/src/quick/items/qquickitemsmodule.cpp +++ b/src/quick/items/qquickitemsmodule.cpp @@ -190,6 +190,7 @@ static void qt_quickitems_defineModule(const char *uri, int major, int minor) qmlRegisterType<QQuickTextEdit,1>(uri,2,1,"TextEdit"); qmlRegisterType<QQuickTextInput>(uri,major,minor,"TextInput"); qmlRegisterType<QQuickTextInput,2>(uri,2,2,"TextInput"); + qmlRegisterType<QQuickTextInput,3>(uri,2,4,"TextInput"); qmlRegisterType<QQuickViewSection>(uri,major,minor,"ViewSection"); qmlRegisterType<QQuickItemLayer>(); diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index ad79f0eadf..26dda5db6b 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -2059,9 +2059,8 @@ void QQuickTextInput::insert(int position, const QString &text) { Q_D(QQuickTextInput); if (d->m_echoMode == QQuickTextInput::Password) { - int delay = qGuiApp->styleHints()->passwordMaskDelay(); - if (delay > 0) - d->m_passwordEchoTimer.start(delay, this); + if (d->m_passwordMaskDelay > 0) + d->m_passwordEchoTimer.start(d->m_passwordMaskDelay, this); } if (position < 0 || position > d->m_text.length()) return; @@ -2240,6 +2239,34 @@ void QQuickTextInput::setPasswordCharacter(const QString &str) emit passwordCharacterChanged(); } +/*! + \qmlproperty int QtQuick::TextInput::passwordMaskDelay + \since 5.4 + + Sets the delay before visible character is masked with password character, in milliseconds. + + The reset method will be called by assigning undefined. +*/ +int QQuickTextInput::passwordMaskDelay() const +{ + Q_D(const QQuickTextInput); + return d->m_passwordMaskDelay; +} + +void QQuickTextInput::setPasswordMaskDelay(int delay) +{ + Q_D(QQuickTextInput); + if (d->m_passwordMaskDelay != delay) { + d->m_passwordMaskDelay = delay; + emit passwordMaskDelayChanged(delay); + } +} + +void QQuickTextInput::resetPasswordMaskDelay() +{ + setPasswordMaskDelay(qGuiApp->styleHints()->passwordMaskDelay()); +} + /*! \qmlproperty string QtQuick::TextInput::displayText @@ -3478,9 +3505,8 @@ void QQuickTextInputPrivate::internalInsert(const QString &s) { Q_Q(QQuickTextInput); if (m_echoMode == QQuickTextInput::Password) { - int delay = qGuiApp->styleHints()->passwordMaskDelay(); - if (delay > 0) - m_passwordEchoTimer.start(delay, q); + if (m_passwordMaskDelay > 0) + m_passwordEchoTimer.start(m_passwordMaskDelay, q); } Q_ASSERT(!hasSelectedText()); // insert(), processInputMethodEvent() call removeSelectedText() first. if (m_maskData) { diff --git a/src/quick/items/qquicktextinput_p.h b/src/quick/items/qquicktextinput_p.h index 5f0250aaf1..5a88273543 100644 --- a/src/quick/items/qquicktextinput_p.h +++ b/src/quick/items/qquicktextinput_p.h @@ -94,6 +94,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickTextInput : public QQuickImplicitSizeItem Q_PROPERTY(EchoMode echoMode READ echoMode WRITE setEchoMode NOTIFY echoModeChanged) Q_PROPERTY(bool activeFocusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY activeFocusOnPressChanged) Q_PROPERTY(QString passwordCharacter READ passwordCharacter WRITE setPasswordCharacter NOTIFY passwordCharacterChanged) + Q_PROPERTY(int passwordMaskDelay READ passwordMaskDelay WRITE setPasswordMaskDelay RESET resetPasswordMaskDelay NOTIFY passwordMaskDelayChanged REVISION 3) Q_PROPERTY(QString displayText READ displayText NOTIFY displayTextChanged) Q_PROPERTY(bool autoScroll READ autoScroll WRITE setAutoScroll NOTIFY autoScrollChanged) Q_PROPERTY(bool selectByMouse READ selectByMouse WRITE setSelectByMouse NOTIFY selectByMouseChanged) @@ -227,6 +228,10 @@ public: QString passwordCharacter() const; void setPasswordCharacter(const QString &str); + int passwordMaskDelay() const; + void setPasswordMaskDelay(int delay); + void resetPasswordMaskDelay(); + QString displayText() const; QQmlComponent* cursorDelegate() const; @@ -300,6 +305,7 @@ Q_SIGNALS: void inputMaskChanged(const QString &inputMask); void echoModeChanged(EchoMode echoMode); void passwordCharacterChanged(); + Q_REVISION(3) void passwordMaskDelayChanged(int delay); void displayTextChanged(); void activeFocusOnPressChanged(bool activeFocusOnPress); void autoScrollChanged(bool autoScroll); diff --git a/src/quick/items/qquicktextinput_p_p.h b/src/quick/items/qquicktextinput_p_p.h index 21bd1bd6d7..2cf127608e 100644 --- a/src/quick/items/qquicktextinput_p_p.h +++ b/src/quick/items/qquicktextinput_p_p.h @@ -111,6 +111,7 @@ public: , mouseSelectionMode(QQuickTextInput::SelectCharacters) , m_layoutDirection(Qt::LayoutDirectionAuto) , m_passwordCharacter(qApp->styleHints()->passwordMaskCharacter()) + , m_passwordMaskDelay(qApp->styleHints()->passwordMaskDelay()) , focusOnPress(true) , cursorVisible(false) , cursorPending(false) @@ -250,6 +251,7 @@ public: QChar m_blank; QChar m_passwordCharacter; + int m_passwordMaskDelay; bool focusOnPress:1; bool cursorVisible:1; -- GitLab