-rw-r--r-- | core/opie-login/loginwindowimpl.cpp | 3 | ||||
-rw-r--r-- | core/opie-login/main.cpp | 13 |
2 files changed, 8 insertions, 8 deletions
diff --git a/core/opie-login/loginwindowimpl.cpp b/core/opie-login/loginwindowimpl.cpp index f24ebb3..63baaa6 100644 --- a/core/opie-login/loginwindowimpl.cpp +++ b/core/opie-login/loginwindowimpl.cpp @@ -1,164 +1,167 @@ #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 <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" +using namespace Opie; + + LoginWindowImpl::LoginWindowImpl ( ) : LoginWindow ( 0, "LOGIN-WINDOW", WStyle_Customize | WStyle_NoBorder | WDestructiveClose ) { QPopupMenu *pop = new QPopupMenu ( this ); pop-> insertItem ( tr( "Restart" ), this, SLOT( restart ( ))); pop-> insertItem ( tr( "Quit" ), this, SLOT( quit ( ))); m_menu-> setPopup ( pop ); QHBoxLayout *lay = new QHBoxLayout ( m_taskbar, 4, 4 ); m_input = new InputMethods ( m_taskbar ); lay-> addWidget ( m_input ); lay-> addStretch ( 10 ); setActiveWindow ( ); m_password-> setFocus ( ); m_user-> insertStringList ( getAllUsers ( )); QTimer::singleShot ( 0, this, SLOT( showIM ( ))); QString opiedir = ::getenv ( "OPIEDIR" ); QPixmap bgpix ( opiedir + "/pics/launcher/opie-background.jpg" ); if ( !bgpix. isNull ( )) setBackgroundPixmap ( bgpix ); m_caption-> setText ( m_caption-> text ( ) + tr( "<center>%1 %2</center>" ). arg ( ODevice::inst ( )-> systemString ( )). arg ( ODevice::inst ( )-> systemVersionString ( ))); } 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 ( ); } void LoginWindowImpl::quit ( ) { qApp-> quit ( ); ::kill ( ::getppid ( ), SIGUSR1 ); } void LoginWindowImpl::suspend ( ) { ODevice::inst ( )-> suspend ( ); QCopEnvelope e("QPE/System", "setBacklight(int)"); e << -3; // Force on } void LoginWindowImpl::backlight ( ) { QCopEnvelope e("QPE/System", "setBacklight(int)"); e << -2; // toggle } #ifdef USEPAM static const char *_PAM_SERVICE = "xdm"; static const char *PAM_password; typedef const struct pam_message pam_message_type; static int PAM_conv( int, pam_message_type **, struct pam_response **, void * ); static struct pam_conv PAM_conversation = { &PAM_conv, NULL }; //---------------------------------------------------------------------------- static char *COPY_STRING( const char * s ) { return (s) ? strdup(s) : (char *)NULL; } #define GET_MEM if (reply) realloc(reply, size);\ else reply = (struct pam_response *)malloc(size); \ if (!reply) return PAM_CONV_ERR; \ size += sizeof(struct pam_response) static int PAM_conv( int num_msg, pam_message_type **msg, struct pam_response **resp, void *) { int count = 0, replies = 0; struct pam_response *reply = NULL; int size = sizeof(struct pam_response); diff --git a/core/opie-login/main.cpp b/core/opie-login/main.cpp index 718009a..df9451d 100644 --- a/core/opie-login/main.cpp +++ b/core/opie-login/main.cpp @@ -1,224 +1,221 @@ #include <sys/time.h> #include <sys/resource.h> #include <unistd.h> #include <syslog.h> #include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <qpe/qpeapplication.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/qpestyle.h> #include <qpe/power.h> #include <opie/odevice.h> #include <qwindowsystem_qws.h> #include <qfile.h> #include "loginwindowimpl.h" #include "calibrate.h" +using namespace Opie; + int login_main ( int argc, char **argv ); void sigusr1 ( int sig ); void exit_closelog ( ); int main ( int argc, char **argv ) { if ( ::geteuid ( ) != 0 ) { ::fprintf ( stderr, "%s can only be executed by root. (or chmod +s)", argv [0] ); return 1; } // struct rlimit rl; // ::getrlimit ( RLIMIT_NOFILE, &rl ); // for ( unsigned int i = 0; i < rl. rlim_cur; i++ ) // ::close ( i ); ::setpgid ( 0, 0 ); ::setsid ( ); ::signal ( SIGUSR1, sigusr1 ); ::openlog ( "opie-login", LOG_CONS, LOG_AUTHPRIV ); ::atexit ( exit_closelog ); while ( true ) { pid_t child = ::fork ( ); if ( child < 0 ) { ::syslog ( LOG_ERR, "Could not fork process" ); break; } else if ( child > 0 ) { int status = 0; while ( ::waitpid ( child, &status, 0 ) < 0 ) { } } else { ::exit ( login_main ( argc, argv )); } } return 0; } void sigusr1 ( int /*sig*/ ) { ::exit ( 0 ); } void exit_closelog ( ) { ::closelog ( ); } class LoginScreenSaver : public QWSScreenSaver { public: LoginScreenSaver ( ) { m_lcd_status = true; m_backlight_bright = -1; m_backlight_forcedoff = false; // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off) - ODevice::inst ( ) -> setDisplayStatus ( true ); + ODevice::inst ( )-> setDisplayStatus ( true ); } void restore() { if ( !m_lcd_status ) // We must have turned it off ODevice::inst ( ) -> setDisplayStatus ( true ); - setBacklight ( -1 ); + setBacklight ( -3 ); } bool save( int level ) { switch ( level ) { case 0: if ( backlight() > 1 ) setBacklight( 1 ); // lowest non-off return true; break; case 1: setBacklight( 0 ); // off return true; break; case 2: // We're going to suspend the whole machine if ( PowerStatusManager::readStatus().acStatus() != PowerStatus::Online ) { QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); return true; } break; } return false; } private: public: void setIntervals( int i1 = 30, int i2 = 20, int i3 = 60 ) { int v [4]; v [ 0 ] = QMAX( 1000 * i1, 100 ); v [ 1 ] = QMAX( 1000 * i2, 100 ); v [ 2 ] = QMAX( 1000 * i3, 100 ); v [ 3 ] = 0; if ( !i1 && !i2 && !i3 ) QWSServer::setScreenSaverInterval ( 0 ); else QWSServer::setScreenSaverIntervals ( v ); } int backlight ( ) { if ( m_backlight_bright == -1 ) m_backlight_bright = 255; return m_backlight_bright; } void setBacklight ( int bright ) { if ( bright == -3 ) { // Forced on m_backlight_forcedoff = false; bright = -1; } if ( m_backlight_forcedoff && bright != -2 ) return ; if ( bright == -2 ) { // Toggle between off and on bright = m_backlight_bright ? 0 : -1; m_backlight_forcedoff = !bright; } m_backlight_bright = bright; bright = backlight ( ); ODevice::inst ( ) -> setDisplayBrightness ( bright ); m_backlight_bright = bright; } private: bool m_lcd_status; int m_backlight_bright; bool m_backlight_forcedoff; }; int login_main ( int argc, char **argv ) { QWSServer::setDesktopBackground( QImage() ); QPEApplication app ( argc, argv, QApplication::GuiServer ); app. setFont ( QFont ( "Helvetica", 10 )); app. setStyle ( new QPEStyle ( )); ODevice::inst ( )-> setSoftSuspend ( true ); - { - QCopEnvelope e("QPE/System", "setBacklight(int)" ); - e << -3; // Forced on - } - #if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) if ( !QFile::exists ( "/etc/pointercal" )) { // Make sure calibration widget starts on top. Calibrate *cal = new Calibrate; cal-> exec ( ); delete cal; } #endif - LoginScreenSaver *saver = new LoginScreenSaver; saver-> setIntervals ( ); QWSServer::setScreenSaver ( saver ); + saver-> restore ( ); LoginWindowImpl *lw = new LoginWindowImpl ( ); app. setMainWidget ( lw ); lw-> setGeometry ( 0, 0, app. desktop ( )-> width ( ), app. desktop ( )-> height ( )); lw-> show ( ); int rc = app. exec ( ); ODevice::inst ( )-> setSoftSuspend ( false ); return rc; } |