summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/.cvsignore1
-rw-r--r--core/apps/embeddedkonsole/MyPty.cpp3
-rw-r--r--core/apps/helpbrowser/helpbrowser.cpp48
-rw-r--r--core/apps/helpbrowser/helpbrowser.h4
-rw-r--r--core/apps/helpbrowser/helpbrowser.pro4
-rw-r--r--core/apps/helpbrowser/magictextbrowser.cpp99
-rw-r--r--core/apps/helpbrowser/magictextbrowser.h42
-rw-r--r--core/apps/helpbrowser/main.cpp9
-rw-r--r--core/apps/textedit/textedit.cpp8
-rw-r--r--core/opie-login/main.cpp30
-rw-r--r--core/opie-login/opie-login.conffiles1
-rw-r--r--core/opiealarm/Makefile4
-rw-r--r--core/opiealarm/config.in2
-rw-r--r--core/opiealarm/opiealarm.c7
-rw-r--r--core/settings/launcher/tabdialog.cpp6
-rw-r--r--core/settings/security/security.cpp258
-rw-r--r--core/settings/security/security.h6
-rw-r--r--core/settings/security/securitybase.ui465
18 files changed, 723 insertions, 274 deletions
diff --git a/core/apps/.cvsignore b/core/apps/.cvsignore
index faa68ae..6d678c6 100644
--- a/core/apps/.cvsignore
+++ b/core/apps/.cvsignore
@@ -1,2 +1 @@
-binconfig.in
config.in
diff --git a/core/apps/embeddedkonsole/MyPty.cpp b/core/apps/embeddedkonsole/MyPty.cpp
index 9adc248..7e820ad 100644
--- a/core/apps/embeddedkonsole/MyPty.cpp
+++ b/core/apps/embeddedkonsole/MyPty.cpp
@@ -164,5 +164,6 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int)
ttmode.c_cc[VERASE] = 8;
tcsetattr( STDIN_FILENO, TCSANOW, &ttmode );
- setenv("TERM","vt100",1);
+ if(strlen(getenv("TERM"))<=0)
+ setenv("TERM","vt100",1);
setenv("COLORTERM","0",1);
diff --git a/core/apps/helpbrowser/helpbrowser.cpp b/core/apps/helpbrowser/helpbrowser.cpp
index 48da7c6..531dbff 100644
--- a/core/apps/helpbrowser/helpbrowser.cpp
+++ b/core/apps/helpbrowser/helpbrowser.cpp
@@ -1,6 +1,6 @@
-#/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
+/**********************************************************************
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
-** This file is part of Qtopia Environment.
+** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
@@ -19,8 +19,12 @@
**********************************************************************/
+#define QTOPIA_INTERNAL_LANGLIST
+
#include "helpbrowser.h"
#include <qpe/qpeapplication.h>
#include <qpe/resource.h>
+#include <qpe/mimetype.h>
+#include <qpe/applnk.h>
#include <qpe/global.h>
@@ -31,4 +35,5 @@
#include <qpe/qpemenubar.h>
#include <qpe/qpetoolbar.h>
+#include <qpe/qcopenvelope_qws.h>
#include <qtoolbutton.h>
#include <qiconset.h>
@@ -49,6 +54,7 @@
#include <qaction.h>
-#include <ctype.h>
+#include <cctype>
+#include "magictextbrowser.h"
HelpBrowser::HelpBrowser( QWidget* parent, const char *name, WFlags f )
@@ -59,9 +65,12 @@ HelpBrowser::HelpBrowser( QWidget* parent, const char *name, WFlags f )
}
+
+
void HelpBrowser::init( const QString& _home )
{
- setIcon( Resource::loadPixmap( "help_icon" ) );
+ setIcon( Resource::loadPixmap( "HelpBrowser" ) );
+ setBackgroundMode( PaletteButton );
- browser = new QTextBrowser( this );
+ browser = new MagicTextBrowser( this );
browser->setFrameStyle( QFrame::Panel | QFrame::Sunken );
connect( browser, SIGNAL( textChanged() ),
@@ -81,10 +90,10 @@ void HelpBrowser::init( const QString& _home )
// addToolBar( toolbar, "Toolbar");
- //QPopupMenu* go = new QPopupMenu( this );
+ QPopupMenu* go = new QPopupMenu( this );
backAction = new QAction( tr( "Backward" ), Resource::loadIconSet( "back" ), QString::null, 0, this, 0 );
connect( backAction, SIGNAL( activated() ), browser, SLOT( backward() ) );
connect( browser, SIGNAL( backwardAvailable( bool ) ),
backAction, SLOT( setEnabled( bool ) ) );
- //backAction->addTo( go );
+ backAction->addTo( go );
backAction->addTo( toolbar );
backAction->setEnabled( FALSE );
@@ -94,12 +103,11 @@ void HelpBrowser::init( const QString& _home )
connect( browser, SIGNAL( forwardAvailable( bool ) ),
forwardAction, SLOT( setEnabled( bool ) ) );
- //forwardAction->addTo( go );
+ forwardAction->addTo( go );
forwardAction->addTo( toolbar );
forwardAction->setEnabled( FALSE );
- QAction *a = new QAction( tr( "Home" ), Resource::loadPixmap(
-"home" ), QString::null, 0, this, 0 );
+ QAction *a = new QAction( tr( "Home" ), Resource::loadIconSet( "home" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), browser, SLOT( home() ) );
- //a->addTo( go );
+ a->addTo( go );
a->addTo( toolbar );
@@ -113,9 +121,16 @@ void HelpBrowser::init( const QString& _home )
readBookmarks();
- //menu->insertItem( tr("Go"), go );
+ menu->insertItem( tr("Go"), go );
menu->insertItem( tr( "Bookmarks" ), bookm );
resize( 240, 300 );
browser->setFocus();
+ browser->setFrameStyle( QFrame::NoFrame );
+
+#if !defined(QT_NO_COP)
+ QCopChannel *addressChannel = new QCopChannel("QPE/HelpBrowser" , this );
+ connect (addressChannel, SIGNAL( received(const QCString &, const QByteArray &)),
+ this, SLOT ( appMessage(const QCString &, const QByteArray &) ) );
+#endif
connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)),
@@ -125,4 +140,5 @@ void HelpBrowser::init( const QString& _home )
void HelpBrowser::appMessage(const QCString& msg, const QByteArray& data)
{
+ qDebug("reached appMessage");
if ( msg == "showFile(QString)" ) {
QDataStream ds(data,IO_ReadOnly);
@@ -130,4 +146,10 @@ void HelpBrowser::appMessage(const QCString& msg, const QByteArray& data)
ds >> fn;
setDocument( fn );
+
+ QPEApplication::setKeepRunning();
+
+ showMaximized();
+ setActiveWindow();
+ raise();
}
}
diff --git a/core/apps/helpbrowser/helpbrowser.h b/core/apps/helpbrowser/helpbrowser.h
index 2f7153a..5f7e6b6 100644
--- a/core/apps/helpbrowser/helpbrowser.h
+++ b/core/apps/helpbrowser/helpbrowser.h
@@ -1,6 +1,6 @@
/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
-** This file is part of Qtopia Environment.
+** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
diff --git a/core/apps/helpbrowser/helpbrowser.pro b/core/apps/helpbrowser/helpbrowser.pro
index 6bb43bd..3525b7e 100644
--- a/core/apps/helpbrowser/helpbrowser.pro
+++ b/core/apps/helpbrowser/helpbrowser.pro
@@ -2,6 +2,6 @@ TEMPLATE = app
CONFIG = qt warn_on release
DESTDIR = $(OPIEDIR)/bin
-HEADERS = helpbrowser.h
-SOURCES = helpbrowser.cpp \
+HEADERS = helpbrowser.h magictextbrowser.h
+SOURCES = helpbrowser.cpp magictextbrowser.cpp \
main.cpp
INCLUDEPATH += $(OPIEDIR)/include
diff --git a/core/apps/helpbrowser/magictextbrowser.cpp b/core/apps/helpbrowser/magictextbrowser.cpp
new file mode 100644
index 0000000..8ce0325
--- a/dev/null
+++ b/core/apps/helpbrowser/magictextbrowser.cpp
@@ -0,0 +1,99 @@
+#include <qfile.h>
+#include <qstring.h>
+#include <qdragobject.h>
+#include <qregexp.h>
+
+/* need to get Global::helpPath() */
+#define QTOPIA_INTERNAL_LANGLIST
+
+#include <qtopia/global.h>
+#include <qtopia/mimetype.h>
+#include <qtopia/applnk.h>
+
+#include "magictextbrowser.h"
+
+
+
+MagicTextBrowser::MagicTextBrowser(QWidget* parent) :
+ QTextBrowser(parent){
+}
+
+void MagicTextBrowser::setSource( const QString& source ) {
+ QTextBrowser::setSource(source);
+ if ( magicQpe(source,"applications") || magicQpe(source,"games") || magicQpe(source,"settings") || magicQpe(source, "1Pim") ) // No tr
+ return;
+ if ( magicOpe(source, "applets") || magicOpe(source, "input") )
+ return;
+ // Just those are magic (for now). Could do CGI here,
+ // or in Qtopia's mime source factory.
+}
+
+bool MagicTextBrowser::magicQpe(const QString& source, const QString& name) {
+ if ( name+".html" == source || "help/"+name+".html" == source) {
+ QString fn = mimeSourceFactory()->makeAbsolute( source, context() );
+ const QMimeSource* m = mimeSourceFactory()->data( fn, context() );
+ if ( m ) {
+ QString txt;
+ if ( QTextDrag::decode(m,txt) ) {
+ QRegExp re("<qtopia-"+name+">.*</qtopia-"+name+">");
+ int start,len;
+ if ( (start=re.match(txt,0,&len))>=0 ) {
+ QString generated = generateQpe(name);
+ txt.replace(start,len,generated);
+ setText(txt);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+bool MagicTextBrowser::magicOpe( const QString& source, const QString& name ) {
+ if ( name+".html" != source && "help/"+name+".html" != source) return false;
+
+ QString fn = mimeSourceFactory()->makeAbsolute( source, context() );
+ const QMimeSource* m = mimeSourceFactory()->data(fn, context() );
+ if (!m) return false;
+
+ QString txt;
+ if ( !QTextDrag::decode(m, txt ) ) return false;
+
+ QRegExp re("<opie-"+name+">.*</opie-"+name+">");
+ int start,len;
+ if ( (start=re.match(txt,0,&len))>=0 ) {
+ QString generated = generateOpe(name);
+ txt.replace(start,len,generated);
+ setText(txt);
+ return true;
+ }
+ return false;
+}
+QString MagicTextBrowser::generateOpe(const QString& name)const {
+ if ( name == QString::fromLatin1("applets") ) {
+ return QString::fromLatin1("<h3>No Applets found</h3>");
+ }else if ( name == QString::fromLatin1("input") ) {
+ return QString::fromLatin1("<h3>No input methods available</h3>");
+ }else
+ return QString::null;
+}
+
+QString MagicTextBrowser::generateQpe(const QString& name) const {
+ QString dir = MimeType::appsFolderName()+"/"+name[0].upper()+name.mid(1);
+ AppLnkSet lnkset(dir);
+ AppLnk* lnk;
+ QString r;
+ for (QListIterator<AppLnk> it(lnkset.children()); (lnk=it.current()); ++it) {
+ QString name = lnk->name();
+ QString icon = lnk->icon();
+ QString helpFile = lnk->exec()+".html";
+ QStringList helpPath = Global::helpPath();
+ bool helpExists = FALSE;
+ for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end() && !helpExists; ++it)
+ helpExists = QFile::exists( *it + "/" + helpFile );
+
+ if ( helpExists ) {
+ r += "<h3><a href="+helpFile+"><img src="+icon+">"+name+"</a></h3>\n";
+ }
+ }
+ return r;
+}
diff --git a/core/apps/helpbrowser/magictextbrowser.h b/core/apps/helpbrowser/magictextbrowser.h
new file mode 100644
index 0000000..ff91e68
--- a/dev/null
+++ b/core/apps/helpbrowser/magictextbrowser.h
@@ -0,0 +1,42 @@
+/**********************************************************************
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
+** Copyright (C) 2003 zecke
+**
+** This file is part of the Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef HELP_BROWSER_MAGIC_TEXT_BROWSER_H
+#define HELP_BROWSER_MAGIC_TEXT_BROWSER_H
+
+#include <qtextbrowser.h>
+
+class MagicTextBrowser : public QTextBrowser {
+public:
+ MagicTextBrowser(QWidget* parent);
+
+ void setSource( const QString& source );
+
+ /** honor QPE Attributes */
+ bool magicQpe(const QString& source, const QString& name);
+ /** honor OPIE Attributes */
+ bool magicOpe(const QString& source, const QString& name );
+private:
+
+ QString generateQpe(const QString& name) const;
+ QString generateOpe(const QString& name) const;
+};
+
+#endif
diff --git a/core/apps/helpbrowser/main.cpp b/core/apps/helpbrowser/main.cpp
index 1cb10b7..b1bea56 100644
--- a/core/apps/helpbrowser/main.cpp
+++ b/core/apps/helpbrowser/main.cpp
@@ -1,6 +1,6 @@
/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
-** This file is part of Qtopia Environment.
+** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
@@ -21,5 +21,5 @@
#include "helpbrowser.h"
-#include <qpe/qpeapplication.h>
+#include <qtopia/qpeapplication.h>
int main( int argc, char ** argv )
@@ -28,6 +28,5 @@ int main( int argc, char ** argv )
HelpBrowser mw;
- mw.setCaption( HelpBrowser::tr("HelpBrowser") );
- a.showMainDocumentWidget( &mw );
+ a.showMainWidget( &mw );
return a.exec();
diff --git a/core/apps/textedit/textedit.cpp b/core/apps/textedit/textedit.cpp
index 6f96574..1c95a97 100644
--- a/core/apps/textedit/textedit.cpp
+++ b/core/apps/textedit/textedit.cpp
@@ -570,5 +570,4 @@ void TextEdit::fileOpen() {
Config cfg("TextEdit");
cfg. setGroup ( "View" );
- QString dir = cfg.readEntry("LastOpenDirectory", QPEApplication::documentDir());
QMap<QString, QStringList> map;
map.insert(tr("All"), QStringList() );
@@ -579,9 +578,8 @@ void TextEdit::fileOpen() {
map.insert(tr("All"), text );
QString str = OFileDialog::getOpenFileName( 2,
- dir ,
+ QString::null ,
QString::null, map);
if( !str.isEmpty() && QFile(str).exists() && !QFileInfo(str).isDir() )
{
- cfg.writeEntry("LastOpenDirectory", QFileInfo(str).dirPath(false));
openFile( str );
}
@@ -977,5 +975,5 @@ void TextEdit::updateCaption( const QString &name ) {
// if(s.left(1) == "/")
// s = s.right(s.length()-1);
- setCaption( s + " - " + tr("Text Editor") );
+ setCaption( tr("%1 - Text Editor").arg( s ) );
}
}
@@ -1023,5 +1021,5 @@ void TextEdit::editDelete() {
tr("Do you really want<BR>to <B>delete</B> "
"the current file\nfrom the disk?<BR>This is "
- "<B>irreversable!!</B>"),
+ "<B>irreversable!</B>"),
tr("Yes"),tr("No"),0,0,1) ) {
case 0:
diff --git a/core/opie-login/main.cpp b/core/opie-login/main.cpp
index d95a59b..7dcb5f6 100644
--- a/core/opie-login/main.cpp
+++ b/core/opie-login/main.cpp
@@ -55,4 +55,5 @@
#include <qtimer.h>
#include <qfile.h>
+#include <qtextstream.h>
#include "loginapplication.h"
@@ -75,4 +76,5 @@ static struct option long_options [] = {
int main ( int argc, char **argv )
{
+ int userExited = 0;
pid_t ppid = ::getpid ( );
@@ -138,9 +140,15 @@ int main ( int argc, char **argv )
}
int killedbysig = 0;
+ userExited=0;
+ if (WIFEXITED(status)!=0 ) {
+ if (WEXITSTATUS(status)==137) {
+ userExited=1;
+ }
+ }
if ( WIFSIGNALED( status )) {
switch ( WTERMSIG( status )) {
- case SIGINT :
case SIGTERM:
+ case SIGINT :
case SIGKILL:
break;
@@ -163,5 +171,5 @@ int main ( int argc, char **argv )
const char *sig = ::strsignal ( killedbysig );
QLabel *l = new QLabel ( 0, "sig", Qt::WStyle_Customize | Qt::WStyle_NoBorder | Qt::WStyle_Tool );
- l-> setText ( LoginWindowImpl::tr( "OPIE was terminated\nby an uncaught signal\n(%1)\n" ). arg ( sig ));
+ l-> setText ( LoginWindowImpl::tr( "Opie was terminated\nby an uncaught signal\n(%1)\n" ). arg ( sig ));
l-> setAlignment ( Qt::AlignCenter );
l-> move ( 0, 0 );
@@ -176,5 +184,6 @@ int main ( int argc, char **argv )
else {
if ( !autolog ) {
- Config cfg ( "opie-login" );
+ QString confFile=QPEApplication::qpeDir() + "/etc/opie-login.conf";
+ Config cfg ( confFile, Config::File );
cfg. setGroup ( "General" );
QString user = cfg. readEntry ( "AutoLogin" );
@@ -184,6 +193,12 @@ int main ( int argc, char **argv )
}
- if ( autolog ) {
- LoginApplication::setLoginAs ( autolog );
+ if ( autolog && !userExited ) {
+
+ QWSServer::setDesktopBackground( QImage() );
+ ODevice::inst ( )-> setDisplayStatus ( true );
+ ODevice::inst ( )-> setSoftSuspend ( false );
+ LoginApplication *app = new LoginApplication ( argc, argv, ppid );
+ LoginApplication::setLoginAs ( autolog );
+
if ( LoginApplication::changeIdentity ( ))
@@ -192,6 +207,7 @@ int main ( int argc, char **argv )
::exit ( 0 );
}
- else
+ else {
::exit ( login_main ( argc, argv, ppid ));
+ }
}
}
@@ -356,5 +372,5 @@ int login_main ( int argc, char **argv, pid_t ppid )
// if login succeeds, it never comes back
- QMessageBox::critical ( 0, LoginWindowImpl::tr( "Failure" ), LoginWindowImpl::tr( "Could not start OPIE." ));
+ QMessageBox::critical ( 0, LoginWindowImpl::tr( "Failure" ), LoginWindowImpl::tr( "Could not start Opie." ));
rc = 1;
}
diff --git a/core/opie-login/opie-login.conffiles b/core/opie-login/opie-login.conffiles
new file mode 100644
index 0000000..90645ee
--- a/dev/null
+++ b/core/opie-login/opie-login.conffiles
@@ -0,0 +1 @@
+/opt/QtPalmtop/etc/opie-login.conf
diff --git a/core/opiealarm/Makefile b/core/opiealarm/Makefile
index 0c8467e..255083d 100644
--- a/core/opiealarm/Makefile
+++ b/core/opiealarm/Makefile
@@ -21,6 +21,2 @@ clean:
-rm -f *~ core
-install:
- cp $(DESTDIR)/opiealarm $(INSTALL_ROOT)/opt/QtPalmtop/bin
- chown root $(INSTALL_ROOT)/opt/QtPalmtop/bin/opiealarm
- chmod u+s $(INSTALL_ROOT)/opt/QtPalmtop/bin/opiealarm 2>/dev/null || echo -e "\nopiealarm must be owned by root to work correctly.\n"
diff --git a/core/opiealarm/config.in b/core/opiealarm/config.in
index 2be9bd4..f86d01c 100644
--- a/core/opiealarm/config.in
+++ b/core/opiealarm/config.in
@@ -1,4 +1,4 @@
config OPIEALARM
- boolean "opie-opiealarm (Alarm daemon, sets RTC with wakeup time on suspend)"
+ boolean "Opiealarm (Alarm daemon, sets RTC with wakeup time on suspend)"
depends ! TARGET_X86
default "y"
diff --git a/core/opiealarm/opiealarm.c b/core/opiealarm/opiealarm.c
index 998cabd..90a743f 100644
--- a/core/opiealarm/opiealarm.c
+++ b/core/opiealarm/opiealarm.c
@@ -94,4 +94,5 @@ int fork_with_pidfile ( void )
return 0;
}
+ // sleep( 60 );
// child process needs to react to SIGUSR2. This is sent when
@@ -207,5 +208,5 @@ int main ( int argc, char **argv )
int suspend ( int fix_rtc )
{
- FILE *fp;
+ FILE *fp = NULL;
char buf [64];
time_t alrt, syst, rtct;
@@ -259,5 +260,5 @@ int suspend ( int fix_rtc )
fclose ( fp );
- fp = 0;
+ fp = NULL;
alrt = atoi ( buf ); // get the alarm time
@@ -372,5 +373,5 @@ int resume ( int resuspend )
remove_pidfile ( );
- // no need for system() since this process is no longer usefull anyway
+ // no need for system() since this process is no longer usefull anyway
execv ( "/opt/QtPalmtop/bin/qcop", argv );
diff --git a/core/settings/launcher/tabdialog.cpp b/core/settings/launcher/tabdialog.cpp
index 5f68010..de99a09 100644
--- a/core/settings/launcher/tabdialog.cpp
+++ b/core/settings/launcher/tabdialog.cpp
@@ -92,7 +92,7 @@ public:
- new SampleItem ( this, tr( "Sample 1" ), Resource::loadPixmap ( "datebook/DateBook" ));
- new SampleItem ( this, tr( "Sample 2" ), Resource::loadPixmap ( "Calibrate" ));
- new SampleItem ( this, tr( "Sample 3" ), Resource::loadPixmap ( "UnknownDocument" ));
+ new SampleItem ( this, QObject::tr( "Sample 1" ), Resource::loadPixmap ( "datebook/DateBook" ));
+ new SampleItem ( this, QObject::tr( "Sample 2" ), Resource::loadPixmap ( "Calibrate" ));
+ new SampleItem ( this, QObject::tr( "Sample 3" ), Resource::loadPixmap ( "UnknownDocument" ));
setBackgroundType ( TabConfig::Ruled, QString::null );
diff --git a/core/settings/security/security.cpp b/core/settings/security/security.cpp
index 4701506..75a181b 100644
--- a/core/settings/security/security.cpp
+++ b/core/settings/security/security.cpp
@@ -1,23 +1,24 @@
/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
-**
-** This file is part of Qtopia Environment.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
+ ** Copyright (C) 2000 Trolltech AS. All rights reserved.
+ **
+ ** This file is part of Qtopia Environment.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.trolltech.com/gpl/ for GPL licensing information.
+ **
+ ** Contact info@trolltech.com if any conditions of this licensing are
+ ** not clear to you.
+ **
+ **********************************************************************/
#include "security.h"
+#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include <qpe/password.h>
@@ -28,7 +29,10 @@
#include <qcombobox.h>
#include <qmessagebox.h>
+#include <qfile.h>
+#include <qlistview.h>
+#include <qtextstream.h>
-Security::Security( QWidget* parent, const char* name, WFlags fl )
- : SecurityBase( parent, name, TRUE, fl )
+ Security::Security( QWidget* parent, const char* name, WFlags fl )
+: SecurityBase( parent, name, TRUE, fl )
{
valid=FALSE;
@@ -42,21 +46,38 @@ Security::Security( QWidget* parent, const char* name, WFlags fl )
selectNet(auth_peer,auth_peer_bits);
connect(syncnet, SIGNAL(textChanged(const QString&)),
- this, SLOT(setSyncNet(const QString&)));
+ this, SLOT(setSyncNet(const QString&)));
/*
- cfg.setGroup("Remote");
- if ( telnetAvailable() )
- telnet->setChecked(cfg.readEntry("allow_telnet"));
- else
- telnet->hide();
-
- if ( sshAvailable() )
- ssh->setChecked(cfg.readEntry("allow_ssh"));
- else
- ssh->hide();
- */
+ cfg.setGroup("Remote");
+ if ( telnetAvailable() )
+ telnet->setChecked(cfg.readEntry("allow_telnet"));
+ else
+ telnet->hide();
+ if ( sshAvailable() )
+ ssh->setChecked(cfg.readEntry("allow_ssh"));
+ else
+ ssh->hide();
+ */
+
+ QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf";
+ Config loginCfg(configFile,Config::File);
+
+ loginCfg.setGroup("General");
+ autoLoginName=loginCfg.readEntry("AutoLogin","");
+
+ if (autoLoginName.stripWhiteSpace().isEmpty()) {
+ autoLogin=false;
+ } else {
+ autoLogin=true;
+ }
+
+
+ connect(autologinToggle, SIGNAL(toggled(bool)), this, SLOT(toggleAutoLogin(bool)));
+ connect(userlist, SIGNAL(activated(int)), this, SLOT(changeLoginName(int)));
connect(changepasscode,SIGNAL(clicked()), this, SLOT(changePassCode()));
connect(clearpasscode,SIGNAL(clicked()), this, SLOT(clearPassCode()));
+
+ loadUsers();
updateGUI();
@@ -75,7 +96,11 @@ void Security::updateGUI()
changepasscode->setText( empty ? tr("Set passcode" )
- : tr("Change passcode" ) );
+ : tr("Change passcode" ) );
passcode_poweron->setEnabled( !empty );
clearpasscode->setEnabled( !empty );
+
+ autologinToggle->setChecked(autoLogin);
+ userlist->setEnabled(autoLogin);
+
}
@@ -87,16 +112,16 @@ void Security::show()
SecurityBase::show();
if ( passcode.isEmpty() ) {
- // could insist...
- //changePassCode();
- //if ( passcode.isEmpty() )
- //reject();
+ // could insist...
+ //changePassCode();
+ //if ( passcode.isEmpty() )
+ //reject();
} else {
- QString pc = enterPassCode(tr("Enter passcode"));
- if ( pc != passcode ) {
- QMessageBox::critical(this, tr("Passcode incorrect"),
- tr("The passcode entered is incorrect.\nAccess denied"));
- reject();
- return;
- }
+ QString pc = enterPassCode(tr("Enter passcode"));
+ if ( pc != passcode ) {
+ QMessageBox::critical(this, tr("Passcode incorrect"),
+ tr("The passcode entered is incorrect.\nAccess denied"));
+ reject();
+ return;
+ }
}
setEnabled(TRUE);
@@ -120,20 +145,20 @@ void Security::selectNet(int auth_peer,int auth_peer_bits)
QString sn;
if ( auth_peer_bits == 0 && auth_peer == 0 ) {
- sn = tr("Any");
+ sn = tr("Any");
} else if ( auth_peer_bits == 32 && auth_peer == 0 ) {
- sn = tr("None");
+ sn = tr("None");
} else {
- sn =
- QString::number((auth_peer>>24)&0xff) + "."
- + QString::number((auth_peer>>16)&0xff) + "."
- + QString::number((auth_peer>>8)&0xff) + "."
- + QString::number((auth_peer>>0)&0xff) + "/"
- + QString::number(auth_peer_bits);
+ sn =
+ QString::number((auth_peer>>24)&0xff) + "."
+ + QString::number((auth_peer>>16)&0xff) + "."
+ + QString::number((auth_peer>>8)&0xff) + "."
+ + QString::number((auth_peer>>0)&0xff) + "/"
+ + QString::number(auth_peer_bits);
}
for (int i=0; i<syncnet->count(); i++) {
- if ( syncnet->text(i).left(sn.length()) == sn ) {
- syncnet->setCurrentItem(i);
- return;
- }
+ if ( syncnet->text(i).left(sn.length()) == sn ) {
+ syncnet->setCurrentItem(i);
+ return;
+ }
}
qDebug("No match for \"%s\"",sn.latin1());
@@ -144,21 +169,51 @@ void Security::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits)
auth_peer=0;
if ( sn == tr("Any") ) {
- auth_peer = 0;
- auth_peer_bits = 0;
+ auth_peer = 0;
+ auth_peer_bits = 0;
} else if ( sn == tr("None") ) {
- auth_peer = 0;
- auth_peer_bits = 32;
+ auth_peer = 0;
+ auth_peer_bits = 32;
} else {
- int x=0;
- for (int i=0; i<4; i++) {
- int nx = sn.find(QChar(i==3 ? '/' : '.'),x);
- auth_peer = (auth_peer<<8)|sn.mid(x,nx-x).toInt();
- x = nx+1;
- }
- uint n = (uint)sn.find(' ',x)-x;
- auth_peer_bits = sn.mid(x,n).toInt();
+ int x=0;
+ for (int i=0; i<4; i++) {
+ int nx = sn.find(QChar(i==3 ? '/' : '.'),x);
+ auth_peer = (auth_peer<<8)|sn.mid(x,nx-x).toInt();
+ x = nx+1;
+ }
+ uint n = (uint)sn.find(' ',x)-x;
+ auth_peer_bits = sn.mid(x,n).toInt();
}
}
+void Security::loadUsers ( void )
+{
+ QFile passwd("/etc/passwd");
+ if ( passwd.open(IO_ReadOnly) ) {
+ QTextStream t( &passwd );
+ QString s;
+ QStringList account;
+ while ( !t.eof() ) {
+ account = QStringList::split(':',t.readLine());
+
+ // Hide disabled accounts
+ if (*account.at(1)!="*") {
+
+ userlist->insertItem(*account.at(0));
+ // Highlight this item if it is set to autologinToggle
+ if ( *account.at(0) == autoLoginName)
+ userlist->setCurrentItem(userlist->count()-1);
+ }
+ }
+ passwd.close();
+ }
+
+}
+void Security::toggleAutoLogin(bool val)
+{
+ autoLogin=val;
+ userlist->setEnabled(val);
+ if (!autoLogin)
+ autoLoginName=userlist->currentText();
+}
void Security::setSyncNet(const QString& sn)
{
@@ -171,26 +226,43 @@ void Security::applySecurity()
{
if ( valid ) {
- Config cfg("Security");
- cfg.setGroup("Passcode");
- cfg.writeEntry("passcode",passcode);
- cfg.writeEntry("passcode_poweron",passcode_poweron->isChecked());
- cfg.setGroup("Sync");
- int auth_peer=0;
- int auth_peer_bits;
- QString sn = syncnet->currentText();
- parseNet(sn,auth_peer,auth_peer_bits);
- cfg.writeEntry("auth_peer",auth_peer);
- cfg.writeEntry("auth_peer_bits",auth_peer_bits);
- /*
- cfg.setGroup("Remote");
- if ( telnetAvailable() )
- cfg.writeEntry("allow_telnet",telnet->isChecked());
- if ( sshAvailable() )
- cfg.writeEntry("allow_ssh",ssh->isChecked());
- // ### write ssh/telnet sys config files
- */
+ Config cfg("Security");
+ cfg.setGroup("Passcode");
+ cfg.writeEntry("passcode",passcode);
+ cfg.writeEntry("passcode_poweron",passcode_poweron->isChecked());
+ cfg.setGroup("Sync");
+ int auth_peer=0;
+ int auth_peer_bits;
+ QString sn = syncnet->currentText();
+ parseNet(sn,auth_peer,auth_peer_bits);
+ cfg.writeEntry("auth_peer",auth_peer);
+ cfg.writeEntry("auth_peer_bits",auth_peer_bits);
+ /*
+ cfg.setGroup("Remote");
+ if ( telnetAvailable() )
+ cfg.writeEntry("allow_telnet",telnet->isChecked());
+ if ( sshAvailable() )
+ cfg.writeEntry("allow_ssh",ssh->isChecked());
+ // ### write ssh/telnet sys config files
+ */
+
+ QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf";
+ Config loginCfg(configFile,Config::File);
+ loginCfg.setGroup("General");
+
+ if (autoLogin) {
+ loginCfg.writeEntry("AutoLogin",autoLoginName);
+ } else {
+ loginCfg.removeEntry("AutoLogin");
+ }
+
}
}
+void Security::changeLoginName( int idx )
+{
+ autoLoginName = userlist->text(idx);;
+ updateGUI();
+}
+
void Security::changePassCode()
{
@@ -199,10 +271,10 @@ void Security::changePassCode()
do {
- new1 = enterPassCode(tr("Enter new passcode"));
- if ( new1.isNull() )
- return;
- new2 = enterPassCode(tr("Re-enter new passcode"));
- if ( new2.isNull() )
- return;
+ new1 = enterPassCode(tr("Enter new passcode"));
+ if ( new1.isNull() )
+ return;
+ new2 = enterPassCode(tr("Re-enter new passcode"));
+ if ( new2.isNull() )
+ return;
} while (new1 != new2);
diff --git a/core/settings/security/security.h b/core/settings/security/security.h
index efc83a2..2f18f91 100644
--- a/core/settings/security/security.h
+++ b/core/settings/security/security.h
@@ -44,6 +44,10 @@ private slots:
void clearPassCode();
void setSyncNet(const QString&);
+ void changeLoginName(int);
+ void toggleAutoLogin(bool);
+
private:
+ void loadUsers(void);
bool telnetAvailable() const;
bool sshAvailable() const;
@@ -56,4 +60,6 @@ private:
QString passcode;
bool valid;
+ bool autoLogin;
+ QString autoLoginName;
QPEDialogListener *dl;
diff --git a/core/settings/security/securitybase.ui b/core/settings/security/securitybase.ui
index c2a8953..da25f39 100644
--- a/core/settings/security/securitybase.ui
+++ b/core/settings/security/securitybase.ui
@@ -12,6 +12,6 @@
<x>0</x>
<y>0</y>
- <width>277</width>
- <height>328</height>
+ <width>329</width>
+ <height>483</height>
</rect>
</property>
@@ -26,72 +26,248 @@
<name>layoutSpacing</name>
</property>
- <grid>
+ <vbox>
<property stdset="1">
<name>margin</name>
- <number>3</number>
+ <number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
- <number>3</number>
+ <number>0</number>
</property>
- <widget row="0" column="0" >
- <class>QLayoutWidget</class>
+ <widget>
+ <class>QTabWidget</class>
<property stdset="1">
<name>name</name>
- <cstring>Layout1</cstring>
+ <cstring>TabWidget2</cstring>
</property>
<property>
- <name>layoutSpacing</name>
+ <name>layoutMargin</name>
</property>
- <hbox>
- <property stdset="1">
- <name>margin</name>
- <number>0</number>
- </property>
+ <widget>
+ <class>QWidget</class>
<property stdset="1">
- <name>spacing</name>
- <number>-1</number>
+ <name>name</name>
+ <cstring>tab</cstring>
</property>
- <widget>
- <class>QPushButton</class>
+ <attribute>
+ <name>title</name>
+ <string>Passcode</string>
+ </attribute>
+ <vbox>
<property stdset="1">
- <name>name</name>
- <cstring>changepasscode</cstring>
+ <name>margin</name>
+ <number>6</number>
</property>
<property stdset="1">
- <name>text</name>
- <string>Change passcode</string>
+ <name>spacing</name>
+ <number>6</number>
</property>
- </widget>
- <widget>
- <class>QPushButton</class>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox4</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Passcode</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</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>-1</number>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>changepasscode</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Change passcode</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>clearpasscode</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Clear passcode</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>passcode_poweron</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Require pass code at power-on</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;P&gt;Pass code protection provides a minimal level of protection from casual access to this device.</string>
+ </property>
+ <property stdset="1">
+ <name>textFormat</name>
+ <enum>RichText</enum>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignTop|AlignLeft</set>
+ </property>
+ <property>
+ <name>vAlign</name>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer3</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>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>tab</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>Login</string>
+ </attribute>
+ <vbox>
<property stdset="1">
- <name>name</name>
- <cstring>clearpasscode</cstring>
+ <name>margin</name>
+ <number>6</number>
</property>
<property stdset="1">
- <name>text</name>
- <string>Clear passcode</string>
+ <name>spacing</name>
+ <number>6</number>
</property>
- </widget>
- </hbox>
- </widget>
- <widget row="1" column="0" >
- <class>QCheckBox</class>
- <property stdset="1">
- <name>name</name>
- <cstring>passcode_poweron</cstring>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>Require pass code at power-on</string>
- </property>
- </widget>
- <widget row="3" column="0" >
- <class>QTabWidget</class>
- <property stdset="1">
- <name>name</name>
- <cstring>TabWidget2</cstring>
- </property>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Login</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>autologinToggle</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Login Automatically</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>userlist</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</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>QWidget</class>
@@ -107,5 +283,5 @@
<property stdset="1">
<name>margin</name>
- <number>11</number>
+ <number>6</number>
</property>
<property stdset="1">
@@ -114,102 +290,123 @@
</property>
<widget>
- <class>QLabel</class>
+ <class>QGroupBox</class>
<property stdset="1">
<name>name</name>
- <cstring>TextLabel1_2</cstring>
+ <cstring>GroupBox2</cstring>
</property>
<property stdset="1">
- <name>text</name>
- <string>Accept sync from network:</string>
+ <name>title</name>
+ <string>Sync</string>
</property>
- </widget>
- <widget>
- <class>QComboBox</class>
- <item>
- <property>
- <name>text</name>
- <string>192.168.129.0/24 (default)</string>
- </property>
- </item>
- <item>
- <property>
- <name>text</name>
- <string>192.168.1.0/24</string>
- </property>
- </item>
- <item>
- <property>
- <name>text</name>
- <string>192.168.0.0/16</string>
- </property>
- </item>
- <item>
- <property>
- <name>text</name>
- <string>172.16.0.0/12</string>
- </property>
- </item>
- <item>
- <property>
- <name>text</name>
- <string>10.0.0.0/8</string>
- </property>
- </item>
- <item>
- <property>
- <name>text</name>
- <string>1.0.0.0/8</string>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
</property>
- </item>
- <item>
- <property>
- <name>text</name>
- <string>Any</string>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
</property>
- </item>
- <item>
- <property>
- <name>text</name>
- <string>None</string>
- </property>
- </item>
- <property stdset="1">
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Accept sync from network:</string>
+ </property>
+ <property stdset="1">
+ <name>textFormat</name>
+ <enum>RichText</enum>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>192.168.129.0/24 (default)</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>192.168.1.0/24</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>192.168.0.0/16</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>172.16.0.0/12</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>10.0.0.0/8</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>1.0.0.0/8</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Any</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>None</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>syncnet</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property>
<name>name</name>
- <cstring>syncnet</cstring>
+ <cstring>Spacer1</cstring>
</property>
<property stdset="1">
- <name>editable</name>
- <bool>true</bool>
+ <name>orientation</name>
+ <enum>Vertical</enum>
</property>
- </widget>
+ <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>
- <widget row="2" column="0" >
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>TextLabel1</cstring>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>7</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>&lt;P&gt;Pass code protection provides a minimal level of protection from casual access to this device.</string>
- </property>
- <property stdset="1">
- <name>alignment</name>
- <set>AlignTop|AlignLeft</set>
- </property>
- <property>
- <name>vAlign</name>
- </property>
- </widget>
- </grid>
+ </vbox>
</widget>
</UI>