summaryrefslogtreecommitdiff
path: root/core/opie-login/loginwindowimpl.cpp
Side-by-side diff
Diffstat (limited to 'core/opie-login/loginwindowimpl.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/opie-login/loginwindowimpl.cpp19
1 files changed, 19 insertions, 0 deletions
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 ( );
}
}