-rw-r--r-- | core/opie-login/.cvsignore | 2 | ||||
-rw-r--r-- | core/opie-login/loginwindowimpl.cpp | 14 | ||||
-rw-r--r-- | core/opie-login/loginwindowimpl.h | 5 | ||||
-rw-r--r-- | core/opie-login/opie-login.pro | 8 | ||||
-rw-r--r-- | core/opie-login/passworddialog.ui | 225 | ||||
-rw-r--r-- | core/opie-login/passworddialogimpl.cpp | 232 | ||||
-rw-r--r-- | core/opie-login/passworddialogimpl.h | 65 |
7 files changed, 545 insertions, 6 deletions
diff --git a/core/opie-login/.cvsignore b/core/opie-login/.cvsignore index 0c3cc62..b80bdc4 100644 --- a/core/opie-login/.cvsignore +++ b/core/opie-login/.cvsignore | |||
@@ -1,7 +1,9 @@ | |||
1 | *.moc | 1 | *.moc |
2 | Makefile* | 2 | Makefile* |
3 | loginwindow.cpp | 3 | loginwindow.cpp |
4 | loginwindow.h | 4 | loginwindow.h |
5 | passworddialog.h | ||
6 | passworddialog.cpp | ||
5 | moc_* | 7 | moc_* |
6 | .moc | 8 | .moc |
7 | .obj | 9 | .obj |
diff --git a/core/opie-login/loginwindowimpl.cpp b/core/opie-login/loginwindowimpl.cpp index 32f98f3..73c2cbe 100644 --- a/core/opie-login/loginwindowimpl.cpp +++ b/core/opie-login/loginwindowimpl.cpp | |||
@@ -2,149 +2,155 @@ | |||
2 | � � � � � � � �=. This file is part of the OPIE Project | 2 | � � � � � � � �=. This file is part of the OPIE Project |
3 | � � � � � � �.=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> | 3 | � � � � � � �.=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> |
4 | � � � � � �.>+-= | 4 | � � � � � �.>+-= |
5 | �_;:, � � .> � �:=|. This file is free software; you can | 5 | �_;:, � � .> � �:=|. This file is free software; you can |
6 | .> <`_, � > �. � <= redistribute it and/or modify it under | 6 | .> <`_, � > �. � <= redistribute it and/or modify it under |
7 | :`=1 )Y*s>-.-- � : the terms of the GNU General Public | 7 | :`=1 )Y*s>-.-- � : the terms of the GNU General Public |
8 | .="- .-=="i, � � .._ License as published by the Free Software | 8 | .="- .-=="i, � � .._ License as published by the Free Software |
9 | �- . � .-<_> � � .<> Foundation; either version 2 of the License, | 9 | �- . � .-<_> � � .<> Foundation; either version 2 of the License, |
10 | � � �._= =} � � � : or (at your option) any later version. | 10 | � � �._= =} � � � : or (at your option) any later version. |
11 | � � .%`+i> � � � _;_. | 11 | � � .%`+i> � � � _;_. |
12 | � � .i_,=:_. � � �-<s. This file is distributed in the hope that | 12 | � � .i_,=:_. � � �-<s. This file is distributed in the hope that |
13 | � � �+ �. �-:. � � � = it will be useful, but WITHOUT ANY WARRANTY; | 13 | � � �+ �. �-:. � � � = it will be useful, but WITHOUT ANY WARRANTY; |
14 | � � : .. � �.:, � � . . . without even the implied warranty of | 14 | � � : .. � �.:, � � . . . without even the implied warranty of |
15 | � � =_ � � � �+ � � =;=|` MERCHANTABILITY or FITNESS FOR A | 15 | � � =_ � � � �+ � � =;=|` MERCHANTABILITY or FITNESS FOR A |
16 | � _.=:. � � � : � �:=>`: PARTICULAR PURPOSE. See the GNU General | 16 | � _.=:. � � � : � �:=>`: PARTICULAR PURPOSE. See the GNU General |
17 | ..}^=.= � � � = � � � ; Public License for more details. | 17 | ..}^=.= � � � = � � � ; Public License for more details. |
18 | ++= � -. � � .` � � .: | 18 | ++= � -. � � .` � � .: |
19 | �: � � = �...= . :.=- You should have received a copy of the GNU | 19 | �: � � = �...= . :.=- You should have received a copy of the GNU |
20 | �-. � .:....=;==+<; General Public License along with this file; | 20 | �-. � .:....=;==+<; General Public License along with this file; |
21 | � -_. . . � )=. �= see the file COPYING. If not, write to the | 21 | � -_. . . � )=. �= see the file COPYING. If not, write to the |
22 | � � -- � � � �:-=` Free Software Foundation, Inc., | 22 | � � -- � � � �:-=` Free Software Foundation, Inc., |
23 | 59 Temple Place - Suite 330, | 23 | 59 Temple Place - Suite 330, |
24 | Boston, MA 02111-1307, USA. | 24 | Boston, MA 02111-1307, USA. |
25 | 25 | ||
26 | */ | 26 | */ |
27 | #include <qpe/version.h> | 27 | #include <qpe/version.h> |
28 | #include <qpushbutton.h> | 28 | #include <qpushbutton.h> |
29 | #include <qlayout.h> | 29 | #include <qlayout.h> |
30 | #include <qlineedit.h> | 30 | #include <qlineedit.h> |
31 | #include <qtimer.h> | 31 | #include <qtimer.h> |
32 | #include <qcombobox.h> | 32 | #include <qcombobox.h> |
33 | #include <qlabel.h> | 33 | #include <qlabel.h> |
34 | #include <qpopupmenu.h> | 34 | #include <qpopupmenu.h> |
35 | #include <qmessagebox.h> | 35 | #include <qmessagebox.h> |
36 | #if QT_VERSION < 300 | 36 | #if QT_VERSION < 300 |
37 | #include <qgfx_qws.h> | 37 | #include <qgfx_qws.h> |
38 | #endif | 38 | #endif |
39 | #include <qwindowsystem_qws.h> | 39 | #include <qwindowsystem_qws.h> |
40 | 40 | ||
41 | #include <qpe/resource.h> | 41 | #include <qpe/resource.h> |
42 | #include <qpe/qcopenvelope_qws.h> | 42 | #include <qpe/qcopenvelope_qws.h> |
43 | #include <qpe/config.h> | 43 | #include <qpe/config.h> |
44 | 44 | ||
45 | #include <opie2/odevice.h> | 45 | #include <opie2/odevice.h> |
46 | 46 | ||
47 | #include <stdio.h> | 47 | #include <stdio.h> |
48 | #include <stdlib.h> | 48 | #include <stdlib.h> |
49 | 49 | ||
50 | #include "passworddialogimpl.h" | ||
50 | #include "loginwindowimpl.h" | 51 | #include "loginwindowimpl.h" |
51 | #include "loginapplication.h" | 52 | #include "loginapplication.h" |
52 | #include "inputmethods.h" | 53 | #include "inputmethods.h" |
53 | 54 | ||
54 | using namespace Opie::Core; | 55 | using namespace Opie::Core; |
55 | 56 | ||
56 | 57 | ||
57 | LoginWindowImpl::LoginWindowImpl ( ) : LoginWindow ( 0, "LOGIN-WINDOW", WStyle_Customize | WStyle_NoBorder | WDestructiveClose ) | 58 | LoginWindowImpl::LoginWindowImpl ( ) : LoginWindow ( 0, "LOGIN-WINDOW", WStyle_Customize | WStyle_NoBorder | WDestructiveClose ) |
58 | { | 59 | { |
59 | QPopupMenu *pop = new QPopupMenu ( this ); | 60 | QPopupMenu *pop = new QPopupMenu ( this ); |
60 | pop-> insertItem ( tr( "Restart" ), this, SLOT( restart())); | 61 | pop-> insertItem ( tr( "Restart" ), this, SLOT( restart())); |
61 | pop-> insertItem ( tr( "Quit" ), this, SLOT( quit())); | 62 | pop-> insertItem ( tr( "Quit" ), this, SLOT( quit())); |
62 | m_menu-> setPopup ( pop ); | 63 | m_menu-> setPopup ( pop ); |
63 | 64 | ||
64 | QCopChannel *channel = new QCopChannel ( "QPE/TaskBar", this ); | 65 | QCopChannel *channel = new QCopChannel ( "QPE/TaskBar", this ); |
65 | connect ( channel, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( receive(const QCString&,const QByteArray&))); | 66 | connect ( channel, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( receive(const QCString&,const QByteArray&))); |
66 | 67 | ||
67 | QHBoxLayout *lay = new QHBoxLayout ( m_taskbar, 4, 4 ); | 68 | QHBoxLayout *lay = new QHBoxLayout ( m_taskbar, 4, 4 ); |
68 | m_input = new InputMethods ( m_taskbar ); | 69 | m_input = new InputMethods ( m_taskbar ); |
69 | connect ( m_input, SIGNAL( inputToggled(bool)), this, SLOT( calcMaxWindowRect())); | 70 | connect ( m_input, SIGNAL( inputToggled(bool)), this, SLOT( calcMaxWindowRect())); |
70 | lay-> addWidget ( m_input ); | 71 | lay-> addWidget ( m_input ); |
71 | lay-> addStretch ( 10 ); | 72 | lay-> addStretch ( 10 ); |
72 | 73 | ||
73 | setActiveWindow ( ); | 74 | setActiveWindow ( ); |
74 | m_password-> setFocus ( ); | 75 | m_password-> setFocus ( ); |
75 | 76 | ||
76 | m_user-> insertStringList ( lApp-> allUsers ( )); | 77 | m_user-> insertStringList ( lApp-> allUsers ( )); |
77 | 78 | ||
78 | //there is no point in displaying the IM for a zaurus | 79 | //there is no point in displaying the IM for a zaurus |
79 | if (ODevice::inst ( )-> series ( ) != Model_Zaurus){ | 80 | if (ODevice::inst ( )-> series ( ) != Model_Zaurus){ |
80 | QTimer::singleShot ( 0, this, SLOT( showIM())); | 81 | QTimer::singleShot ( 0, this, SLOT( showIM())); |
81 | } | 82 | } |
82 | 83 | ||
83 | QString opiedir = ::getenv ( "OPIEDIR" ); | 84 | QString opiedir = ::getenv ( "OPIEDIR" ); |
84 | QPixmap bgpix ( opiedir + "/pics/launcher/opie-background.jpg" ); | 85 | QPixmap bgpix ( opiedir + "/pics/launcher/opie-background.jpg" ); |
85 | 86 | ||
86 | if ( !bgpix. isNull ( )) { | 87 | if ( !bgpix. isNull ( )) { |
87 | setBackgroundPixmap ( bgpix ); | 88 | setBackgroundPixmap ( bgpix ); |
88 | m_caption-> setBackgroundPixmap ( bgpix); | 89 | m_caption-> setBackgroundPixmap ( bgpix); |
89 | TextLabel1-> setBackgroundPixmap ( bgpix); | 90 | TextLabel1-> setBackgroundPixmap ( bgpix); |
90 | TextLabel2-> setBackgroundPixmap ( bgpix); | 91 | TextLabel2-> setBackgroundPixmap ( bgpix); |
91 | } | 92 | } |
92 | 93 | ||
93 | m_caption-> setText ( tr("<center>Welcome to OPIE %1</center><center>& %2 %3</center>"). arg(QPE_VERSION). arg ( ODevice::inst ( )-> systemString ( )). arg ( ODevice::inst ( )-> systemVersionString ( ))); | 94 | //m_caption-> setText ( tr("<center>Welcome to OPIE %1</center><center>& %2 %3</center>"). arg(QPE_VERSION). arg ( ODevice::inst ( )-> systemString ( )). arg ( ODevice::inst ( )-> systemVersionString ( ))); |
94 | 95 | ||
95 | Config cfg ( "opie-login" ); | 96 | Config cfg ( "opie-login" ); |
96 | cfg. setGroup ( "General" ); | 97 | cfg. setGroup ( "General" ); |
97 | QString last = cfg. readEntry ( "LastLogin" ); | 98 | QString last = cfg. readEntry ( "LastLogin" ); |
98 | 99 | ||
99 | if ( !last. isEmpty ( )) | 100 | if ( !last. isEmpty ( )) |
100 | m_user-> setEditText ( last ); | 101 | m_user-> setEditText ( last ); |
101 | 102 | ||
102 | calcMaxWindowRect ( ); | 103 | calcMaxWindowRect ( ); |
104 | |||
105 | if ( PasswordDialogImpl::needDialog() ) | ||
106 | QTimer::singleShot(10, this, SLOT(showPasswordDialog()) ); | ||
107 | |||
108 | |||
103 | } | 109 | } |
104 | 110 | ||
105 | LoginWindowImpl::~LoginWindowImpl ( ) | 111 | LoginWindowImpl::~LoginWindowImpl ( ) |
106 | { | 112 | { |
107 | } | 113 | } |
108 | 114 | ||
109 | 115 | ||
110 | void LoginWindowImpl::receive ( const QCString &msg, const QByteArray &data ) | 116 | void LoginWindowImpl::receive ( const QCString &msg, const QByteArray &data ) |
111 | { | 117 | { |
112 | QDataStream stream ( data, IO_ReadOnly ); | 118 | QDataStream stream ( data, IO_ReadOnly ); |
113 | 119 | ||
114 | if ( msg == "hideInputMethod()" ) | 120 | if ( msg == "hideInputMethod()" ) |
115 | m_input-> hideInputMethod ( ); | 121 | m_input-> hideInputMethod ( ); |
116 | else if ( msg == "showInputMethod()" ) | 122 | else if ( msg == "showInputMethod()" ) |
117 | m_input-> showInputMethod ( ); | 123 | m_input-> showInputMethod ( ); |
118 | else if ( msg == "reloadInputMethods()" ) | 124 | else if ( msg == "reloadInputMethods()" ) |
119 | m_input-> loadInputMethods ( ); | 125 | m_input-> loadInputMethods ( ); |
120 | } | 126 | } |
121 | 127 | ||
122 | void LoginWindowImpl::calcMaxWindowRect ( ) | 128 | void LoginWindowImpl::calcMaxWindowRect ( ) |
123 | { | 129 | { |
124 | #ifdef Q_WS_QWS | 130 | #ifdef Q_WS_QWS |
125 | QRect wr; | 131 | QRect wr; |
126 | int displayWidth = qApp-> desktop ( )-> width ( ); | 132 | int displayWidth = qApp-> desktop ( )-> width ( ); |
127 | QRect ir = m_input-> inputRect ( ); | 133 | QRect ir = m_input-> inputRect ( ); |
128 | if ( ir.isValid() ) | 134 | if ( ir.isValid() ) |
129 | wr.setCoords( 0, 0, displayWidth-1, ir.top()-1 ); | 135 | wr.setCoords( 0, 0, displayWidth-1, ir.top()-1 ); |
130 | else | 136 | else |
131 | wr.setCoords( 0, 0, displayWidth-1, m_taskbar->y()-1 ); | 137 | wr.setCoords( 0, 0, displayWidth-1, m_taskbar->y()-1 ); |
132 | 138 | ||
133 | #if QT_VERSION < 300 | 139 | #if QT_VERSION < 300 |
134 | wr = qt_screen-> mapToDevice ( wr, QSize ( qt_screen-> width ( ), qt_screen-> height ( ))); | 140 | wr = qt_screen-> mapToDevice ( wr, QSize ( qt_screen-> width ( ), qt_screen-> height ( ))); |
135 | #endif | 141 | #endif |
136 | 142 | ||
137 | QWSServer::setMaxWindowRect( wr ); | 143 | QWSServer::setMaxWindowRect( wr ); |
138 | #endif | 144 | #endif |
139 | } | 145 | } |
140 | 146 | ||
141 | 147 | ||
142 | void LoginWindowImpl::keyPressEvent ( QKeyEvent *e ) | 148 | void LoginWindowImpl::keyPressEvent ( QKeyEvent *e ) |
143 | { | 149 | { |
144 | switch ( e-> key ( )) { | 150 | switch ( e-> key ( )) { |
145 | case HardKey_Suspend: suspend ( ); | 151 | case HardKey_Suspend: suspend ( ); |
146 | break; | 152 | break; |
147 | case HardKey_Backlight: backlight ( ); | 153 | case HardKey_Backlight: backlight ( ); |
148 | break; | 154 | break; |
149 | default: e-> ignore ( ); | 155 | default: e-> ignore ( ); |
150 | break; | 156 | break; |
@@ -203,48 +209,54 @@ public: | |||
203 | show ( ); | 209 | show ( ); |
204 | } | 210 | } |
205 | 211 | ||
206 | virtual void showEvent ( QShowEvent *e ) | 212 | virtual void showEvent ( QShowEvent *e ) |
207 | { | 213 | { |
208 | QLabel::showEvent ( e ); | 214 | QLabel::showEvent ( e ); |
209 | m_visible = true; | 215 | m_visible = true; |
210 | } | 216 | } |
211 | 217 | ||
212 | virtual void paintEvent ( QPaintEvent *e ) | 218 | virtual void paintEvent ( QPaintEvent *e ) |
213 | { | 219 | { |
214 | QLabel::paintEvent ( e ); | 220 | QLabel::paintEvent ( e ); |
215 | if ( m_visible ) | 221 | if ( m_visible ) |
216 | qApp-> quit ( ); | 222 | qApp-> quit ( ); |
217 | } | 223 | } |
218 | 224 | ||
219 | private: | 225 | private: |
220 | bool m_visible; | 226 | bool m_visible; |
221 | }; | 227 | }; |
222 | 228 | ||
223 | void LoginWindowImpl::login ( ) | 229 | void LoginWindowImpl::login ( ) |
224 | { | 230 | { |
225 | const char *user = ::strdup ( m_user-> currentText ( ). local8Bit ( )); | 231 | const char *user = ::strdup ( m_user-> currentText ( ). local8Bit ( )); |
226 | const char *pass = ::strdup ( m_password-> text ( ). local8Bit ( )); | 232 | const char *pass = ::strdup ( m_password-> text ( ). local8Bit ( )); |
227 | 233 | ||
228 | if ( !user || !user [0] ) | 234 | if ( !user || !user [0] ) |
229 | return; | 235 | return; |
230 | if ( !pass ) | 236 | if ( !pass ) |
231 | pass = ""; | 237 | pass = ""; |
232 | 238 | ||
233 | if ( lApp-> checkPassword ( user, pass )) { | 239 | if ( lApp-> checkPassword ( user, pass )) { |
234 | Config cfg ( "opie-login" ); | 240 | Config cfg ( "opie-login" ); |
235 | cfg. setGroup ( "General" ); | 241 | cfg. setGroup ( "General" ); |
236 | cfg. writeEntry ( "LastLogin", user ); | 242 | cfg. writeEntry ( "LastLogin", user ); |
237 | cfg. write ( ); | 243 | cfg. write ( ); |
238 | 244 | ||
239 | lApp-> setLoginAs ( user ); | 245 | lApp-> setLoginAs ( user ); |
240 | 246 | ||
241 | // Draw a big wait icon, the image can be altered in later revisions | 247 | // Draw a big wait icon, the image can be altered in later revisions |
242 | m_input-> hideInputMethod ( ); | 248 | m_input-> hideInputMethod ( ); |
243 | new WaitLogo ( ); | 249 | new WaitLogo ( ); |
244 | // WaitLogo::showEvent() calls qApp-> quit() | 250 | // WaitLogo::showEvent() calls qApp-> quit() |
245 | } | 251 | } |
246 | else { | 252 | else { |
247 | QMessageBox::warning ( this, tr( "Wrong password" ), tr( "The given password is incorrect." )); | 253 | QMessageBox::warning ( this, tr( "Wrong password" ), tr( "The given password is incorrect." )); |
248 | m_password-> clear ( ); | 254 | m_password-> clear ( ); |
249 | } | 255 | } |
250 | } | 256 | } |
257 | |||
258 | void LoginWindowImpl::showPasswordDialog() { | ||
259 | PasswordDialogImpl dia( this ); | ||
260 | dia.showMaximized(); | ||
261 | dia.exec(); | ||
262 | } | ||
diff --git a/core/opie-login/loginwindowimpl.h b/core/opie-login/loginwindowimpl.h index df8dbbb..1de212c 100644 --- a/core/opie-login/loginwindowimpl.h +++ b/core/opie-login/loginwindowimpl.h | |||
@@ -1,63 +1,64 @@ | |||
1 | /* | 1 | /* |
2 | � � � � � � � �=. This file is part of the OPIE Project | 2 | � � � � � � � �=. This file is part of the OPIE Project |
3 | � � � � � � �.=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> | 3 | � � � � � � �.=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> |
4 | � � � � � �.>+-= | 4 | � � � � � �.>+-= |
5 | �_;:, � � .> � �:=|. This file is free software; you can | 5 | �_;:, � � .> � �:=|. This file is free software; you can |
6 | .> <`_, � > �. � <= redistribute it and/or modify it under | 6 | .> <`_, � > �. � <= redistribute it and/or modify it under |
7 | :`=1 )Y*s>-.-- � : the terms of the GNU General Public | 7 | :`=1 )Y*s>-.-- � : the terms of the GNU General Public |
8 | .="- .-=="i, � � .._ License as published by the Free Software | 8 | .="- .-=="i, � � .._ License as published by the Free Software |
9 | �- . � .-<_> � � .<> Foundation; either version 2 of the License, | 9 | �- . � .-<_> � � .<> Foundation; either version 2 of the License, |
10 | � � �._= =} � � � : or (at your option) any later version. | 10 | � � �._= =} � � � : or (at your option) any later version. |
11 | � � .%`+i> � � � _;_. | 11 | � � .%`+i> � � � _;_. |
12 | � � .i_,=:_. � � �-<s. This file is distributed in the hope that | 12 | � � .i_,=:_. � � �-<s. This file is distributed in the hope that |
13 | � � �+ �. �-:. � � � = it will be useful, but WITHOUT ANY WARRANTY; | 13 | � � �+ �. �-:. � � � = it will be useful, but WITHOUT ANY WARRANTY; |
14 | � � : .. � �.:, � � . . . without even the implied warranty of | 14 | � � : .. � �.:, � � . . . without even the implied warranty of |
15 | � � =_ � � � �+ � � =;=|` MERCHANTABILITY or FITNESS FOR A | 15 | � � =_ � � � �+ � � =;=|` MERCHANTABILITY or FITNESS FOR A |
16 | � _.=:. � � � : � �:=>`: PARTICULAR PURPOSE. See the GNU General | 16 | � _.=:. � � � : � �:=>`: PARTICULAR PURPOSE. See the GNU General |
17 | ..}^=.= � � � = � � � ; Public License for more details. | 17 | ..}^=.= � � � = � � � ; Public License for more details. |
18 | ++= � -. � � .` � � .: | 18 | ++= � -. � � .` � � .: |
19 | �: � � = �...= . :.=- You should have received a copy of the GNU | 19 | �: � � = �...= . :.=- You should have received a copy of the GNU |
20 | �-. � .:....=;==+<; General Public License along with this file; | 20 | �-. � .:....=;==+<; General Public License along with this file; |
21 | � -_. . . � )=. �= see the file COPYING. If not, write to the | 21 | � -_. . . � )=. �= see the file COPYING. If not, write to the |
22 | � � -- � � � �:-=` Free Software Foundation, Inc., | 22 | � � -- � � � �:-=` Free Software Foundation, Inc., |
23 | 59 Temple Place - Suite 330, | 23 | 59 Temple Place - Suite 330, |
24 | Boston, MA 02111-1307, USA. | 24 | Boston, MA 02111-1307, USA. |
25 | 25 | ||
26 | */ | 26 | */ |
27 | 27 | ||
28 | #ifndef __OPIE_LOGINWINDOW_IMPL_H__ | 28 | #ifndef __OPIE_LOGINWINDOW_IMPL_H__ |
29 | #define __OPIE_LOGINWINDOW_IMPL_H__ | 29 | #define __OPIE_LOGINWINDOW_IMPL_H__ |
30 | 30 | ||
31 | #include "loginwindow.h" | 31 | #include "loginwindow.h" |
32 | 32 | ||
33 | class InputMethods; | 33 | class InputMethods; |
34 | 34 | ||
35 | class LoginWindowImpl : public LoginWindow { | 35 | class LoginWindowImpl : public LoginWindow { |
36 | Q_OBJECT | 36 | Q_OBJECT |
37 | 37 | ||
38 | public: | 38 | public: |
39 | LoginWindowImpl ( ); | 39 | LoginWindowImpl ( ); |
40 | virtual ~LoginWindowImpl ( ); | 40 | virtual ~LoginWindowImpl ( ); |
41 | 41 | ||
42 | protected slots: | 42 | protected slots: |
43 | void restart ( ); | 43 | void restart ( ); |
44 | void quit ( ); | 44 | void quit ( ); |
45 | void showIM ( ); | 45 | void showIM ( ); |
46 | void suspend ( ); | 46 | void suspend ( ); |
47 | void backlight ( ); | 47 | void backlight ( ); |
48 | void login ( ); | 48 | void login ( ); |
49 | void toggleEchoMode ( bool ); | 49 | void toggleEchoMode ( bool ); |
50 | void calcMaxWindowRect ( ); | 50 | void calcMaxWindowRect ( ); |
51 | void receive ( const QCString &, const QByteArray & ); | 51 | void receive ( const QCString &, const QByteArray & ); |
52 | void showPasswordDialog(); | ||
52 | 53 | ||
53 | protected: | 54 | protected: |
54 | virtual void keyPressEvent ( QKeyEvent *e ); | 55 | virtual void keyPressEvent ( QKeyEvent *e ); |
55 | 56 | ||
56 | QStringList getAllUsers ( ); | 57 | QStringList getAllUsers ( ); |
57 | bool changeIdentity ( const char *user ); | 58 | bool changeIdentity ( const char *user ); |
58 | 59 | ||
59 | private: | 60 | private: |
60 | InputMethods *m_input; | 61 | InputMethods *m_input; |
61 | }; | 62 | }; |
62 | 63 | ||
63 | #endif | 64 | #endif |
diff --git a/core/opie-login/opie-login.pro b/core/opie-login/opie-login.pro index 63d4481..175d0b6 100644 --- a/core/opie-login/opie-login.pro +++ b/core/opie-login/opie-login.pro | |||
@@ -1,28 +1,30 @@ | |||
1 | TEMPLATE = app | 1 | TEMPLATE = app |
2 | CONFIG = qt warn_on usepam | 2 | CONFIG = qt warn_on usepam |
3 | 3 | ||
4 | HEADERS = loginwindowimpl.h \ | 4 | HEADERS = loginwindowimpl.h \ |
5 | loginapplication.h \ | 5 | loginapplication.h \ |
6 | passworddialogimpl.h \ | ||
6 | ../launcher/inputmethods.h \ | 7 | ../launcher/inputmethods.h \ |
7 | ../apps/calibrate/calibrate.h | 8 | ../apps/calibrate/calibrate.h |
8 | 9 | ||
9 | SOURCES = loginwindowimpl.cpp \ | 10 | SOURCES = loginwindowimpl.cpp \ |
10 | loginapplication.cpp \ | 11 | loginapplication.cpp \ |
12 | passworddialogimpl.cpp \ | ||
11 | ../launcher/inputmethods.cpp \ | 13 | ../launcher/inputmethods.cpp \ |
12 | ../apps/calibrate/calibrate.cpp \ | 14 | ../apps/calibrate/calibrate.cpp \ |
13 | main.cpp | 15 | main.cpp |
14 | 16 | ||
15 | INTERFACES = loginwindow.ui | 17 | INTERFACES = loginwindow.ui passworddialog.ui |
16 | 18 | ||
17 | INCLUDEPATH += $(OPIEDIR)/include ../launcher ../apps/calibrate | 19 | INCLUDEPATH += $(OPIEDIR)/include ../launcher ../apps/calibrate |
18 | DEPENDPATH += $(OPIEDIR)/include ../launcher ../apps/calibrate | 20 | DEPENDPATH += $(OPIEDIR)/include ../launcher ../apps/calibrate |
19 | 21 | ||
20 | LIBS += -lqpe -lopiecore2 | 22 | LIBS += -lqpe -lopiecore2 |
21 | 23 | ||
22 | usepam:LIBS += -lpam | 24 | usepam:LIBS += -lpam |
23 | usepam:DEFINES += USEPAM | 25 | usepam:DEFINES += USEPAM |
24 | 26 | ||
25 | DESTDIR = $(OPIEDIR)/bin | 27 | DESTDIR = $(OPIEDIR)/bin |
26 | TARGET = opie-login | 28 | TARGET = opie-login |
27 | 29 | ||
28 | include ( $(OPIEDIR)/include.pro ) | 30 | include ( $(OPIEDIR)/include.pro ) |
diff --git a/core/opie-login/passworddialog.ui b/core/opie-login/passworddialog.ui new file mode 100644 index 0000000..f2b2c88 --- a/dev/null +++ b/core/opie-login/passworddialog.ui | |||
@@ -0,0 +1,225 @@ | |||
1 | <!DOCTYPE UI><UI> | ||
2 | <class>PasswordDialog</class> | ||
3 | <widget> | ||
4 | <class>QDialog</class> | ||
5 | <property stdset="1"> | ||
6 | <name>name</name> | ||
7 | <cstring>PasswordDialog</cstring> | ||
8 | </property> | ||
9 | <property stdset="1"> | ||
10 | <name>geometry</name> | ||
11 | <rect> | ||
12 | <x>0</x> | ||
13 | <y>0</y> | ||
14 | <width>625</width> | ||
15 | <height>277</height> | ||
16 | </rect> | ||
17 | </property> | ||
18 | <property stdset="1"> | ||
19 | <name>caption</name> | ||
20 | <string>Set Password</string> | ||
21 | <comment>Caption of the password dialog</comment> | ||
22 | </property> | ||
23 | <property> | ||
24 | <name>layoutMargin</name> | ||
25 | </property> | ||
26 | <property> | ||
27 | <name>layoutSpacing</name> | ||
28 | </property> | ||
29 | <grid> | ||
30 | <property stdset="1"> | ||
31 | <name>margin</name> | ||
32 | <number>4</number> | ||
33 | </property> | ||
34 | <property stdset="1"> | ||
35 | <name>spacing</name> | ||
36 | <number>4</number> | ||
37 | </property> | ||
38 | <widget row="0" column="0" > | ||
39 | <class>QLabel</class> | ||
40 | <property stdset="1"> | ||
41 | <name>name</name> | ||
42 | <cstring>m_header</cstring> | ||
43 | </property> | ||
44 | <property stdset="1"> | ||
45 | <name>text</name> | ||
46 | <string><qt><h2>Please set a password for the Superuser.</h2></qt></string> | ||
47 | </property> | ||
48 | </widget> | ||
49 | <widget row="1" column="0" > | ||
50 | <class>QLayoutWidget</class> | ||
51 | <property stdset="1"> | ||
52 | <name>name</name> | ||
53 | <cstring>Layout5</cstring> | ||
54 | </property> | ||
55 | <grid> | ||
56 | <property stdset="1"> | ||
57 | <name>margin</name> | ||
58 | <number>0</number> | ||
59 | </property> | ||
60 | <property stdset="1"> | ||
61 | <name>spacing</name> | ||
62 | <number>6</number> | ||
63 | </property> | ||
64 | <widget row="0" column="1" > | ||
65 | <class>QLineEdit</class> | ||
66 | <property stdset="1"> | ||
67 | <name>name</name> | ||
68 | <cstring>m_pass</cstring> | ||
69 | </property> | ||
70 | <property stdset="1"> | ||
71 | <name>echoMode</name> | ||
72 | <enum>Password</enum> | ||
73 | </property> | ||
74 | </widget> | ||
75 | <widget row="0" column="0" > | ||
76 | <class>QLabel</class> | ||
77 | <property stdset="1"> | ||
78 | <name>name</name> | ||
79 | <cstring>m_passLabel</cstring> | ||
80 | </property> | ||
81 | <property stdset="1"> | ||
82 | <name>text</name> | ||
83 | <string><b>Password:</b></string> | ||
84 | </property> | ||
85 | <property> | ||
86 | <name>buddy</name> | ||
87 | <cstring>m_pass</cstring> | ||
88 | </property> | ||
89 | </widget> | ||
90 | <widget row="0" column="2" > | ||
91 | <class>QToolButton</class> | ||
92 | <property stdset="1"> | ||
93 | <name>name</name> | ||
94 | <cstring>ToolButton3</cstring> | ||
95 | </property> | ||
96 | <property stdset="1"> | ||
97 | <name>text</name> | ||
98 | <string></string> | ||
99 | </property> | ||
100 | <property stdset="1"> | ||
101 | <name>pixmap</name> | ||
102 | <pixmap>image0</pixmap> | ||
103 | </property> | ||
104 | <property stdset="1"> | ||
105 | <name>toggleButton</name> | ||
106 | <bool>true</bool> | ||
107 | </property> | ||
108 | <property stdset="1"> | ||
109 | <name>toggleButton</name> | ||
110 | <bool>true</bool> | ||
111 | </property> | ||
112 | </widget> | ||
113 | <widget row="1" column="3" > | ||
114 | <class>QToolButton</class> | ||
115 | <property stdset="1"> | ||
116 | <name>name</name> | ||
117 | <cstring>ToolButton1_2</cstring> | ||
118 | </property> | ||
119 | <property stdset="1"> | ||
120 | <name>text</name> | ||
121 | <string></string> | ||
122 | </property> | ||
123 | <property stdset="1"> | ||
124 | <name>pixmap</name> | ||
125 | <pixmap>image1</pixmap> | ||
126 | </property> | ||
127 | </widget> | ||
128 | <widget row="1" column="1" > | ||
129 | <class>QLineEdit</class> | ||
130 | <property stdset="1"> | ||
131 | <name>name</name> | ||
132 | <cstring>m_confirm</cstring> | ||
133 | </property> | ||
134 | <property stdset="1"> | ||
135 | <name>echoMode</name> | ||
136 | <enum>Password</enum> | ||
137 | </property> | ||
138 | </widget> | ||
139 | <widget row="0" column="3" > | ||
140 | <class>QToolButton</class> | ||
141 | <property stdset="1"> | ||
142 | <name>name</name> | ||
143 | <cstring>ToolButton1</cstring> | ||
144 | </property> | ||
145 | <property stdset="1"> | ||
146 | <name>text</name> | ||
147 | <string></string> | ||
148 | </property> | ||
149 | <property stdset="1"> | ||
150 | <name>pixmap</name> | ||
151 | <pixmap>image1</pixmap> | ||
152 | </property> | ||
153 | </widget> | ||
154 | <widget row="1" column="0" > | ||
155 | <class>QLabel</class> | ||
156 | <property stdset="1"> | ||
157 | <name>name</name> | ||
158 | <cstring>m_confirmLbl</cstring> | ||
159 | </property> | ||
160 | <property stdset="1"> | ||
161 | <name>text</name> | ||
162 | <string><b>Confirm:</b></string> | ||
163 | </property> | ||
164 | </widget> | ||
165 | </grid> | ||
166 | </widget> | ||
167 | <spacer row="2" column="0" > | ||
168 | <property> | ||
169 | <name>name</name> | ||
170 | <cstring>Spacer2</cstring> | ||
171 | </property> | ||
172 | <property stdset="1"> | ||
173 | <name>orientation</name> | ||
174 | <enum>Vertical</enum> | ||
175 | </property> | ||
176 | <property stdset="1"> | ||
177 | <name>sizeType</name> | ||
178 | <enum>Expanding</enum> | ||
179 | </property> | ||
180 | <property> | ||
181 | <name>sizeHint</name> | ||
182 | <size> | ||
183 | <width>20</width> | ||
184 | <height>20</height> | ||
185 | </size> | ||
186 | </property> | ||
187 | </spacer> | ||
188 | </grid> | ||
189 | </widget> | ||
190 | <images> | ||
191 | <image> | ||
192 | <name>image0</name> | ||
193 | <data format="XPM.GZ" length="394">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022230543251d2e253d856405bffcbc54105b19c856360003b0141a808a2983b03284848a298304c108240e15033141045829580cac07ac4e590f5d0c22a4876caf32d45898797a48044caf32c22948e629c39d0457a78ce60f65b8f104ec50d6c366af1e865eb4b0aab5e602008bcd444d</data> | ||
194 | </image> | ||
195 | <image> | ||
196 | <name>image1</name> | ||
197 | <data format="XPM.GZ" length="341">789c558fcd0a02310c84ef7d8ad0b915c9bae84d7c04c5a3201e4275d1c32ab8eb41c477b73fa96e43a1f30d4d266d1ced771b728d194619af9efc451ee44ecfbe7f1d8eebb7b1ed92c259506b67c63279dade6fe7a81134e6a9224ac4ae2bc85565075004901c8820731069a648b490effc26eac4a25dcc195373c94231b87a8349fabf894b7a3d27a76af8cf01eb0e534757d70da1bf8a933f2bf30509e84b68</data> | ||
198 | </image> | ||
199 | </images> | ||
200 | <connections> | ||
201 | <connection> | ||
202 | <sender>ToolButton3</sender> | ||
203 | <signal>toggled(bool)</signal> | ||
204 | <receiver>PasswordDialog</receiver> | ||
205 | <slot>slotToggleEcho(bool)</slot> | ||
206 | </connection> | ||
207 | <connection> | ||
208 | <sender>ToolButton1</sender> | ||
209 | <signal>clicked()</signal> | ||
210 | <receiver>m_pass</receiver> | ||
211 | <slot>clear()</slot> | ||
212 | </connection> | ||
213 | <connection> | ||
214 | <sender>ToolButton1_2</sender> | ||
215 | <signal>clicked()</signal> | ||
216 | <receiver>m_confirm</receiver> | ||
217 | <slot>clear()</slot> | ||
218 | </connection> | ||
219 | <slot access="protected">slotToggleEcho(bool)</slot> | ||
220 | </connections> | ||
221 | <tabstops> | ||
222 | <tabstop>m_pass</tabstop> | ||
223 | <tabstop>m_confirm</tabstop> | ||
224 | </tabstops> | ||
225 | </UI> | ||
diff --git a/core/opie-login/passworddialogimpl.cpp b/core/opie-login/passworddialogimpl.cpp new file mode 100644 index 0000000..aeb7516 --- a/dev/null +++ b/core/opie-login/passworddialogimpl.cpp | |||
@@ -0,0 +1,232 @@ | |||
1 | /* | ||
2 | � � � � � � � �=. This file is part of the OPIE Project | ||
3 | � � � � � � �.=l. Copyright (c) 2004 Holger Hans Peter Freyther <zecke@handhelds.org> | ||
4 | � � � � � �.>+-= | ||
5 | �_;:, � � .> � �:=|. This file is free software; you can | ||
6 | .> <`_, � > �. � <= redistribute it and/or modify it under | ||
7 | :`=1 )Y*s>-.-- � : the terms of the GNU General Public | ||
8 | .="- .-=="i, � � .._ License as published by the Free Software | ||
9 | �- . � .-<_> � � .<> Foundation; either version 2 of the License, | ||
10 | � � �._= =} � � � : or (at your option) any later version. | ||
11 | � � .%`+i> � � � _;_. | ||
12 | � � .i_,=:_. � � �-<s. This file is distributed in the hope that | ||
13 | � � �+ �. �-:. � � � = it will be useful, but WITHOUT ANY WARRANTY; | ||
14 | � � : .. � �.:, � � . . . without even the implied warranty of | ||
15 | � � =_ � � � �+ � � =;=|` MERCHANTABILITY or FITNESS FOR A | ||
16 | � _.=:. � � � : � �:=>`: PARTICULAR PURPOSE. See the GNU General | ||
17 | ..}^=.= � � � = � � � ; Public License for more details. | ||
18 | ++= � -. � � .` � � .: | ||
19 | �: � � = �...= . :.=- You should have received a copy of the GNU | ||
20 | �-. � .:....=;==+<; General Public License along with this file; | ||
21 | � -_. . . � )=. �= see the file COPYING. If not, write to the | ||
22 | � � -- � � � �:-=` Free Software Foundation, Inc., | ||
23 | 59 Temple Place - Suite 330, | ||
24 | Boston, MA 02111-1307, USA. | ||
25 | |||
26 | */ | ||
27 | |||
28 | |||
29 | #include <qlayout.h> | ||
30 | #include <qlabel.h> | ||
31 | #include <qlineedit.h> | ||
32 | #include <qvalidator.h> | ||
33 | #include <qmessagebox.h> | ||
34 | #include <qhbox.h> | ||
35 | #include <qtoolbutton.h> | ||
36 | |||
37 | #include <sys/types.h> | ||
38 | #include <pwd.h> | ||
39 | #include <shadow.h> | ||
40 | #include <stdio.h> | ||
41 | #include <time.h> | ||
42 | #include <unistd.h> | ||
43 | |||
44 | |||
45 | #include "passworddialogimpl.h" | ||
46 | |||
47 | |||
48 | // This function is taken from 'busybox'. | ||
49 | static int i64c(int i) { | ||
50 | if (i <= 0) | ||
51 | return ('.'); | ||
52 | if (i == 1) | ||
53 | return ('/'); | ||
54 | if (i >= 2 && i < 12) | ||
55 | return ('0' - 2 + i); | ||
56 | if (i >= 12 && i < 38) | ||
57 | return ('A' - 12 + i); | ||
58 | if (i >= 38 && i < 63) | ||
59 | return ('a' - 38 + i); | ||
60 | return ('z'); | ||
61 | } | ||
62 | |||
63 | // This function is taken from 'busybox'. | ||
64 | static char *crypt_make_salt() { | ||
65 | time_t now; | ||
66 | static unsigned long x; | ||
67 | static char result[3]; | ||
68 | |||
69 | ::time(&now); | ||
70 | x += now + getpid() + clock(); | ||
71 | result[0] = i64c(((x >> 18) ^ (x >> 6)) & 077); | ||
72 | result[1] = i64c(((x >> 12) ^ x) & 077); | ||
73 | result[2] = '\0'; | ||
74 | return result; | ||
75 | } | ||
76 | |||
77 | /* | ||
78 | * Modal dialog to force root password. It is quite hard as it only leave | ||
79 | * when a password is set. | ||
80 | * Also it prevalidates the password... | ||
81 | */ | ||
82 | PasswordDialogImpl::PasswordDialogImpl( QWidget* parent ) | ||
83 | : PasswordDialog( parent, 0, true ), m_isSet( PasswordDialogImpl::needDialog() ) { | ||
84 | } | ||
85 | |||
86 | PasswordDialogImpl::~PasswordDialogImpl() { | ||
87 | /* qt does the stuff for us */ | ||
88 | } | ||
89 | |||
90 | void PasswordDialogImpl::done(int res) { | ||
91 | m_isSet = true; | ||
92 | |||
93 | /* | ||
94 | * The user hit 'Ok' see if we can safe the file | ||
95 | * if not an error will be raised and m_isSet altered. | ||
96 | * On cancel we will see if it is now ok... | ||
97 | */ | ||
98 | if ( res == Accepted ) | ||
99 | writePassword(); | ||
100 | else if(PasswordDialogImpl::needDialog() ) { | ||
101 | switch( QMessageBox::warning(this,tr("Trying to leave without password set") , | ||
102 | tr("<qt>No password was set. This could lead to you not beeing" | ||
103 | "able to remotely connect to your machine." | ||
104 | "Do you want to continue not setting a password?</qt>" ), | ||
105 | QMessageBox::Ok, QMessageBox::Cancel ) ) { | ||
106 | case QMessageBox::Cancel: | ||
107 | m_isSet = false; | ||
108 | break; | ||
109 | case QMessageBox::Ok: | ||
110 | default: | ||
111 | break; | ||
112 | } | ||
113 | |||
114 | } | ||
115 | |||
116 | if(m_isSet) | ||
117 | PasswordDialog::done( res ); | ||
118 | } | ||
119 | |||
120 | /* | ||
121 | * Lets see if we can write either shadow | ||
122 | * | ||
123 | */ | ||
124 | /** | ||
125 | * CRYPT the password and then tries to write it either to the shadow password | ||
126 | * or to the plain /etc/passwd | ||
127 | */ | ||
128 | void PasswordDialogImpl::writePassword() { | ||
129 | /* | ||
130 | * Check if both texts are the same | ||
131 | */ | ||
132 | if ( m_pass->text() != m_confirm->text() ) | ||
133 | return error( tr("Passwords don't match"), | ||
134 | tr("<qt>The two passwords don't match. Please try again.</qt>") ); | ||
135 | |||
136 | |||
137 | /* | ||
138 | * Now crypt the password so we can write it later | ||
139 | */ | ||
140 | char* password = ::crypt( m_pass->text().latin1(), crypt_make_salt() ); | ||
141 | |||
142 | if ( !password ) | ||
143 | return error( tr("Password not legal" ), | ||
144 | tr("<qt>The entered password is not a valid password." | ||
145 | "Please try entering a valid password.</qt>" ) ); | ||
146 | |||
147 | /* rewind and rewrite the password file */ | ||
148 | ::setpwent(); | ||
149 | |||
150 | FILE* file = ::fopen( "/etc/passwd.new", "w" ); | ||
151 | struct passwd* pass; | ||
152 | while ( (pass = ::getpwent()) != 0l ) { | ||
153 | /* no shadow password support */ | ||
154 | if ( pass->pw_uid == 0 ) | ||
155 | pass->pw_passwd = password; | ||
156 | |||
157 | ::putpwent( pass, file ); | ||
158 | } | ||
159 | |||
160 | ::fclose( file ); | ||
161 | ::endpwent(); | ||
162 | ::unlink("/etc/passwd"); | ||
163 | ::rename("/etc/passwd.new","/etc/passwd" ); | ||
164 | |||
165 | /* should be done now */ | ||
166 | #ifdef OPIE_LOGIN_SHADOW_PW | ||
167 | #error "Can't write Shadow Passwords fixme" | ||
168 | #endif | ||
169 | } | ||
170 | |||
171 | /** | ||
172 | * Raise an error. Delete input and set the focus after showing | ||
173 | * the error to the user | ||
174 | */ | ||
175 | void PasswordDialogImpl::error( const QString& caption, const QString& text ) { | ||
176 | m_isSet = false; | ||
177 | QMessageBox::critical(this,caption, text, | ||
178 | QMessageBox::Ok, QMessageBox::NoButton ); | ||
179 | |||
180 | m_pass->setText(""); | ||
181 | m_pass->setFocus(); | ||
182 | |||
183 | m_confirm->setText(""); | ||
184 | } | ||
185 | |||
186 | void PasswordDialogImpl::slotToggleEcho( bool b ) { | ||
187 | m_pass-> setEchoMode( b ? QLineEdit::Normal : QLineEdit::Password ); | ||
188 | m_confirm->setEchoMode( b ? QLineEdit::Normal : QLineEdit::Password ); | ||
189 | } | ||
190 | |||
191 | ///////////////////////// | ||
192 | /// static functions | ||
193 | /// | ||
194 | |||
195 | /** | ||
196 | * Ask whether or not we need to show the dialog. It returns true if | ||
197 | * no root password is set so that the user will be able to set one. | ||
198 | */ | ||
199 | bool PasswordDialogImpl::needDialog() { | ||
200 | /* | ||
201 | * This can cope with no password and shadow passwords | ||
202 | * Let us go through the user database until we find 'root' and then | ||
203 | * see if it is 'shadow' and see if shadow is empty or see if the password is empty | ||
204 | */ | ||
205 | bool need = false; | ||
206 | struct passwd *pwd; | ||
207 | ::setpwent(); | ||
208 | |||
209 | while((pwd = ::getpwent() ) ) { | ||
210 | /* found root */ | ||
211 | if( pwd->pw_uid == 0 ) { | ||
212 | QString str = QString::fromLatin1(pwd->pw_passwd ); | ||
213 | |||
214 | /* | ||
215 | * If str is really empty it is passwordless anyway... | ||
216 | * else it is shadow based | ||
217 | */ | ||
218 | if(str.isEmpty() ) | ||
219 | need = true; | ||
220 | else if ( str == '*' || str == 'x' ) | ||
221 | #ifdef OPIE_LOGIN_SHADOW_PW | ||
222 | need = QString::fromLatin1( ::getspnam( pwd->pw_name )->sp_pwdp ).isEmpty(); | ||
223 | #else | ||
224 | ; | ||
225 | #endif | ||
226 | break; | ||
227 | } | ||
228 | } | ||
229 | ::endpwent(); | ||
230 | |||
231 | return need; | ||
232 | } | ||
diff --git a/core/opie-login/passworddialogimpl.h b/core/opie-login/passworddialogimpl.h new file mode 100644 index 0000000..f8953dd --- a/dev/null +++ b/core/opie-login/passworddialogimpl.h | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | � � � � � � � �=. This file is part of the OPIE Project | ||
3 | � � � � � � �.=l. Copyright (c) 2004 Holger Hans Peter Freyther <zecke@handhelds.org> | ||
4 | � � � � � �.>+-= | ||
5 | �_;:, � � .> � �:=|. This file is free software; you can | ||
6 | .> <`_, � > �. � <= redistribute it and/or modify it under | ||
7 | :`=1 )Y*s>-.-- � : the terms of the GNU General Public | ||
8 | .="- .-=="i, � � .._ License as published by the Free Software | ||
9 | �- . � .-<_> � � .<> Foundation; either version 2 of the License, | ||
10 | � � �._= =} � � � : or (at your option) any later version. | ||
11 | � � .%`+i> � � � _;_. | ||
12 | � � .i_,=:_. � � �-<s. This file is distributed in the hope that | ||
13 | � � �+ �. �-:. � � � = it will be useful, but WITHOUT ANY WARRANTY; | ||
14 | � � : .. � �.:, � � . . . without even the implied warranty of | ||
15 | � � =_ � � � �+ � � =;=|` MERCHANTABILITY or FITNESS FOR A | ||
16 | � _.=:. � � � : � �:=>`: PARTICULAR PURPOSE. See the GNU General | ||
17 | ..}^=.= � � � = � � � ; Public License for more details. | ||
18 | ++= � -. � � .` � � .: | ||
19 | �: � � = �...= . :.=- You should have received a copy of the GNU | ||
20 | �-. � .:....=;==+<; General Public License along with this file; | ||
21 | � -_. . . � )=. �= see the file COPYING. If not, write to the | ||
22 | � � -- � � � �:-=` Free Software Foundation, Inc., | ||
23 | 59 Temple Place - Suite 330, | ||
24 | Boston, MA 02111-1307, USA. | ||
25 | |||
26 | */ | ||
27 | |||
28 | |||
29 | #ifndef OPIE_LOGIN_PASSWORDIMPL_DIALOG_H | ||
30 | #define OPIE_LOGIN_PASSWORDIMPL_DIALOG_H | ||
31 | |||
32 | #include "passworddialog.h" | ||
33 | |||
34 | |||
35 | class QLineEdit; | ||
36 | /** | ||
37 | * Small Dialog and Class to set the root password if it | ||
38 | * is not empty. | ||
39 | * \code | ||
40 | * if(PasswordDialogImpl::needDialog()) { | ||
41 | * PasswordDialogImpl *dia = new PasswordDialogImpl() | ||
42 | * dia->exec(); | ||
43 | * dia->delete(); | ||
44 | * } | ||
45 | */ | ||
46 | class PasswordDialogImpl : public PasswordDialog { | ||
47 | Q_OBJECT | ||
48 | public: | ||
49 | PasswordDialogImpl( QWidget *parent ); | ||
50 | ~PasswordDialogImpl(); | ||
51 | static bool needDialog(); | ||
52 | |||
53 | protected slots: | ||
54 | void done( int ); | ||
55 | void slotToggleEcho( bool ); | ||
56 | |||
57 | private: | ||
58 | void writePassword(); | ||
59 | void writeShadow(); | ||
60 | void error( const QString&, const QString& ); | ||
61 | bool m_isSet : 1; | ||
62 | }; | ||
63 | |||
64 | |||
65 | #endif | ||