summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2013-03-21 16:21:25 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2013-03-21 16:21:25 -0500
commitf5b03149e8e68e510efe9842d85a058b42a51264 (patch)
tree49c476a64e7377ecf25a949a9116fc7bf89c4cf5 /src/widgets
parent1b0a52a0c1285bf6237aac3fbd99eaebeca5663a (diff)
downloadtqt3-f5b03149e8e68e510efe9842d85a058b42a51264.tar.gz
tqt3-f5b03149e8e68e510efe9842d85a058b42a51264.zip
Automated update from Qt3
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/ntqlineedit.h2
-rw-r--r--src/widgets/qlineedit.cpp46
2 files changed, 40 insertions, 8 deletions
diff --git a/src/widgets/ntqlineedit.h b/src/widgets/ntqlineedit.h
index 9a230560..f8aecede 100644
--- a/src/widgets/ntqlineedit.h
+++ b/src/widgets/ntqlineedit.h
@@ -94,7 +94,7 @@ public:
bool frame() const;
- enum EchoMode { Normal, NoEcho, Password };
+ enum EchoMode { Normal, NoEcho, Password, PasswordThreeStars };
EchoMode echoMode() const;
bool isReadOnly() const;
diff --git a/src/widgets/qlineedit.cpp b/src/widgets/qlineedit.cpp
index 3ba828c1..2cc64e01 100644
--- a/src/widgets/qlineedit.cpp
+++ b/src/widgets/qlineedit.cpp
@@ -63,6 +63,9 @@
#include "../kernel/qinternal_p.h"
#include "private/qtextlayout_p.h"
#include "ntqvaluevector.h"
+#if defined(Q_OS_LINUX)
+#include <sys/mman.h>
+#endif
#if defined(QT_ACCESSIBILITY_SUPPORT)
#include "ntqaccessible.h"
#endif
@@ -74,6 +77,11 @@
#define ACCEL_KEY(k) "\t" + TQString("Ctrl+" #k)
#endif
+#if defined(Q_OS_LINUX)
+#define LINUX_MEMLOCK_LIMIT_BYTES 16384
+#define LINUX_MEMLOCK_LIMIT_CHARACTERS LINUX_MEMLOCK_LIMIT_BYTES/sizeof(TQChar)
+#endif
+
#define innerMargin 1
struct TQLineEditPrivate : public TQt
@@ -451,6 +459,10 @@ TQLineEdit::TQLineEdit( const TQString& contents, const TQString &inputMask, TQW
TQLineEdit::~TQLineEdit()
{
+ if ((d->echoMode == NoEcho) || (d->echoMode == Password) || (d->echoMode == PasswordThreeStars)) {
+ d->text.fill(TQChar(0));
+ munlock(d->text.d->unicode, LINUX_MEMLOCK_LIMIT_BYTES);
+ }
delete [] d->maskData;
delete d;
}
@@ -500,11 +512,16 @@ void TQLineEdit::setText( const TQString& text)
TQString TQLineEdit::displayText() const
{
- if ( d->echoMode == NoEcho )
+ if ( d->echoMode == NoEcho ) {
return TQString::fromLatin1("");
+ }
TQString res = d->text;
- if ( d->echoMode == Password )
+ if ( d->echoMode == Password ) {
res.fill( passwordChar() );
+ }
+ else if ( d->echoMode == PasswordThreeStars ) {
+ res.fill( passwordChar(), res.length()*3 );
+ }
return ( res.isNull() ? TQString::fromLatin1("") : res );
}
@@ -598,11 +615,26 @@ TQLineEdit::EchoMode TQLineEdit::echoMode() const
void TQLineEdit::setEchoMode( EchoMode mode )
{
- if (mode == (EchoMode)d->echoMode)
+ if (mode == (EchoMode)d->echoMode) {
return;
+ }
+#if defined(Q_OS_LINUX)
+ if (((mode == NoEcho) || (mode == Password) || (mode == PasswordThreeStars)) && ((EchoMode)d->echoMode == Normal)) {
+ if ((uint)d->maxLength > (LINUX_MEMLOCK_LIMIT_CHARACTERS-1)) {
+ d->maxLength = LINUX_MEMLOCK_LIMIT_CHARACTERS-1;
+ }
+ d->text.reserve(LINUX_MEMLOCK_LIMIT_CHARACTERS);
+ mlock(d->text.d->unicode, LINUX_MEMLOCK_LIMIT_BYTES);
+ d->text.setSecurityUnPaged(true);
+ }
+ else {
+ d->text.setSecurityUnPaged(false);
+ munlock(d->text.d->unicode, LINUX_MEMLOCK_LIMIT_BYTES);
+ }
+#endif
d->echoMode = mode;
d->updateTextLayout();
- setInputMethodEnabled( mode == Normal );
+ setInputMethodEnabled( ( mode == Normal ) || ( mode == Password) );
update();
}
@@ -1688,12 +1720,12 @@ void TQLineEdit::keyPressEvent( TQKeyEvent * e )
case Key_Right:
case Key_Left:
if ( d->isRightToLeft() == (e->key() == Key_Right) ) {
- if ( echoMode() == Normal )
+ if (( echoMode() == Normal ) || ( echoMode() == Password ))
cursorWordBackward( e->state() & ShiftButton );
else
home( e->state() & ShiftButton );
} else {
- if ( echoMode() == Normal )
+ if (( echoMode() == Normal ) || ( echoMode() == Password ))
cursorWordForward( e->state() & ShiftButton );
else
end( e->state() & ShiftButton );
@@ -2069,7 +2101,7 @@ void TQLineEdit::drawContents( TQPainter *p )
// Asian users regard IM selection text as cursor on candidate
// selection phase of input method, so ordinary cursor should be
// invisible if IM selection text exists.
- if ( d->cursorVisible && !supressCursor && !d->hasIMSelection() ) {
+ if ( d->cursorVisible && !supressCursor && !d->hasIMSelection() && (d->echoMode != PasswordThreeStars) ) {
TQPoint from( topLeft.x() + cix, lineRect.top() );
TQPoint to = from + TQPoint( 0, lineRect.height() );
p->drawLine( from, to );