summaryrefslogtreecommitdiff
path: root/core
Side-by-side diff
Diffstat (limited to 'core') (more/less context) (show whitespace changes)
-rw-r--r--core/apps/.cvsignore1
-rw-r--r--core/apps/embeddedkonsole/MyPty.cpp1
-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.cpp28
-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.c5
-rw-r--r--core/settings/launcher/tabdialog.cpp6
-rw-r--r--core/settings/security/security.cpp72
-rw-r--r--core/settings/security/security.h6
-rw-r--r--core/settings/security/securitybase.ui253
18 files changed, 521 insertions, 72 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
@@ -160,12 +160,13 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int)
ioctl(STDIN_FILENO, TIOCSCTTY, 0);
#endif
tcgetattr( STDIN_FILENO, &ttmode );
ttmode.c_cc[VINTR] = 3;
ttmode.c_cc[VERASE] = 8;
tcsetattr( STDIN_FILENO, TCSANOW, &ttmode );
+ if(strlen(getenv("TERM"))<=0)
setenv("TERM","vt100",1);
setenv("COLORTERM","0",1);
if (getuid() == 0) {
char msg[] = "WARNING: You are running this shell as root!\n";
write(ttyfd, msg, sizeof(msg));
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,10 +1,10 @@
-#/**********************************************************************
-** 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
** 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.
**
@@ -15,24 +15,29 @@
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
+#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>
#include <qstatusbar.h>
#include <qdragobject.h>
#include <qpixmap.h>
#include <qpopupmenu.h>
#include <qpe/qpemenubar.h>
#include <qpe/qpetoolbar.h>
+#include <qpe/qcopenvelope_qws.h>
#include <qtoolbutton.h>
#include <qiconset.h>
#include <qfile.h>
#include <qtextstream.h>
#include <qstylesheet.h>
#include <qmessagebox.h>
@@ -45,27 +50,31 @@
#include <qdatastream.h>
#include <qprinter.h>
#include <qsimplerichtext.h>
#include <qpaintdevicemetrics.h>
#include <qaction.h>
-#include <ctype.h>
+#include <cctype>
+#include "magictextbrowser.h"
HelpBrowser::HelpBrowser( QWidget* parent, const char *name, WFlags f )
: QMainWindow( parent, name, f ),
selectedURL()
{
init( "index.html" );
}
+
+
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() ),
this, SLOT( textChanged() ) );
setCentralWidget( browser );
setToolBarsMovable( FALSE );
@@ -77,61 +86,74 @@ void HelpBrowser::init( const QString& _home )
toolbar->setHorizontalStretchable( TRUE );
QPEMenuBar *menu = new QPEMenuBar( toolbar );
toolbar = new QPEToolBar( this );
// 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 );
forwardAction = new QAction( tr( "Forward" ), Resource::loadIconSet( "forward" ), QString::null, 0, this, 0 );
connect( forwardAction, SIGNAL( activated() ), browser, SLOT( forward() ) );
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 );
bookm = new QPopupMenu( this );
bookm->insertItem( tr( "Add Bookmark" ), this, SLOT( addBookmark() ) );
bookm->insertItem( tr( "Remove from Bookmarks" ), this, SLOT( removeBookmark() ) );
bookm->insertSeparator();
connect( bookm, SIGNAL( activated( int ) ),
this, SLOT( bookmChosen( int ) ) );
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&)),
this, SLOT(appMessage(const QCString&, const QByteArray&)) );
}
void HelpBrowser::appMessage(const QCString& msg, const QByteArray& data)
{
+ qDebug("reached appMessage");
if ( msg == "showFile(QString)" ) {
QDataStream ds(data,IO_ReadOnly);
QString fn;
ds >> fn;
setDocument( fn );
+
+ QPEApplication::setKeepRunning();
+
+ showMaximized();
+ setActiveWindow();
+ raise();
}
}
void HelpBrowser::setDocument( const QString &doc )
{
if ( !doc.isEmpty() )
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,10 +1,10 @@
/**********************************************************************
-** 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
** 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.
**
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
@@ -1,11 +1,11 @@
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
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lqpe
INTERFACES =
TARGET = helpbrowser
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,10 +1,10 @@
/**********************************************************************
-** 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
** 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.
**
@@ -17,18 +17,17 @@
** not clear to you.
**
**********************************************************************/
#include "helpbrowser.h"
-#include <qpe/qpeapplication.h>
+#include <qtopia/qpeapplication.h>
int main( int argc, char ** argv )
{
QPEApplication a( argc, 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
@@ -566,26 +566,24 @@ void TextEdit::fileNew() {
newFile(DocLnk());
}
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() );
QStringList text;
text << "text/*";
map.insert(tr("Text"), text );
text << "*";
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 );
}
else
updateCaption();
}
@@ -973,13 +971,13 @@ void TextEdit::updateCaption( const QString &name ) {
if ( s.isEmpty() ) {
s = tr( "Unnamed" );
currentFileName=s;
}
// if(s.left(1) == "/")
// s = s.right(s.length()-1);
- setCaption( s + " - " + tr("Text Editor") );
+ setCaption( tr("%1 - Text Editor").arg( s ) );
}
}
void TextEdit::setDocument(const QString& fileref) {
if(fileref != "Unnamed") {
currentFileName=fileref;
@@ -1019,13 +1017,13 @@ void TextEdit::changeFont() {
}
void TextEdit::editDelete() {
switch ( QMessageBox::warning(this,tr("Text Editor"),
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:
if(doc) {
doc->removeFiles();
clear();
setCaption( tr("Text Editor") );
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
@@ -51,12 +51,13 @@
#include <qwindowsystem_qws.h>
#include <qwsmouse_qws.h>
#include <qmessagebox.h>
#include <qlabel.h>
#include <qtimer.h>
#include <qfile.h>
+#include <qtextstream.h>
#include "loginapplication.h"
#include "loginwindowimpl.h"
#include "calibrate.h"
using namespace Opie;
@@ -71,12 +72,13 @@ static struct option long_options [] = {
{ 0, 0, 0, 0 }
};
int main ( int argc, char **argv )
{
+ int userExited = 0;
pid_t ppid = ::getpid ( );
if ( ::geteuid ( ) != 0 ) {
::fprintf ( stderr, "%s can only be executed by root. (or chmod +s)", argv [0] );
return 1;
}
@@ -134,17 +136,23 @@ int main ( int argc, char **argv )
else {
::syslog ( LOG_ERR, "Respawning too fast -- going down\n" );
break;
}
}
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;
default :
killedbysig = WTERMSIG( status );
break;
@@ -159,45 +167,53 @@ int main ( int argc, char **argv )
QApplication *app = new QApplication ( argc, argv, QApplication::GuiServer );
app-> setFont ( QFont ( "Helvetica", 10 ));
app-> setStyle ( new QPEStyle ( ));
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 );
l-> resize ( app-> desktop ( )-> width ( ), app-> desktop ( )-> height ( ));
l-> show ( );
QTimer::singleShot ( 3000, app, SLOT( quit ( )));
app-> exec ( );
delete app;
qApp = 0;
}
}
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" );
if ( !user. isEmpty ( ))
autolog = ::strdup ( user. latin1 ( ));
}
- if ( 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 ( ))
::exit ( LoginApplication::login ( ));
else
::exit ( 0 );
}
- else
+ else {
::exit ( login_main ( argc, argv, ppid ));
}
}
+ }
return 0;
}
void sigterm ( int /*sig*/ )
{
::exit ( 0 );
@@ -352,13 +368,13 @@ int login_main ( int argc, char **argv, pid_t ppid )
if ( app-> loginAs ( )) {
if ( app-> changeIdentity ( )) {
app-> login ( );
// 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;
}
else {
QMessageBox::critical ( 0, LoginWindowImpl::tr( "Failure" ), LoginWindowImpl::tr( "Could not switch to new user identity" ));
rc = 2;
}
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
@@ -17,10 +17,6 @@ $(DESTDIR)/opiealarm: opiealarm.c
chmod u+s $(DESTDIR)/opiealarm
chown root $(DESTDIR)/opiealarm 2>/dev/null || echo -e "\nopiealarm must be owned by root to work correctly.\n"
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
@@ -90,12 +90,13 @@ int fork_with_pidfile ( void )
exit ( 0 );
}
else if ( pid < 0 ) {
perror ( "forking failed" );
return 0;
}
+ // sleep( 60 );
// child process needs to react to SIGUSR2. This is sent when
// a new opiealarm process is started.
signal ( SIGUSR2, sig_handler_child );
@@ -203,13 +204,13 @@ int main ( int argc, char **argv )
return opt;
}
int suspend ( int fix_rtc )
{
- FILE *fp;
+ FILE *fp = NULL;
char buf [64];
time_t alrt, syst, rtct;
struct tm alr, sys, rtc;
int fd;
int rtc_sys_diff;
@@ -255,13 +256,13 @@ int suspend ( int fix_rtc )
break; // ( 1, TIMEFILE );
if ( !fgets ( buf, sizeof( buf ) - 1, fp ))
break; // ( 1, TIMEFILE );
fclose ( fp );
- fp = 0;
+ fp = NULL;
alrt = atoi ( buf ); // get the alarm time
if ( alrt == 0 )
break; // ( 0, TIMEFILE " contains an invalid time description" );
alrt -= 5; // wake up 5 sec before the specified time
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
@@ -88,15 +88,15 @@ public:
setSelectionMode ( QIconView::NoSelection );
setBackgroundMode ( PaletteBase );
setViewMode ( TabConfig::Icon );
calculateGrid ( Bottom );
- 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 );
setMaximumHeight ( firstItem ( )-> height ( ) + 16 );
}
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
@@ -16,20 +16,24 @@
** 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>
#include <qpe/qpedialog.h>
#include <qcheckbox.h>
#include <qpushbutton.h>
#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 )
{
valid=FALSE;
Config cfg("Security");
@@ -53,14 +57,31 @@ Security::Security( QWidget* parent, const char* name, WFlags fl )
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();
dl = new QPEDialogListener(this);
showMaximized();
}
@@ -74,12 +95,16 @@ void Security::updateGUI()
bool empty = passcode.isEmpty();
changepasscode->setText( empty ? tr("Set passcode" )
: tr("Change passcode" ) );
passcode_poweron->setEnabled( !empty );
clearpasscode->setEnabled( !empty );
+
+ autologinToggle->setChecked(autoLogin);
+ userlist->setEnabled(autoLogin);
+
}
void Security::show()
{
valid=FALSE;
@@ -157,12 +182,42 @@ void Security::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits)
}
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)
{
int auth_peer,auth_peer_bits;
parseNet(sn,auth_peer,auth_peer_bits);
selectNet(auth_peer,auth_peer_bits);
}
@@ -186,13 +241,30 @@ void Security::applySecurity()
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()
{
QString new1;
QString 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
@@ -40,24 +40,30 @@ protected:
void done(int);
private slots:
void changePassCode();
void clearPassCode();
void setSyncNet(const QString&);
+ void changeLoginName(int);
+ void toggleAutoLogin(bool);
+
private:
+ void loadUsers(void);
bool telnetAvailable() const;
bool sshAvailable() const;
void updateGUI();
static void parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits);
void selectNet(int auth_peer,int auth_peer_bits);
QString enterPassCode(const QString&);
QString passcode;
bool valid;
+ bool autoLogin;
+ QString autoLoginName;
QPEDialogListener *dl;
};
#endif // SECURITY_H
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
@@ -8,36 +8,83 @@
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
- <width>277</width>
- <height>328</height>
+ <width>329</width>
+ <height>483</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<string>Security Settings</string>
</property>
<property>
<name>layoutMargin</name>
</property>
<property>
<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>
+ <class>QTabWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TabWidget2</cstring>
+ </property>
+ <property>
+ <name>layoutMargin</name>
</property>
- <widget row="0" column="0" >
+ <widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>tab</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>Passcode</string>
+ </attribute>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>6</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <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>
@@ -73,29 +120,158 @@
<name>text</name>
<string>Clear passcode</string>
</property>
</widget>
</hbox>
</widget>
- <widget row="1" column="0" >
+ <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 row="3" column="0" >
- <class>QTabWidget</class>
+ <widget>
+ <class>QLabel</class>
<property stdset="1">
<name>name</name>
- <cstring>TabWidget2</cstring>
+ <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>margin</name>
+ <number>6</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </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>
<property stdset="1">
<name>name</name>
<cstring>tab</cstring>
</property>
@@ -103,12 +279,31 @@
<name>title</name>
<string>Sync</string>
</attribute>
<vbox>
<property stdset="1">
<name>margin</name>
+ <number>6</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Sync</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
<number>11</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>6</number>
</property>
@@ -119,12 +314,16 @@
<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>
@@ -181,35 +380,33 @@
<name>editable</name>
<bool>true</bool>
</property>
</widget>
</vbox>
</widget>
- </widget>
- <widget row="2" column="0" >
- <class>QLabel</class>
- <property stdset="1">
+ <spacer>
+ <property>
<name>name</name>
- <cstring>TextLabel1</cstring>
+ <cstring>Spacer1</cstring>
</property>
<property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>7</vsizetype>
- </sizepolicy>
+ <name>orientation</name>
+ <enum>Vertical</enum>
</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>
+ <name>sizeType</name>
+ <enum>Expanding</enum>
</property>
<property>
- <name>vAlign</name>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
</property>
+ </spacer>
+ </vbox>
</widget>
- </grid>
+ </widget>
+ </vbox>
</widget>
</UI>