summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/desktop.cpp76
1 files changed, 38 insertions, 38 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp
index 1ec477c..5aba8dd 100644
--- a/core/launcher/desktop.cpp
+++ b/core/launcher/desktop.cpp
@@ -295,450 +295,450 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e )
return QPEApplication::qwsEventFilter( e );
}
#endif
void DesktopApplication::psTimeout()
{
qpedesktop->checkMemory(); // in case no events are being generated
*ps = PowerStatusManager::readStatus();
if ( (ps->batteryStatus() == PowerStatus::VeryLow ) ) {
pa->alert( tr( "Battery is running very low." ), 6 );
}
if ( ps->batteryStatus() == PowerStatus::Critical ) {
pa->alert( tr( "Battery level is critical!\n"
"Keep power off until power restored!" ), 1 );
}
if ( ps->backupBatteryStatus() == PowerStatus::VeryLow ) {
pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 3 );
}
}
void DesktopApplication::sendCard()
{
delete cardSendTimer;
cardSendTimer = 0;
QString card = getenv("HOME");
card += "/Applications/addressbook/businesscard.vcf";
if ( QFile::exists( card ) ) {
QCopEnvelope e("QPE/Obex", "send(QString,QString,QString)");
QString mimetype = "text/x-vCard";
e << tr("business card") << card << mimetype;
}
}
#if defined(QPE_HAVE_MEMALERTER)
QPE_MEMALERTER_IMPL
#endif
//===========================================================================
Desktop::Desktop() :
QWidget( 0, 0, WStyle_Tool | WStyle_Customize ),
qcopBridge( 0 ),
transferServer( 0 ),
packageSlave( 0 )
{
qpedesktop = this;
// bg = new Info( this );
tb = new TaskBar;
launcher = new Launcher( 0, 0, WStyle_Customize | QWidget::WGroupLeader );
connect(launcher, SIGNAL(busy()), tb, SLOT(startWait()));
connect(launcher, SIGNAL(notBusy(const QString&)), tb, SLOT(stopWait(const QString&)));
int displayw = qApp->desktop()->width();
int displayh = qApp->desktop()->height();
QSize sz = tb->sizeHint();
setGeometry( 0, displayh-sz.height(), displayw, sz.height() );
tb->setGeometry( 0, displayh-sz.height(), displayw, sz.height() );
tb->show();
launcher->showMaximized();
launcher->show();
launcher->raise();
#if defined(QPE_HAVE_MEMALERTER)
initMemalerter();
#endif
// start services
startTransferServer();
(void) new IrServer( this );
rereadVolumes();
packageSlave = new PackageSlave( this );
connect(qApp, SIGNAL(volumeChanged(bool)), this, SLOT(rereadVolumes()));
qApp->installEventFilter( this );
}
void Desktop::show()
{
login(TRUE);
QWidget::show();
}
Desktop::~Desktop()
{
delete launcher;
delete tb;
delete qcopBridge;
delete transferServer;
}
bool Desktop::recoverMemory()
{
return tb->recoverMemory();
}
void Desktop::checkMemory()
{
#if defined(QPE_HAVE_MEMALERTER)
static bool ignoreNormal=FALSE;
static bool existingMessage=FALSE;
if(existingMessage)
return; // don't show a second message while still on first
existingMessage = TRUE;
switch ( memstate ) {
case Unknown:
break;
case Low:
memstate = Unknown;
if ( recoverMemory() )
ignoreNormal = TRUE;
else
QMessageBox::warning( 0 , "Memory Status",
"The memory smacks of shortage. \n"
"Please save data. " );
break;
case Normal:
memstate = Unknown;
if ( ignoreNormal )
ignoreNormal = FALSE;
else
QMessageBox::information ( 0 , "Memory Status",
"There is enough memory again." );
break;
case VeryLow:
memstate = Unknown;
QMessageBox::critical( 0 , "Memory Status",
"The memory is very low. \n"
"Please end this application \n"
"immediately." );
recoverMemory();
}
existingMessage = FALSE;
#endif
}
static bool isVisibleWindow(int wid)
{
const QList<QWSWindow> &list = qwsServer->clientWindows();
QWSWindow* w;
for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
if ( w->winId() == wid )
return !w->isFullyObscured();
}
return FALSE;
}
static bool hasVisibleWindow(const QString& clientname)
{
const QList<QWSWindow> &list = qwsServer->clientWindows();
QWSWindow* w;
for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
if ( w->client()->identity() == clientname && !w->isFullyObscured() )
return TRUE;
}
return FALSE;
}
void Desktop::raiseLauncher()
{
Config cfg("qpe"); //F12 'Home'
cfg.setGroup("AppsKey");
QString tempItem;
tempItem = cfg.readEntry("Middle","Home");
if(tempItem == "Home" || tempItem.isEmpty()) {
if ( isVisibleWindow(launcher->winId()) )
launcher->nextView();
else
launcher->raise();
} else {
QCopEnvelope e("QPE/System","execute(QString)");
e << tempItem;
}
}
void Desktop::executeOrModify(const QString& appLnkFile)
{
AppLnk lnk(MimeType::appsFolderName() + "/" + appLnkFile);
if ( lnk.isValid() ) {
- QCString app = lnk.exec().utf8();
- Global::terminateBuiltin("calibrate");
- if ( QCopChannel::isRegistered("QPE/Application/" + app) ) {
- MRUList::addTask(&lnk);
- if ( hasVisibleWindow(app) )
- QCopChannel::send("QPE/Application/" + app, "nextView()");
- else
- QCopChannel::send("QPE/Application/" + app, "raise()");
- } else {
- lnk.execute();
- }
+ QCString app = lnk.exec().utf8();
+ Global::terminateBuiltin("calibrate");
+ if ( QCopChannel::isRegistered("QPE/Application/" + app) ) {
+ MRUList::addTask(&lnk);
+ if ( hasVisibleWindow(app) )
+ QCopChannel::send("QPE/Application/" + app, "nextView()");
+ else
+ QCopChannel::send("QPE/Application/" + app, "raise()");
+ } else {
+ lnk.execute();
+ }
}
}
void Desktop::raiseDatebook()
{
- Config cfg("qpe"); //F9 'Activity'
- cfg.setGroup("AppsKey");
+ Config cfg( "qpe" ); //F9 'Activity'
+ cfg.setGroup( "AppsKey" );
QString tempItem;
- tempItem = cfg.readEntry("LeftEnd","Calender");
- if(tempItem == "Calender" || tempItem.isEmpty()) executeOrModify("Applications/datebook.desktop");
- else {
- QCopEnvelope e("QPE/System","execute(QString)");
- e << tempItem;
+ tempItem = cfg.readEntry( "LeftEnd" , "Calender" );
+ if ( tempItem == "Calender" || tempItem.isEmpty() ) {
+ tempItem = "datebook";
}
+ QCopEnvelope e( "QPE/System", "execute(QString)" );
+ e << tempItem;
}
void Desktop::raiseContacts()
{
- Config cfg("qpe"); //F10, 'Contacts'
- cfg.setGroup("AppsKey");
+ Config cfg( "qpe" ); //F10, 'Contacts'
+ cfg.setGroup( "AppsKey" );
QString tempItem;
- tempItem = cfg.readEntry("Left2nd","Address Book");
- if(tempItem == "Address Book" || tempItem.isEmpty()) executeOrModify("Applications/addressbook.desktop");
- else {
- QCopEnvelope e("QPE/System","execute(QString)");
- e << tempItem;
+ tempItem = cfg.readEntry( "Left2nd", "Address Book" );
+ if ( tempItem == "Address Book" || tempItem.isEmpty() ) {
+ tempItem = "addressbook";
}
+ QCopEnvelope e("QPE/System","execute(QString)");
+ e << tempItem;
}
void Desktop::raiseMenu()
{
- Config cfg("qpe"); //F11, 'Menu'
- cfg.setGroup("AppsKey");
+ 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();
+ 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'
- cfg.setGroup("AppsKey");
+ Config cfg( "qpe" ); //F13, 'Mail'
+ cfg.setGroup( "AppsKey" );
QString tempItem;
- tempItem = cfg.readEntry("RightEnd","Mail");
- if(tempItem == "Mail" || tempItem == "qtmail" || tempItem.isEmpty()) executeOrModify("Applications/qtmail.desktop");
- else {
- QCopEnvelope e("QPE/System","execute(QString)");
- e << 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();
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)
execl( "/bin/sh", "sh", 0 );
#else
execl( (qpeDir()+"/bin/qpe").latin1(), "qpe", 0 );
#endif
exit(1);
#endif
}
void Desktop::startTransferServer()
{
// start qcop bridge server
qcopBridge = new QCopBridge( 4243 );
if ( !qcopBridge->ok() ) {
delete qcopBridge;
qcopBridge = 0;
}
// start transfer server
transferServer = new TransferServer( 4242 );
if ( !transferServer->ok() ) {
delete transferServer;
transferServer = 0;
}
if ( !transferServer || !qcopBridge )
startTimer( 2000 );
}