author | sandman <sandman> | 2002-10-06 22:19:48 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-10-06 22:19:48 (UTC) |
commit | 685c08f1c48813f9d222446f0516b8e20635607e (patch) (side-by-side diff) | |
tree | 52792fd22ebaa26ee82ac500c0250d6ffea941f8 | |
parent | a60fbe6f441b906489984b0dbc239259adacdcbc (diff) | |
download | opie-685c08f1c48813f9d222446f0516b8e20635607e.zip opie-685c08f1c48813f9d222446f0516b8e20635607e.tar.gz opie-685c08f1c48813f9d222446f0516b8e20635607e.tar.bz2 |
- password line-edit now gets focus on user change
- the "OPIE - please wait" logo is displayed while the launcher is loading
-rw-r--r-- | core/opie-login/loginwindow.ui | 6 | ||||
-rw-r--r-- | core/opie-login/loginwindowimpl.cpp | 19 |
2 files changed, 25 insertions, 0 deletions
diff --git a/core/opie-login/loginwindow.ui b/core/opie-login/loginwindow.ui index edd0819..5a35c8d 100644 --- a/core/opie-login/loginwindow.ui +++ b/core/opie-login/loginwindow.ui @@ -384,29 +384,35 @@ <connection> <sender>ToolButton3</sender> <signal>toggled(bool)</signal> <receiver>LoginWindow</receiver> <slot>toggleEchoMode(bool)</slot> </connection> <connection> <sender>m_suspend</sender> <signal>clicked()</signal> <receiver>LoginWindow</receiver> <slot>suspend()</slot> </connection> <connection> <sender>m_password</sender> <signal>returnPressed()</signal> <receiver>m_login</receiver> <slot>animateClick()</slot> </connection> <connection> <sender>m_login</sender> <signal>clicked()</signal> <receiver>LoginWindow</receiver> <slot>login()</slot> </connection> + <connection> + <sender>m_user</sender> + <signal>activated(int)</signal> + <receiver>m_password</receiver> + <slot>setFocus()</slot> + </connection> <slot access="public">login()</slot> <slot access="public">suspend()</slot> <slot access="public">toggleEchoMode(bool)</slot> </connections> </UI> diff --git a/core/opie-login/loginwindowimpl.cpp b/core/opie-login/loginwindowimpl.cpp index 63baaa6..c59338f 100644 --- a/core/opie-login/loginwindowimpl.cpp +++ b/core/opie-login/loginwindowimpl.cpp @@ -1,36 +1,38 @@ #include <qapplication.h> #include <qpushbutton.h> #include <qlayout.h> #include <qframe.h> #include <qlineedit.h> #include <qtimer.h> #include <qcombobox.h> #include <qpixmap.h> #include <qlabel.h> #include <qpopupmenu.h> #include <qmessagebox.h> +#include <qimage.h> +#include <qpe/resource.h> #include <qpe/qcopenvelope_qws.h> #include <opie/odevice.h> #include <stdio.h> #include <pwd.h> #include <grp.h> #include <unistd.h> #include <stdlib.h> #include <signal.h> #ifdef USEPAM extern "C" { #include <security/pam_appl.h> } #else #include <crypt.h> #include <shadow.h> #endif #include "loginwindowimpl.h" #include "inputmethods.h" @@ -67,48 +69,49 @@ LoginWindowImpl::LoginWindowImpl ( ) : LoginWindow ( 0, "LOGIN-WINDOW", WStyle_C LoginWindowImpl::~LoginWindowImpl ( ) { } void LoginWindowImpl::keyPressEvent ( QKeyEvent *e ) { switch ( e-> key ( )) { case HardKey_Suspend: suspend ( ); break; case HardKey_Backlight: backlight ( ); break; default: e-> ignore ( ); break; } LoginWindow::keyPressEvent ( e ); } void LoginWindowImpl::toggleEchoMode ( bool t ) { m_password-> setEchoMode ( t ? QLineEdit::Normal : QLineEdit::Password ); } + QStringList LoginWindowImpl::getAllUsers ( ) { struct passwd *pwd; QStringList sl; while (( pwd = ::getpwent ( ))) { if (( pwd-> pw_uid == 0 ) || ( pwd-> pw_uid >= 500 && pwd-> pw_uid < 65534 )) sl << QString ( pwd-> pw_name ); } ::endpwent ( ); return sl; } void LoginWindowImpl::showIM ( ) { m_input-> showInputMethod ( ); } void LoginWindowImpl::restart ( ) { qApp-> quit ( ); } @@ -279,48 +282,64 @@ bool LoginWindowImpl::changeIdentity ( const char *user ) fail |= ( setenv ( "PATH", ( pw-> pw_uid ? DEFAULT_LOGIN_PATH : DEFAULT_ROOT_LOGIN_PATH ), 1 )); return !fail; } void LoginWindowImpl::login ( ) { const char *user = ::strdup ( m_user-> currentText ( ). local8Bit ( )); const char *pass = ::strdup ( m_password-> text ( ). local8Bit ( )); bool ok; if ( !user || !user [0] ) return; if ( !pass ) pass = ""; #if defined( USEPAM ) ok = pwcheck_PAM ( user, pass ); #else ok = pwcheck_Unix ( user, pass ); #endif if ( ok ) { if ( changeIdentity ( user )) { + // Draw a big wait icon, the image can be altered in later revisions + QWidget *d = QApplication::desktop ( ); + m_input-> hideInputMethod ( ); + + QImage img = Resource::loadImage( "launcher/new_wait" ); + QPixmap pix; + pix. convertFromImage ( img ); + QLabel *w = new QLabel ( 0, "wait hack!", WStyle_Customize | WStyle_NoBorder | WStyle_Tool ); + w-> setPixmap ( pix ); + w-> setAlignment ( AlignCenter ); + w-> showMaximized ( ); + qApp-> processEvents ( ); + char *opie = ::getenv ( "OPIEDIR" ); char *arg = new char [::strlen ( opie ) + 8 + 1]; ::strcpy ( arg, opie ); ::strcat ( arg, "/bin/qpe" ); // start qpe via a login shell ::execl ( "/bin/sh", "-sh", "-c", arg, 0 ); + w-> hide ( ); + delete w; + QMessageBox::critical ( this, tr( "Failure" ), tr( "Could not start OPIE\n(%1)." ). arg ( arg )); delete [] arg; restart ( ); } else { QMessageBox::critical ( this, tr( "Failure" ), tr( "Could not switch to new user identity" )); restart ( ); } } else { QMessageBox::warning ( this, tr( "Wrong password" ), tr( "The given password is incorrect." )); m_password-> clear ( ); } } |