summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/opie-login/loginwindow.ui1
-rw-r--r--core/opie-login/loginwindowimpl.cpp43
-rw-r--r--core/opie-login/loginwindowimpl.h2
3 files changed, 45 insertions, 1 deletions
diff --git a/core/opie-login/loginwindow.ui b/core/opie-login/loginwindow.ui
index 5a35c8d..245e942 100644
--- a/core/opie-login/loginwindow.ui
+++ b/core/opie-login/loginwindow.ui
@@ -1,418 +1,417 @@
<!DOCTYPE UI><UI>
<class>LoginWindow</class>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
<cstring>LoginWindow</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
<width>460</width>
<height>341</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<string>Login</string>
</property>
<property>
<name>layoutMargin</name>
</property>
<property>
<name>layoutSpacing</name>
</property>
<vbox>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>0</number>
</property>
<widget>
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<cstring>Layout7</cstring>
</property>
<property>
<name>layoutMargin</name>
</property>
<property>
<name>layoutSpacing</name>
</property>
<vbox>
<property stdset="1">
<name>margin</name>
<number>4</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>4</number>
</property>
<widget>
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<cstring>m_caption</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
<hsizetype>5</hsizetype>
<vsizetype>5</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
<name>font</name>
<font>
<family>helvetica</family>
<pointsize>18</pointsize>
<bold>1</bold>
- <underline>1</underline>
</font>
</property>
<property stdset="1">
<name>autoMask</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>backgroundOrigin</name>
<enum>ParentOrigin</enum>
</property>
<property stdset="1">
<name>margin</name>
<number>1</number>
</property>
<property stdset="1">
<name>text</name>
<string>&lt;center&gt;Welcome to OPIE&lt;/center&gt;</string>
</property>
</widget>
<widget>
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<cstring>Layout6</cstring>
</property>
<property>
<name>layoutSpacing</name>
</property>
<grid>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>4</number>
</property>
<widget row="0" column="1" >
<class>QComboBox</class>
<property stdset="1">
<name>name</name>
<cstring>m_user</cstring>
</property>
<property stdset="1">
<name>autoMask</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>editable</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>autoCompletion</name>
<bool>true</bool>
</property>
</widget>
<widget row="0" column="0" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<cstring>TextLabel1</cstring>
</property>
<property stdset="1">
<name>autoMask</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>backgroundOrigin</name>
<enum>ParentOrigin</enum>
</property>
<property stdset="1">
<name>text</name>
<string>User</string>
</property>
</widget>
<widget row="1" column="1" >
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<cstring>Layout5</cstring>
</property>
<property>
<name>layoutSpacing</name>
</property>
<hbox>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>4</number>
</property>
<widget>
<class>QLineEdit</class>
<property stdset="1">
<name>name</name>
<cstring>m_password</cstring>
</property>
<property stdset="1">
<name>autoMask</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>echoMode</name>
<enum>Password</enum>
</property>
</widget>
<widget>
<class>QToolButton</class>
<property stdset="1">
<name>name</name>
<cstring>ToolButton3</cstring>
</property>
<property stdset="1">
<name>text</name>
<string></string>
</property>
<property stdset="1">
<name>pixmap</name>
<pixmap>image0</pixmap>
</property>
<property stdset="1">
<name>toggleButton</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>toggleButton</name>
<bool>true</bool>
</property>
</widget>
<widget>
<class>QToolButton</class>
<property stdset="1">
<name>name</name>
<cstring>ToolButton1</cstring>
</property>
<property stdset="1">
<name>text</name>
<string></string>
</property>
<property stdset="1">
<name>pixmap</name>
<pixmap>image1</pixmap>
</property>
</widget>
</hbox>
</widget>
<widget row="1" column="0" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<cstring>TextLabel2</cstring>
</property>
<property stdset="1">
<name>autoMask</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>backgroundOrigin</name>
<enum>ParentOrigin</enum>
</property>
<property stdset="1">
<name>text</name>
<string>Password</string>
</property>
</widget>
</grid>
</widget>
<widget>
<class>Line</class>
<property stdset="1">
<name>name</name>
<cstring>Line1</cstring>
</property>
<property stdset="1">
<name>orientation</name>
<enum>Horizontal</enum>
</property>
</widget>
<widget>
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<cstring>Layout3</cstring>
</property>
<property>
<name>layoutSpacing</name>
</property>
<hbox>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>4</number>
</property>
<widget>
<class>QPushButton</class>
<property stdset="1">
<name>name</name>
<cstring>m_login</cstring>
</property>
<property stdset="1">
<name>autoMask</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>text</name>
<string>Login</string>
</property>
</widget>
<widget>
<class>QPushButton</class>
<property stdset="1">
<name>name</name>
<cstring>m_suspend</cstring>
</property>
<property stdset="1">
<name>autoMask</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>text</name>
<string>Suspend</string>
</property>
</widget>
<widget>
<class>QPushButton</class>
<property stdset="1">
<name>name</name>
<cstring>m_menu</cstring>
</property>
<property stdset="1">
<name>autoMask</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>text</name>
<string>Menu</string>
</property>
</widget>
</hbox>
</widget>
<spacer>
<property>
<name>name</name>
<cstring>Spacer1</cstring>
</property>
<property stdset="1">
<name>orientation</name>
<enum>Vertical</enum>
</property>
<property stdset="1">
<name>sizeType</name>
<enum>Expanding</enum>
</property>
<property>
<name>sizeHint</name>
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</vbox>
</widget>
<widget>
<class>QFrame</class>
<property stdset="1">
<name>name</name>
<cstring>m_taskbar</cstring>
</property>
<property stdset="1">
<name>frameShape</name>
<enum>NoFrame</enum>
</property>
<property stdset="1">
<name>frameShadow</name>
<enum>Raised</enum>
</property>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
</widget>
</vbox>
</widget>
<images>
<image>
<name>image0</name>
<data format="XPM.GZ" length="394">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022230543251d2e253d856405bffcbc54105b19c856360003b0141a808a2983b03284848a298304c108240e15033141045829580cac07ac4e590f5d0c22a4876caf32d45898797a48044caf32c22948e629c39d0457a78ce60f65b8f104ec50d6c366af1e865eb4b0aab5e602008bcd444d</data>
</image>
<image>
<name>image1</name>
<data format="XPM.GZ" length="341">789c558fcd0a02310c84ef7d8ad0b915c9bae84d7c04c5a3201e4275d1c32ab8eb41c477b73fa96e43a1f30d4d266d1ced771b728d194619af9efc451ee44ecfbe7f1d8eebb7b1ed92c259506b67c63279dade6fe7a81134e6a9224ac4ae2bc85565075004901c8820731069a648b490effc26eac4a25dcc195373c94231b87a8349fabf894b7a3d27a76af8cf01eb0e534757d70da1bf8a933f2bf30509e84b68</data>
</image>
</images>
<connections>
<connection>
<sender>ToolButton1</sender>
<signal>clicked()</signal>
<receiver>m_password</receiver>
<slot>clear()</slot>
</connection>
<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 fe2906a..577cb41 100644
--- a/core/opie-login/loginwindowimpl.cpp
+++ b/core/opie-login/loginwindowimpl.cpp
@@ -1,204 +1,247 @@
/*
               =. This file is part of the OPIE Project
             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org>
           .>+-=
 _;:,     .>    :=|. This file is free software; you can
.> <`_,   >  .   <= redistribute it and/or modify it under
:`=1 )Y*s>-.--   : the terms of the GNU General Public
.="- .-=="i,     .._ License as published by the Free Software
 - .   .-<_>     .<> Foundation; either version 2 of the License,
     ._= =}       : or (at your option) any later version.
    .%`+i>       _;_.
    .i_,=:_.      -<s. This file is distributed in the hope that
     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
    : ..    .:,     . . . without even the implied warranty of
    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
..}^=.=       =       ; Public License for more details.
++=   -.     .`     .:
 :     =  ...= . :.=- You should have received a copy of the GNU
 -.   .:....=;==+<; General Public License along with this file;
  -_. . .   )=.  = see the file COPYING. If not, write to the
    --        :-=` Free Software Foundation, Inc.,
59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#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>
+#if QT_VERSION < 300
+#include <qgfx_qws.h>
+#endif
+#include <qwindowsystem_qws.h>
#include <qpe/resource.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/config.h>
#include <opie/odevice.h>
#include <stdio.h>
#include <stdlib.h>
#include "loginwindowimpl.h"
#include "loginapplication.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 );
+ QCopChannel *channel = new QCopChannel ( "QPE/TaskBar", this );
+ connect ( channel, SIGNAL( received ( const QCString &, const QByteArray & )), this, SLOT( receive ( const QCString &, const QByteArray & )));
+
QHBoxLayout *lay = new QHBoxLayout ( m_taskbar, 4, 4 );
m_input = new InputMethods ( m_taskbar );
+ connect ( m_input, SIGNAL( inputToggled ( bool )), this, SLOT( calcMaxWindowRect ( )));
lay-> addWidget ( m_input );
lay-> addStretch ( 10 );
setActiveWindow ( );
m_password-> setFocus ( );
m_user-> insertStringList ( lApp-> allUsers ( ));
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 ( )));
Config cfg ( "opie-login" );
cfg. setGroup ( "General" );
QString last = cfg. readEntry ( "LastLogin" );
if ( !last. isEmpty ( ))
m_user-> setEditText ( last );
+
+ calcMaxWindowRect ( );
}
LoginWindowImpl::~LoginWindowImpl ( )
{
}
+
+void LoginWindowImpl::receive ( const QCString &msg, const QByteArray &data )
+{
+ QDataStream stream ( data, IO_ReadOnly );
+
+ if ( msg == "hideInputMethod()" )
+ m_input-> hideInputMethod ( );
+ else if ( msg == "showInputMethod()" )
+ m_input-> showInputMethod ( );
+ else if ( msg == "reloadInputMethods()" )
+ m_input-> loadInputMethods ( );
+}
+
+void LoginWindowImpl::calcMaxWindowRect ( )
+{
+#ifdef Q_WS_QWS
+ QRect wr;
+ int displayWidth = qApp-> desktop ( )-> width ( );
+ QRect ir = m_input-> inputRect ( );
+ if ( ir.isValid() )
+ wr.setCoords( 0, 0, displayWidth-1, ir.top()-1 );
+ else
+ wr.setCoords( 0, 0, displayWidth-1, m_taskbar->y()-1 );
+
+#if QT_VERSION < 300
+ wr = qt_screen-> mapToDevice ( wr, QSize ( qt_screen-> width ( ), qt_screen-> height ( )));
+#endif
+
+ QWSServer::setMaxWindowRect( wr );
+#endif
+}
+
+
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 );
}
void LoginWindowImpl::showIM ( )
{
m_input-> showInputMethod ( );
}
void LoginWindowImpl::restart ( )
{
qApp-> quit ( );
}
void LoginWindowImpl::quit ( )
{
lApp-> quitToConsole ( );
}
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
}
class WaitLogo : public QLabel {
public:
WaitLogo ( ) : QLabel ( 0, "wait hack!", WStyle_Customize | WStyle_NoBorder | WStyle_Tool )
{
QImage img = Resource::loadImage ( "launcher/new_wait" );
QPixmap pix;
pix. convertFromImage ( img );
setPixmap ( pix );
setAlignment ( AlignCenter );
move ( 0, 0 );
resize ( qApp-> desktop ( )-> width ( ), qApp-> desktop ( )-> height ( ));
m_visible = false;
show ( );
}
virtual void showEvent ( QShowEvent *e )
{
QLabel::showEvent ( e );
m_visible = true;
}
virtual void paintEvent ( QPaintEvent *e )
{
QLabel::paintEvent ( e );
if ( m_visible )
qApp-> quit ( );
}
private:
bool m_visible;
};
void LoginWindowImpl::login ( )
{
const char *user = ::strdup ( m_user-> currentText ( ). local8Bit ( ));
const char *pass = ::strdup ( m_password-> text ( ). local8Bit ( ));
if ( !user || !user [0] )
return;
if ( !pass )
pass = "";
if ( lApp-> checkPassword ( user, pass )) {
Config cfg ( "opie-login" );
cfg. setGroup ( "General" );
cfg. writeEntry ( "LastLogin", user );
cfg. write ( );
lApp-> setLoginAs ( user );
// Draw a big wait icon, the image can be altered in later revisions
m_input-> hideInputMethod ( );
new WaitLogo ( );
// WaitLogo::showEvent() calls qApp-> quit()
}
else {
QMessageBox::warning ( this, tr( "Wrong password" ), tr( "The given password is incorrect." ));
m_password-> clear ( );
}
}
diff --git a/core/opie-login/loginwindowimpl.h b/core/opie-login/loginwindowimpl.h
index e769b03..df8dbbb 100644
--- a/core/opie-login/loginwindowimpl.h
+++ b/core/opie-login/loginwindowimpl.h
@@ -1,61 +1,63 @@
/*
               =. This file is part of the OPIE Project
             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org>
           .>+-=
 _;:,     .>    :=|. This file is free software; you can
.> <`_,   >  .   <= redistribute it and/or modify it under
:`=1 )Y*s>-.--   : the terms of the GNU General Public
.="- .-=="i,     .._ License as published by the Free Software
 - .   .-<_>     .<> Foundation; either version 2 of the License,
     ._= =}       : or (at your option) any later version.
    .%`+i>       _;_.
    .i_,=:_.      -<s. This file is distributed in the hope that
     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
    : ..    .:,     . . . without even the implied warranty of
    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
..}^=.=       =       ; Public License for more details.
++=   -.     .`     .:
 :     =  ...= . :.=- You should have received a copy of the GNU
 -.   .:....=;==+<; General Public License along with this file;
  -_. . .   )=.  = see the file COPYING. If not, write to the
    --        :-=` Free Software Foundation, Inc.,
59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef __OPIE_LOGINWINDOW_IMPL_H__
#define __OPIE_LOGINWINDOW_IMPL_H__
#include "loginwindow.h"
class InputMethods;
class LoginWindowImpl : public LoginWindow {
Q_OBJECT
public:
LoginWindowImpl ( );
virtual ~LoginWindowImpl ( );
protected slots:
void restart ( );
void quit ( );
void showIM ( );
void suspend ( );
void backlight ( );
void login ( );
void toggleEchoMode ( bool );
+ void calcMaxWindowRect ( );
+ void receive ( const QCString &, const QByteArray & );
protected:
virtual void keyPressEvent ( QKeyEvent *e );
QStringList getAllUsers ( );
bool changeIdentity ( const char *user );
private:
InputMethods *m_input;
};
#endif