summaryrefslogtreecommitdiff
authorsandman <sandman>2002-07-27 23:33:26 (UTC)
committer sandman <sandman>2002-07-27 23:33:26 (UTC)
commit4baf36396739502c5471950e29f18954cca4517b (patch) (side-by-side diff)
tree46b25659b442666b4b5153fa8210d86e6708b47b
parent9cc89b6a54ee267953b0422c4607097d075ecab9 (diff)
downloadopie-4baf36396739502c5471950e29f18954cca4517b.zip
opie-4baf36396739502c5471950e29f18954cca4517b.tar.gz
opie-4baf36396739502c5471950e29f18954cca4517b.tar.bz2
Update for OPIE to use opie-login
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--Makefile1
-rw-r--r--core/launcher/main.cpp12
-rw-r--r--core/opie-login/opie-login.control9
-rwxr-xr-xroot/etc/init.d/opie7
4 files changed, 16 insertions, 13 deletions
diff --git a/Makefile b/Makefile
index 28e5c41..367cfda 100644
--- a/Makefile
+++ b/Makefile
@@ -1,116 +1,117 @@
indefault: dynamic
all: default docs
LIBS=library libopie
INPUTCOMPONENTS= inputmethods/keyboard inputmethods/pickboard \
inputmethods/handwriting inputmethods/unikeyboard \
inputmethods/jumpx inputmethods/kjumpx \
inputmethods/dvorak
APPLETS= core/applets/batteryapplet core/applets/batteryapplet-ipaq \
core/applets/irdaapplet core/applets/volumeapplet \
core/applets/clockapplet core/applets/netmonapplet \
core/applets/screenshotapplet core/applets/clipboardapplet \
core/applets/cardmon core/applets/obex \
core/applets/vmemo noncore/net/netsetup/dialup \
noncore/net/netsetup/lan
MAIL= noncore/mail/libmail noncore/mail/bend
PLAYER = core/multimedia/opieplayer/libmpeg3 \
core/multimedia/opieplayer/libmad \
core/multimedia/opieplayer/wavplugin \
core/multimedia/opieplayer/modplug
COMPONENTS=$(LOCALCOMPONENTS) $(INPUTCOMPONENTS) $(APPLETS) $(MAIL) $(PLAYER)
PIMAPPS = core/pim/addressbook core/pim/datebook \
core/pim/today core/pim/todo
COREAPPS = core/apps/filebrowser core/apps/helpbrowser \
core/apps/textedit core/apps/embeddedkonsole \
core/launcher \
+ core/opie-login \
core/apps/oipkg core/apps/qcop
COREMULTIMEDIA = core/multimedia/opieplayer
CORESETTINGS = core/settings/light-and-power core/settings/security \
core/settings/systemtime core/settings/citytime \
NONCORESETTINGS =noncore/settings/language noncore/settings/rotation \
noncore/settings/appearance noncore/settings/sound \
noncore/settings/mediummount \
noncore/settings/tabmanager noncore/settings/appskey \
noncore/settings/netsystemtime \
noncore/settings/wlansetup \
NONCORETOOLS = noncore/tools/calculator noncore/tools/clock \
noncore/tools/remote noncore/tools/opie-sh noncore/apps/advancedfm
NONCORESTYLES = noncore/styles/liquid noncore/styles/theme noncore/styles/metal
GAMES = noncore/games/minesweep noncore/games/solitaire \
noncore/games/tetrix noncore/games/wordgame \
noncore/games/parashoot noncore/games/snake \
noncore/games/mindbreaker \
noncore/games/go noncore/games/qasteroids \
noncore/games/fifteen noncore/games/tictac \
noncore/games/kcheckers noncore/games/kpacman \
noncore/games/kbill
NONAPPS = noncore/apps/opie-sheet noncore/apps/tableviewer \
noncore/apps/opie-reader noncore/apps/checkbook \
noncore/apps/sysinfo \
NONNET = noncore/net/netsetup noncore/net/opieftp \
noncore/mail
NONMULT = noncore/multimedia/showimg noncore/graphics/drawpad \
noncore/graphics/qpdf noncore/apps/confedit
NONCOMM = noncore/comm/keypebble
APPS=$(LOCALAPPS) $(PIMAPPS) $(COREAPPS) \
$(COREMULTIMEDIA) $(CORESETTINGS) \
$(NONCORESETTINGS) $(NONCORETOOLS) $(NONCORESTYLES) \
$(NONAPPS) $(NONNET) $(NONMULT) \
$(NONCOMM) $(GAMES)
NONTMAKEAPPS := ipaq/opiealarm
DOCS = docs/src/opie-policy
single: mpegplayer/libmpeg3
dynamic: $(APPS) $(NONTMAKEAPPS)
docs: $(DOCS)
$(COMPONENTS): $(LIBS)
$(NONTMAKEAPPS) $(APPS): $(LIBS) $(COMPONENTS)
$(LIBS) $(COMPONENTS) $(NONTMAKEAPPS) $(APPS) $(DOCS) single:
$(MAKE) -C $@ -f Makefile
showcomponents:
@echo $(LIBS) $(APPS) $(COMPONENTS) single
clean:
$(MAKE) -C single -f Makefile $@
for dir in $(NONTMAKEAPPS) $(APPS) $(LIBS) $(COMPONENTS) $(DOCS); do $(MAKE) -C $$dir -f Makefile $@ || exit 1; done
lupdate:
for dir in $(APPS) $(LIBS) $(COMPONENTS); do $(MAKE) -C $$dir -f Makefile $@ || exit 1; done
lrelease:
for dir in $(APPS) $(LIBS) $(COMPONENTS); do $(MAKE) -C $$dir -f Makefile $@ || exit 1; done
.PHONY: default dynamic $(NONTMAKEAPPS) $(LIBS) $(APPS) $(COMPONENTS) $(DOCS) single showcomponents clean
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp
index b3c331b..a19da14 100644
--- a/core/launcher/main.cpp
+++ b/core/launcher/main.cpp
@@ -1,366 +1,354 @@
/**********************************************************************
** 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 "desktop.h"
#include "taskbar.h"
#include "stabmon.h"
#include <qpe/qpeapplication.h>
#include <qpe/network.h>
#include <qpe/config.h>
#if defined( QT_QWS_CUSTOM ) || defined( QT_QWS_IPAQ )
#include <qpe/custom.h>
#endif
#include <opie/odevice.h>
#include <qfile.h>
#include <qwindowsystem_qws.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/alarmserver.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
#include "../calibrate/calibrate.h"
#endif
-#ifdef QT_QWS_LOGIN
-#include "../login/qdmdialogimpl.h"
-#endif
-
#ifdef QT_QWS_CASSIOPEIA
static void ignoreMessage( QtMsgType, const char * )
{
}
#include <sys/mount.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <fcntl.h>
#include <qdatetime.h>
void initCassiopeia()
{
// MIPSEL-specific init - make sure /proc exists for shm
/*
if ( mount("/dev/ram0", "/", "ext2", MS_REMOUNT | MS_MGC_VAL, 0 ) ) {
perror("Remounting - / read/write");
}
*/
if ( mount("none", "/tmp", "ramfs", 0, 0 ) ) {
perror("mounting ramfs /tmp");
} else {
fprintf( stderr, "mounted /tmp\n" );
}
if ( mount("none", "/home", "ramfs", 0, 0 ) ) {
perror("mounting ramfs /home");
} else {
fprintf( stderr, "mounted /home\n" );
}
if ( mount("none","/proc","proc",0,0) ) {
perror("Mounting - /proc");
} else {
fprintf( stderr, "mounted /proc\n" );
}
if ( mount("none","/mnt","shm",0,0) ) {
perror("Mounting - shm");
}
setenv( "QTDIR", "/", 1 );
setenv( "OPIEDIR", "/", 1 );
setenv( "HOME", "/home", 1 );
mkdir( "/home/Documents", 0755 );
// set a reasonable starting date
QDateTime dt( QDate( 2001, 3, 15 ) );
QDateTime now = QDateTime::currentDateTime();
int change = now.secsTo( dt );
time_t t = ::time(0);
t += change;
stime(&t);
qInstallMsgHandler(ignoreMessage);
}
#endif
#ifdef QPE_OWNAPM
#include <sys/ioctl.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <linux/ioctl.h>
#include <qpe/global.h>
static void disableAPM()
{
int fd, cur_val, ret;
char *device = "/dev/apm_bios";
fd = open (device, O_WRONLY);
if (fd == -1) {
perror(device);
return;
}
cur_val = ioctl(fd, APM_IOCGEVTSRC, 0);
if (cur_val == -1) {
perror("ioctl");
exit(errno);
}
ret = ioctl(fd, APM_IOCSEVTSRC, cur_val & ~APM_EVT_POWER_BUTTON);
if (ret == -1) {
perror("ioctl");
return;
}
close(fd);
}
static void initAPM()
{
// So that we have to do it ourself, but better.
disableAPM();
}
#endif
#ifdef QT_DEMO_SINGLE_FLOPPY
#include <sys/mount.h>
void initFloppy()
{
mount("none","/proc","proc",0,0);
setenv( "QTDIR", "/", 0 );
setenv( "HOME", "/root", 0 );
setenv( "QWS_SIZE", "240x320", 0 );
}
#endif
void initEnvironment()
{
Config config("locale");
config.setGroup( "Location" );
QString tz = config.readEntry( "Timezone", getenv("TZ") );
// if not timezone set, pick New York
if (tz.isNull())
tz = "America/New_York";
setenv( "TZ", tz, 1 );
config.writeEntry( "Timezone", tz);
config.setGroup( "Language" );
QString lang = config.readEntry( "Language", getenv("LANG") );
if ( !lang.isNull() )
setenv( "LANG", lang, 1 );
}
static void initBacklight()
{
QCopEnvelope e("QPE/System", "setBacklight(int)" );
e << -3; // Forced on
}
class ModelKeyFilter : public QObject, public QWSServer::KeyboardFilter
{
public:
ModelKeyFilter ( ) : QObject ( 0, "MODEL_KEY_FILTER" )
{
bool doinst = false;
m_model = ODevice::inst ( )-> model ( );
m_power_timer = 0;
switch ( m_model ) {
case OMODEL_iPAQ_H31xx:
case OMODEL_iPAQ_H36xx:
case OMODEL_iPAQ_H37xx:
case OMODEL_iPAQ_H38xx: doinst = true;
break;
default : break;
}
if ( doinst )
QWSServer::setKeyboardFilter ( this );
}
virtual bool filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
{
bool kill = false;
// Rotate cursor keys 180°
switch ( m_model ) {
case OMODEL_iPAQ_H31xx:
case OMODEL_iPAQ_H38xx: {
int newkeycode = keycode;
switch ( keycode ) {
case Key_Left : newkeycode = Key_Right; break;
case Key_Right: newkeycode = Key_Left; break;
case Key_Up : newkeycode = Key_Down; break;
case Key_Down : newkeycode = Key_Up; break;
}
if ( newkeycode != keycode ) {
QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
kill = true;
}
break;
}
default: break;
}
// map Power Button short/long press to F34/F35
switch ( m_model ) {
case OMODEL_iPAQ_H31xx:
case OMODEL_iPAQ_H36xx:
case OMODEL_iPAQ_H37xx:
case OMODEL_iPAQ_H38xx: {
if ( keycode == Key_SysReq ) {
if ( isPress ) {
m_power_timer = startTimer ( 500 );
}
else if ( m_power_timer ) {
killTimer ( m_power_timer );
m_power_timer = 0;
QWSServer::sendKeyEvent ( -1, Key_F34, 0, true, false );
QWSServer::sendKeyEvent ( -1, Key_F34, 0, false, false );
}
kill = true;
}
break;
}
default: break;
}
return kill;
}
virtual void timerEvent ( QTimerEvent * )
{
killTimer ( m_power_timer );
m_power_timer = 0;
QWSServer::sendKeyEvent ( -1, Key_F35, 0, true, false );
QWSServer::sendKeyEvent ( -1, Key_F35, 0, false, false );
}
private:
OModel m_model;
int m_power_timer;
};
int initApplication( int argc, char ** argv )
{
#ifdef QT_QWS_CASSIOPEIA
initCassiopeia();
#endif
#ifdef QPE_OWNAPM
initAPM();
#endif
#ifdef QT_DEMO_SINGLE_FLOPPY
initFloppy();
#endif
initEnvironment();
#if !defined(QT_QWS_CASSIOPEIA) && !defined(QT_QWS_IPAQ) && !defined(QT_QWS_EBX)
setenv( "QWS_SIZE", "240x320", 0 );
#endif
//Don't flicker at startup:
QWSServer::setDesktopBackground( QImage() );
DesktopApplication a( argc, argv, QApplication::GuiServer );
(void) new ModelKeyFilter ( );
initBacklight();
AlarmServer::initialize();
-#if defined(QT_QWS_LOGIN)
- for( int i=0; i<a.argc(); i++ )
- if( strcmp( a.argv()[i], "-login" ) == 0 ) {
- QDMDialogImpl::login( );
- return 0;
- }
-#endif
-
Desktop *d = new Desktop();
QObject::connect( &a, SIGNAL(datebook()), d, SLOT(raiseDatebook()) );
QObject::connect( &a, SIGNAL(contacts()), d, SLOT(raiseContacts()) );
QObject::connect( &a, SIGNAL(launch()), d, SLOT(raiseLauncher()) );
QObject::connect( &a, SIGNAL(email()), d, SLOT(raiseEmail()) );
QObject::connect( &a, SIGNAL(power()), d, SLOT(togglePower()) );
QObject::connect( &a, SIGNAL(backlight()), d, SLOT(toggleLight()) );
QObject::connect( &a, SIGNAL(symbol()), d, SLOT(toggleSymbolInput()) );
QObject::connect( &a, SIGNAL(numLockStateToggle()), d, SLOT(toggleNumLockState()) );
QObject::connect( &a, SIGNAL(capsLockStateToggle()), d, SLOT(toggleCapsLockState()) );
QObject::connect( &a, SIGNAL(prepareForRestart()), d, SLOT(terminateServers()) );
(void)new SysFileMonitor(d);
Network::createServer(d);
#if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
if ( !QFile::exists( "/etc/pointercal" ) ) {
// Make sure calibration widget starts on top.
Calibrate *cal = new Calibrate;
cal->exec();
delete cal;
}
#endif
d->show();
int rv = a.exec();
delete d;
return rv;
}
int main( int argc, char ** argv )
{
#ifndef SINGLE_APP
signal( SIGCHLD, SIG_IGN );
#endif
int retVal = initApplication( argc, argv );
#ifndef SINGLE_APP
// Kill them. Kill them all.
setpgid( getpid(), getppid() );
killpg( getpid(), SIGTERM );
sleep( 1 );
killpg( getpid(), SIGKILL );
#endif
return retVal;
}
diff --git a/core/opie-login/opie-login.control b/core/opie-login/opie-login.control
new file mode 100644
index 0000000..d87fc6c
--- a/dev/null
+++ b/core/opie-login/opie-login.control
@@ -0,0 +1,9 @@
+Files: bin/opie-login
+Priority: optional
+Section: opie/system
+Maintainer: Project Opie <opie@handhelds.org>
+Architecture: arm
+Version: $QPE_VERSION-$SUB_VERSION
+Depends: opie-base ($QPE_VERSION), libopie
+Description: Multiuser login for OPIE
+ A xdm/kdm equivalent for OPIE.
diff --git a/root/etc/init.d/opie b/root/etc/init.d/opie
index b5a185e..eed69c2 100755
--- a/root/etc/init.d/opie
+++ b/root/etc/init.d/opie
@@ -1,58 +1,63 @@
#!/bin/sh
#
module_id() {
cat /proc/hal/model
}
export LOGNAME=root
export HOME=/$LOGNAME
#export QWS_DISPLAY=Transformed:Rot270:0
export QTDIR=/opt/QtPalmtop
export OPIEDIR=/opt/QtPalmtop
export QPEDIR=/opt/QtPalmtop
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OPIEDIR/lib
export PATH=$PATH:$OPIEDIR/bin
#this sets the iPaqs powerbutton to mapable
echo 1 > /proc/sys/ts/suspend_button_mode
if [ ! -x $OPIEDIR/bin/qpe ] ; then exit 0 ; fi
$OPIEDIR/bin/opie-reorgfiles
. /etc/profile
killproc() {
pid=`/bin/ps -e | /bin/sed -n -e '/\<'$1'\>/ s/^ *\([0-9][0-9]*\).*/\1/p'`
[ "$pid" != "" ] && kill $pid
}
case $1 in
'start')
echo "Starting Opie..."
cd $HOME
rm -f /etc/rc2.d/S99x # Can't have both running!
case `module_id` in
"3100" ) export QWS_DISPLAY=Transformed:Rot90:0 ;;
"3600" ) export QWS_DISPLAY=Transformed:Rot270:0 ;;
"3700" ) export QWS_DISPLAY=Transformed:Rot270:0 ;;
"3800" ) export QWS_DISPLAY=Transformed:Rot90:0 ;;
*) echo "Unknown processor type -`module_id`-!" ;;
esac
- $OPIEDIR/bin/qpe 2>/dev/null >/dev/null &
+ if [ -x $OPIEDIR/bin/opie-login ]; then
+ $OPIEDIR/bin/opie-login 2>/dev/null >/dev/null &
+ else
+ $OPIEDIR/bin/qpe 2>/dev/null >/dev/null &
+ fi
;;
'stop')
echo "Killing Opie..."
killproc qpe
+ killproc opie-login
;;
*)
echo "usage: $0 { start | stop }"
;;
esac