summaryrefslogtreecommitdiff
authorsandman <sandman>2002-09-05 21:24:48 (UTC)
committer sandman <sandman>2002-09-05 21:24:48 (UTC)
commit70f3ed196a462eda3dd6554daddf210438aacc8a (patch) (side-by-side diff)
treee19256fdc5ceaa5c0b4d1492e15fc42ee87d7692
parentbaea6aaf4f0c9672a4383470a9389bca1a20bdba (diff)
downloadopie-70f3ed196a462eda3dd6554daddf210438aacc8a.zip
opie-70f3ed196a462eda3dd6554daddf210438aacc8a.tar.gz
opie-70f3ed196a462eda3dd6554daddf210438aacc8a.tar.bz2
- remove obsolete cassiopeia and single-floppy code
- use the new ODevice setPowerButtonHandler() to set and reset power button handling
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/desktop.cpp2
-rw-r--r--core/launcher/main.cpp132
2 files changed, 7 insertions, 127 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp
index bf19280..dee5535 100644
--- a/core/launcher/desktop.cpp
+++ b/core/launcher/desktop.cpp
@@ -528,192 +528,194 @@ void Desktop::raiseMenu()
Config cfg( "qpe" ); //F11, 'Menu
cfg.setGroup( "AppsKey" );
QString tempItem;
tempItem = cfg.readEntry( "Right2nd" , "Popup Menu" );
if ( tempItem == "Popup Menu" || tempItem.isEmpty() ) {
Global::terminateBuiltin( "calibrate" );
tb->startMenu()->launch();
} else {
QCopEnvelope e("QPE/System","execute(QString)");
e << tempItem;
}
}
void Desktop::raiseEmail()
{
Config cfg( "qpe" ); //F13, 'Mail' // only in zaurus, on ipaq mail key is F11
cfg.setGroup( "AppsKey" );
QString tempItem;
tempItem = cfg.readEntry( "RightEnd", "Mail" );
if ( tempItem == "Mail" || tempItem == "qtmail" || tempItem.isEmpty() ) {
tempItem = "mail";
}
QCopEnvelope e("QPE/System","execute(QString)");
e << tempItem;
}
// autoStarts apps on resume and start
void Desktop::execAutoStart()
{
QString appName;
int delay;
QDateTime now = QDateTime::currentDateTime();
Config cfg( "autostart" );
cfg.setGroup( "AutoStart" );
appName = cfg.readEntry( "Apps", "" );
delay = ( cfg.readEntry( "Delay", "0" ) ).toInt();
// If the time between suspend and resume was longer then the
// value saved as delay, start the app
if ( suspendTime.secsTo( now ) >= ( delay * 60 ) && !appName.isEmpty() ) {
QCopEnvelope e( "QPE/System", "execute(QString)" );
e << QString( appName );
}
}
#if defined(QPE_HAVE_TOGGLELIGHT)
#include <qpe/config.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <linux/ioctl.h>
#include <time.h>
#endif
static bool blanked=FALSE;
static void blankScreen()
{
if ( !qt_screen ) return;
/* Should use a big black window instead.
QGfx* g = qt_screen->screenGfx();
g->fillRect(0,0,qt_screen->width(),qt_screen->height());
delete g;
*/
blanked = TRUE;
}
static void darkScreen()
{
extern void qpe_setBacklight(int);
qpe_setBacklight(0); // force off
}
void Desktop::togglePower()
{
extern void qpe_setBacklight ( int ); // We need to toggle the LCD fast - no time to send a QCop
static bool excllock = false;
if ( excllock )
return;
excllock = true;
bool wasloggedin = loggedin;
loggedin=0;
suspendTime = QDateTime::currentDateTime();
// qpe_setBacklight ( 0 ); // force LCD off (sandman: why ????)
if ( wasloggedin )
blankScreen();
+ qDebug ( "OPIE suspending\n" );
+
ODevice::inst ( )-> suspend ( );
QWSServer::screenSaverActivate ( false );
qpe_setBacklight ( -3 ); // force LCD on
{
QCopEnvelope("QPE/Card", "mtabChanged()" ); // might have changed while asleep
}
if ( wasloggedin )
login(TRUE);
execAutoStart();
//qcopBridge->closeOpenConnections();
excllock = false;
}
void Desktop::toggleLight()
{
QCopEnvelope e("QPE/System", "setBacklight(int)");
e << -2; // toggle
}
void Desktop::toggleSymbolInput()
{
tb->toggleSymbolInput();
}
void Desktop::toggleNumLockState()
{
tb->toggleNumLockState();
}
void Desktop::toggleCapsLockState()
{
tb->toggleCapsLockState();
}
void Desktop::styleChange( QStyle &s )
{
QWidget::styleChange( s );
int displayw = qApp->desktop()->width();
int displayh = qApp->desktop()->height();
QSize sz = tb->sizeHint();
tb->setGeometry( 0, displayh-sz.height(), displayw, sz.height() );
}
void DesktopApplication::shutdown()
{
if ( type() != GuiServer )
return;
ShutdownImpl *sd = new ShutdownImpl( 0, 0, WDestructiveClose );
connect( sd, SIGNAL(shutdown(ShutdownImpl::Type)),
this, SLOT(shutdown(ShutdownImpl::Type)) );
sd->showMaximized();
}
void DesktopApplication::shutdown( ShutdownImpl::Type t )
{
switch ( t ) {
case ShutdownImpl::ShutdownSystem:
execlp("shutdown", "shutdown", "-h", "now", (void*)0);
break;
case ShutdownImpl::RebootSystem:
execlp("shutdown", "shutdown", "-r", "now", (void*)0);
break;
case ShutdownImpl::RestartDesktop:
restart();
break;
case ShutdownImpl::TerminateDesktop:
prepareForTermination(FALSE);
// This is a workaround for a Qt bug
// clipboard applet has to stop its poll timer, or Qt/E
// will hang on quit() right before it emits aboutToQuit()
emit aboutToQuit ( );
quit();
break;
}
}
void DesktopApplication::restart()
{
prepareForTermination(TRUE);
#ifdef Q_WS_QWS
for ( int fd = 3; fd < 100; fd++ )
close( fd );
#if defined(QT_DEMO_SINGLE_FLOPPY)
execl( "/sbin/init", "qpe", 0 );
#elif defined(QT_QWS_CASSIOPEIA)
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp
index 5cf624b..ca0bbe4 100644
--- a/core/launcher/main.cpp
+++ b/core/launcher/main.cpp
@@ -1,387 +1,265 @@
/**********************************************************************
** 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)
+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
#include "../calibrate/calibrate.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 ) {
if ( m_power_timer )
killTimer ( m_power_timer );
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
+ ODevice::inst ( )-> setPowerButtonHandler ( ODevice::OPIE );
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();
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;
+ ODevice::inst ( )-> setPowerButtonHandler ( ODevice::KERNEL );
+
return rv;
}
static const char *pidfile_path = "/var/run/opie.pid";
void create_pidfile ( )
{
FILE *f;
if (( f = ::fopen ( pidfile_path, "w" ))) {
::fprintf ( f, "%d", getpid ( ));
::fclose ( f );
}
}
void remove_pidfile ( )
{
::unlink ( pidfile_path );
}
void handle_sigterm ( int /* sig */ )
{
if ( qApp )
qApp-> quit ( );
}
int main( int argc, char ** argv )
{
-#ifndef SINGLE_APP
::signal( SIGCHLD, SIG_IGN );
::signal ( SIGTERM, handle_sigterm );
::signal ( SIGINT, handle_sigterm );
::setsid ( );
::setpgid ( 0, 0 );
::atexit ( remove_pidfile );
create_pidfile ( );
-#endif
int retVal = initApplication ( argc, argv );
-#ifndef SINGLE_APP
// Kill them. Kill them all.
::kill ( 0, SIGTERM );
- ::sleep( 1 );
+ ::sleep ( 1 );
::kill ( 0, SIGKILL );
-#endif
return retVal;
}