-rw-r--r-- | core/launcher/server.cpp | 467 |
1 files changed, 255 insertions, 212 deletions
diff --git a/core/launcher/server.cpp b/core/launcher/server.cpp index 5ae517b..3bef36e 100644 --- a/core/launcher/server.cpp +++ b/core/launcher/server.cpp @@ -219,312 +219,354 @@ void Server::activate(const ODeviceButton* button, bool held) bool vis = hasVisibleWindow(app, app != "qpe"); if ( sr.message() == "raise()" && vis ) { sr.setMessage("nextView()"); } else { // "back door" sr << (int)vis; } sr.send(); } #endif } #ifdef Q_WS_QWS - typedef struct KeyOverride { ushort scan_code; QWSServer::KeyMap map; }; static const KeyOverride jp109keys[] = { - { 0x03, { Qt::Key_2, '2' , 0x22 , 0xffff } }, - { 0x07, { Qt::Key_6, '6' , '&' , 0xffff } }, - { 0x08, { Qt::Key_7, '7' , '\'' , 0xffff } }, - { 0x09, { Qt::Key_8, '8' , '(' , 0xffff } }, - { 0x0a, { Qt::Key_9, '9' , ')' , 0xffff } }, - { 0x0b, { Qt::Key_0, '0' , 0xffff , 0xffff } }, - { 0x0c, { Qt::Key_Minus, '-' , '=' , 0xffff } }, - { 0x0d, { Qt::Key_AsciiCircum,'^' , '~' , '^' - 64 } }, - { 0x1a, { Qt::Key_At, '@' , '`' , 0xffff } }, - { 0x1b, { Qt::Key_BraceLeft, '[' , '{' , '[' - 64 } }, - { 0x27, { Qt::Key_Semicolon, ';' , '+' , 0xffff } }, - { 0x28, { Qt::Key_Colon, ':' , '*' , 0xffff } }, - { 0x29, { Qt::Key_Zenkaku_Hankaku, 0xffff , 0xffff , 0xffff } }, - { 0x2b, { Qt::Key_BraceRight, ']' , '}' , ']'-64 } }, - { 0x70, { Qt::Key_Hiragana_Katakana, 0xffff , 0xffff , 0xffff } }, - { 0x73, { Qt::Key_Backslash, '\\' , '_' , 0xffff } }, - { 0x79, { Qt::Key_Henkan, 0xffff , 0xffff , 0xffff } }, - { 0x7b, { Qt::Key_Muhenkan, 0xffff , 0xffff , 0xffff } }, - { 0x7d, { Qt::Key_yen, 0x00a5 , '|' , 0xffff } }, - { 0x00, { 0, 0xffff , 0xffff , 0xffff } } + { 0x03, { Qt::Key_2, '2' , 0x22 , 0xffff } }, + { 0x07, { Qt::Key_6, '6' , '&' , 0xffff } }, + { 0x08, { Qt::Key_7, '7' , '\'' , 0xffff } }, + { 0x09, { Qt::Key_8, '8' , '(' , 0xffff } }, + { 0x0a, { Qt::Key_9, '9' , ')' , 0xffff } }, + { 0x0b, { Qt::Key_0, '0' , 0xffff, 0xffff } }, + { 0x0c, { Qt::Key_Minus, '-' , '=' , 0xffff } }, + { 0x0d, { Qt::Key_AsciiCircum, '^' , '~' , '^'-64 } }, + { 0x1a, { Qt::Key_At, '@' , '`' , 0xffff } }, + { 0x1b, { Qt::Key_BraceLeft, '[' , '{' , '['-64 } }, + { 0x27, { Qt::Key_Semicolon, ';' , '+' , 0xffff } }, + { 0x28, { Qt::Key_Colon, ':' , '*' , 0xffff } }, + { 0x29, { Qt::Key_Zenkaku_Hankaku, 0xffff, 0xffff, 0xffff } }, + { 0x2b, { Qt::Key_BraceRight, ']' , '}' , ']'-64 } }, + { 0x70, { Qt::Key_Hiragana_Katakana, 0xffff, 0xffff, 0xffff } }, + { 0x73, { Qt::Key_Backslash, '\\' , '_' , 0xffff } }, + { 0x79, { Qt::Key_Henkan, 0xffff, 0xffff, 0xffff } }, + { 0x7b, { Qt::Key_Muhenkan, 0xffff, 0xffff, 0xffff } }, + { 0x7d, { Qt::Key_yen, 0x00a5, '|' , 0xffff } }, + { 0x00, { 0, 0xffff, 0xffff, 0xffff } } }; bool Server::setKeyboardLayout( const QString &kb ) { //quick demo version that can be extended QIntDict<QWSServer::KeyMap> *om = 0; if ( kb == "us101" ) { // No tr om = 0; } else if ( kb == "jp109" ) { om = new QIntDict<QWSServer::KeyMap>(37); const KeyOverride *k = jp109keys; while ( k->scan_code ) { om->insert( k->scan_code, &k->map ); k++; } } QWSServer::setOverrideKeys( om ); return TRUE; } - #endif void Server::systemMsg(const QCString &msg, const QByteArray &data) { QDataStream stream( data, IO_ReadOnly ); if ( msg == "securityChanged()" ) { if ( transferServer ) transferServer->authorizeConnections(); + if ( qcopBridge ) qcopBridge->authorizeConnections(); - } - /* ### FIXME support TempScreenSaverMode */ + } else + #if 0 - else if ( msg == "setTempScreenSaverMode(int,int)" ) { - int mode, pid; - stream >> mode >> pid; - tsmMonitor->setTempMode(mode, pid); - } + /* ### FIXME support TempScreenSaverMode */ + if ( msg == "setTempScreenSaverMode(int,int)" ) { + int mode, pid; + stream >> mode >> pid; + tsmMonitor->setTempMode(mode, pid); + } else #endif - else if ( msg == "linkChanged(QString)" ) { - QString link; - stream >> link; - odebug << "desktop.cpp systemMsg -> linkchanged( " << link << " )" << oendl; - docList->linkChanged(link); - } else if ( msg == "serviceChanged(QString)" ) { - MimeType::updateApplications(); - } else if ( msg == "mkdir(QString)" ) { - QString dir; - stream >> dir; - if ( !dir.isEmpty() ) - mkdir( dir ); - } else if ( msg == "rdiffGenSig(QString,QString)" ) { - QString baseFile, sigFile; - stream >> baseFile >> sigFile; - QRsync::generateSignature( baseFile, sigFile ); - } else if ( msg == "rdiffGenDiff(QString,QString,QString)" ) { - QString baseFile, sigFile, deltaFile; - stream >> baseFile >> sigFile >> deltaFile; - QRsync::generateDiff( baseFile, sigFile, deltaFile ); - } else if ( msg == "rdiffApplyPatch(QString,QString)" ) { - QString baseFile, deltaFile; - stream >> baseFile >> deltaFile; - if ( !QFile::exists( baseFile ) ) { - QFile f( baseFile ); - f.open( IO_WriteOnly ); - f.close(); - } - QRsync::applyDiff( baseFile, deltaFile ); + + if ( msg == "linkChanged(QString)" ) { + QString link; + stream >> link; + odebug << "desktop.cpp systemMsg -> linkchanged( " << link << " )" << oendl; + docList->linkChanged(link); + } else + + if ( msg == "serviceChanged(QString)" ) { + MimeType::updateApplications(); + } else + + if ( msg == "mkdir(QString)" ) { + QString dir; + stream >> dir; + if ( !dir.isEmpty() ) + mkdir( dir ); + } else + + if ( msg == "rdiffGenSig(QString,QString)" ) { + QString baseFile, sigFile; + stream >> baseFile >> sigFile; + QRsync::generateSignature( baseFile, sigFile ); + } else + + if ( msg == "rdiffGenDiff(QString,QString,QString)" ) { + QString baseFile, sigFile, deltaFile; + stream >> baseFile >> sigFile >> deltaFile; + QRsync::generateDiff( baseFile, sigFile, deltaFile ); + } else + + if ( msg == "rdiffApplyPatch(QString,QString)" ) { + QString baseFile, deltaFile; + stream >> baseFile >> deltaFile; + if ( !QFile::exists( baseFile ) ) { + QFile f( baseFile ); + f.open( IO_WriteOnly ); + f.close(); + } + QRsync::applyDiff( baseFile, deltaFile ); #ifndef QT_NO_COP - QCopEnvelope e( "QPE/Desktop", "patchApplied(QString)" ); - e << baseFile; + QCopEnvelope e( "QPE/Desktop", "patchApplied(QString)" ); + e << baseFile; #endif - } else if ( msg == "rdiffCleanup()" ) { - mkdir( "/tmp/rdiff" ); - QDir dir; - dir.setPath( "/tmp/rdiff" ); - QStringList entries = dir.entryList(); - for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it ) - dir.remove( *it ); - } else if ( msg == "sendHandshakeInfo()" ) { - QString home = getenv( "HOME" ); + } else + + if ( msg == "rdiffCleanup()" ) { + mkdir( "/tmp/rdiff" ); + QDir dir; + dir.setPath( "/tmp/rdiff" ); + QStringList entries = dir.entryList(); + for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it ) + dir.remove( *it ); + } else + + if ( msg == "sendHandshakeInfo()" ) { + QString home = getenv( "HOME" ); #ifndef QT_NO_COP - QCopEnvelope e( "QPE/Desktop", "handshakeInfo(QString,bool)" ); - e << home; - int locked = (int) ServerApplication::screenLocked(); - e << locked; + QCopEnvelope e( "QPE/Desktop", "handshakeInfo(QString,bool)" ); + e << home; + int locked = (int) ServerApplication::screenLocked(); + e << locked; #endif + } else - } /* * QtopiaDesktop relies on the major number * to start with 1. We're at 0.9 * so wee need to fake at least 1.4 to be able * to sync with QtopiaDesktop1.6 */ - else if ( msg == "sendVersionInfo()" ) { - QCopEnvelope e( "QPE/Desktop", "versionInfo(QString,QString)" ); - /* ### FIXME Architecture ### */ - e << QString::fromLatin1("1.7") << "Uncustomized Device"; - } else if ( msg == "sendCardInfo()" ) { + if ( msg == "sendVersionInfo()" ) { + QCopEnvelope e( "QPE/Desktop", "versionInfo(QString,QString)" ); + /* ### FIXME Architecture ### */ + e << QString::fromLatin1("1.7") << "Uncustomized Device"; + } else + + if ( msg == "sendCardInfo()" ) { #ifndef QT_NO_COP - QCopEnvelope e( "QPE/Desktop", "cardInfo(QString)" ); + QCopEnvelope e( "QPE/Desktop", "cardInfo(QString)" ); #endif - storage->update(); - const QList<FileSystem> &fs = storage->fileSystems(); - QListIterator<FileSystem> it ( fs ); - QString s; - QString homeDir = getenv("HOME"); - QString homeFs, homeFsPath; - for ( ; it.current(); ++it ) { - int k4 = (*it)->blockSize()/256; - if ( (*it)->isRemovable() ) { - s += (*it)->name() + "=" + (*it)->path() + "/Documents " // No tr - + QString::number( (*it)->availBlocks() * k4/4 ) - + "K " + (*it)->options() + ";"; - } else if ( homeDir.contains( (*it)->path() ) && - (*it)->path().length() > homeFsPath.length() ) { - homeFsPath = (*it)->path(); - homeFs = - (*it)->name() + "=" + homeDir + "/Documents " // No tr - + QString::number( (*it)->availBlocks() * k4/4 ) - + "K " + (*it)->options() + ";"; + storage->update(); + const QList<FileSystem> &fs = storage->fileSystems(); + QListIterator<FileSystem> it ( fs ); + QString s; + QString homeDir = getenv("HOME"); + QString homeFs, homeFsPath; + for ( ; it.current(); ++it ) { + int k4 = (*it)->blockSize()/256; + if ( (*it)->isRemovable() ) { + s += (*it)->name() + "=" + (*it)->path() + "/Documents " // No tr + + QString::number( (*it)->availBlocks() * k4/4 ) + + "K " + (*it)->options() + ";"; + } else if ( homeDir.contains( (*it)->path() ) && + (*it)->path().length() > homeFsPath.length() ) { + homeFsPath = (*it)->path(); + homeFs = + (*it)->name() + "=" + homeDir + "/Documents " // No tr + + QString::number( (*it)->availBlocks() * k4/4 ) + + "K " + (*it)->options() + ";"; + } } - } - if ( !homeFs.isEmpty() ) - s += homeFs; - + if ( !homeFs.isEmpty() ) + s += homeFs; #ifndef QT_NO_COP - e << s; + e << s; #endif - } else if ( msg == "sendSyncDate(QString)" ) { - QString app; - stream >> app; - Config cfg( "qpe" ); - cfg.setGroup("SyncDate"); + } else + + if ( msg == "sendSyncDate(QString)" ) { + QString app; + stream >> app; + Config cfg( "qpe" ); + cfg.setGroup("SyncDate"); #ifndef QT_NO_COP - QCopEnvelope e( "QPE/Desktop", "syncDate(QString,QString)" ); - e << app << cfg.readEntry( app ); + QCopEnvelope e( "QPE/Desktop", "syncDate(QString,QString)" ); + e << app << cfg.readEntry( app ); #endif - //odebug << "QPE/System sendSyncDate for " << app.latin1() << ": response " - // << cfg.readEntry( app ).latin1() << oendl; - } else if ( msg == "setSyncDate(QString,QString)" ) { - QString app, date; - stream >> app >> date; - Config cfg( "qpe" ); - cfg.setGroup("SyncDate"); - cfg.writeEntry( app, date ); - //odebug << "setSyncDate(QString,QString) " << app << " " << date << "" << oendl; - } else if ( msg == "startSync(QString)" ) { - QString what; - stream >> what; - delete syncDialog; - syncDialog = new SyncDialog( this, what ); - syncDialog->show(); - connect( syncDialog, SIGNAL(cancel()), SLOT(cancelSync()) ); - } else if ( msg == "stopSync()") { - delete syncDialog; - syncDialog = 0; - } else if (msg == "restoreDone(QString)") { - docList->restoreDone(); - } else if ( msg == "getAllDocLinks()" ) { - docList->sendAllDocLinks(); - } + //odebug << "QPE/System sendSyncDate for " << app.latin1() << ": response " + // << cfg.readEntry( app ).latin1() << oendl; + } else + + if ( msg == "setSyncDate(QString,QString)" ) { + QString app, date; + stream >> app >> date; + Config cfg( "qpe" ); + cfg.setGroup("SyncDate"); + cfg.writeEntry( app, date ); + //odebug << "setSyncDate(QString,QString) " << app << " " << date << "" << oendl; + } else + + if ( msg == "startSync(QString)" ) { + QString what; + stream >> what; + delete syncDialog; + syncDialog = new SyncDialog( this, what ); + syncDialog->show(); + connect( syncDialog, SIGNAL(cancel()), SLOT(cancelSync()) ); + } else + + if ( msg == "stopSync()") { + delete syncDialog; + syncDialog = 0; + } else + + if (msg == "restoreDone(QString)") { + docList->restoreDone(); + } else + + if ( msg == "getAllDocLinks()" ) { + docList->sendAllDocLinks(); + } else + #ifdef Q_WS_QWS - else if ( msg == "setMouseProto(QString)" ) { - QString mice; - stream >> mice; - setenv("QWS_MOUSE_PROTO",mice.latin1(),1); - qwsServer->openMouse(); - } else if ( msg == "setKeyboard(QString)" ) { - QString kb; - stream >> kb; - setenv("QWS_KEYBOARD",kb.latin1(),1); - qwsServer->openKeyboard(); - - } else if ( msg == "setKeyboardAutoRepeat(int,int)" ) { - int delay, period; - stream >> delay >> period; - qwsSetKeyboardAutoRepeat( delay, period ); - Config cfg( "qpe" ); - cfg.setGroup("Keyboard"); - cfg.writeEntry( "RepeatDelay", delay ); - cfg.writeEntry( "RepeatPeriod", period ); - } else if ( msg == "setKeyboardLayout(QString)" ) { - QString kb; - stream >> kb; - setKeyboardLayout( kb ); - Config cfg( "qpe" ); - cfg.setGroup("Keyboard"); - cfg.writeEntry( "Layout", kb ); - } else if ( msg == "autoStart(QString)" ) { + if ( msg == "setMouseProto(QString)" ) { + QString mice; + stream >> mice; + setenv("QWS_MOUSE_PROTO",mice.latin1(),1); + qwsServer->openMouse(); + } else + + if ( msg == "setKeyboard(QString)" ) { + QString kb; + stream >> kb; + setenv("QWS_KEYBOARD",kb.latin1(),1); + qwsServer->openKeyboard(); + } else + + if ( msg == "setKeyboardAutoRepeat(int,int)" ) { + int delay, period; + stream >> delay >> period; + qwsSetKeyboardAutoRepeat( delay, period ); + Config cfg( "qpe" ); + cfg.setGroup("Keyboard"); + cfg.writeEntry( "RepeatDelay", delay ); + cfg.writeEntry( "RepeatPeriod", period ); + } else + + if ( msg == "setKeyboardLayout(QString)" ) { + QString kb; + stream >> kb; + setKeyboardLayout( kb ); + Config cfg( "qpe" ); + cfg.setGroup("Keyboard"); + cfg.writeEntry( "Layout", kb ); + } else + + if ( msg == "autoStart(QString)" ) { QString appName; stream >> appName; Config cfg( "autostart" ); cfg.setGroup( "AutoStart" ); if ( appName.compare("clear") == 0){ cfg.writeEntry("Apps", ""); } - } else if ( msg == "autoStart(QString,QString)" ) { + } else + + if ( msg == "autoStart(QString,QString)" ) { QString modifier, appName; stream >> modifier >> appName; Config cfg( "autostart" ); cfg.setGroup( "AutoStart" ); if ( modifier.compare("add") == 0 ){ // only add if appname is entered if (!appName.isEmpty()) { cfg.writeEntry("Apps", appName); } } else if (modifier.compare("remove") == 0 ) { // need to change for multiple entries // actually remove is right now simular to clear, but in future there // should be multiple apps in autostart possible. QString checkName; checkName = cfg.readEntry("Apps", ""); if (checkName == appName) { cfg.writeEntry("Apps", ""); } } // case the autostart feature should be delayed - } else if ( msg == "autoStart(QString,QString,QString)") { - QString modifier, appName, delay; - stream >> modifier >> appName >> delay; + } else + + if ( msg == "autoStart(QString,QString,QString)") { + QString modifier, appName, delay; + stream >> modifier >> appName >> delay; Config cfg( "autostart" ); cfg.setGroup( "AutoStart" ); if ( modifier.compare("add") == 0 ){ // only add it appname is entered if (!appName.isEmpty()) { cfg.writeEntry("Apps", appName); cfg.writeEntry("Delay", delay); } - } else { } } #endif } void Server::receiveTaskBar(const QCString &msg, const QByteArray &data) { QDataStream stream( data, IO_ReadOnly ); if ( msg == "reloadApps()" ) { - docList->reloadAppLnks(); - } else if ( msg == "soundAlarm()" ) { - ServerApplication::soundAlarm(); - } - else if ( msg == "setLed(int,bool)" ) { - int led, status; - stream >> led >> status; + docList->reloadAppLnks(); + } else + + if ( msg == "soundAlarm()" ) { + ServerApplication::soundAlarm(); + } else + + if ( msg == "setLed(int,bool)" ) { + int led, status; + stream >> led >> status; QValueList <OLed> ll = ODevice::inst ( )-> ledList ( ); if ( ll. count ( )) { OLed l = ll. contains ( Led_Mail ) ? Led_Mail : ll [0]; bool canblink = ODevice::inst ( )-> ledStateList ( l ). contains ( Led_BlinkSlow ); ODevice::inst ( )-> setLedState ( l, status ? ( canblink ? Led_BlinkSlow : Led_On ) : Led_Off ); } } } void Server::cancelSync() { #ifndef QT_NO_COP QCopEnvelope e( "QPE/Desktop", "cancelSync()" ); #endif @@ -535,117 +577,119 @@ void Server::cancelSync() bool Server::mkdir(const QString &localPath) { QDir fullDir(localPath); if (fullDir.exists()) return true; // at this point the directory doesn't exist // go through the directory tree and start creating the direcotories // that don't exist; if we can't create the directories, return false QString dirSeps = "/"; int dirIndex = localPath.find(dirSeps); QString checkedPath; // didn't find any seps; weird, use the cur dir instead if (dirIndex == -1) { - //odebug << "No seperators found in path " << localPath << "" << oendl; - checkedPath = QDir::currentDirPath(); + //odebug << "No seperators found in path " << localPath << "" << oendl; + checkedPath = QDir::currentDirPath(); } while (checkedPath != localPath) { // no more seperators found, use the local path - if (dirIndex == -1) + if (dirIndex == -1) { checkedPath = localPath; - else { + } else { // the next directory to check checkedPath = localPath.left(dirIndex) + "/"; // advance the iterator; the next dir seperator dirIndex = localPath.find(dirSeps, dirIndex+1); } QDir checkDir(checkedPath); if (!checkDir.exists()) { //odebug << "mkdir making dir " << checkedPath << "" << oendl; if (!checkDir.mkdir(checkedPath)) { odebug << "Unable to make directory " << checkedPath << "" << oendl; return FALSE; } } } return TRUE; } void Server::styleChange( QStyle &s ) { QWidget::styleChange( s ); } void Server::startTransferServer() { if ( !qcopBridge ) { - // start qcop bridge server - qcopBridge = new QCopBridge( 4243 ); - if ( qcopBridge->ok() ) { - // ... OK - connect( qcopBridge, SIGNAL(connectionClosed(const QHostAddress&)), - this, SLOT(syncConnectionClosed(const QHostAddress&)) ); - } else { - delete qcopBridge; - qcopBridge = 0; - } + // start qcop bridge server + qcopBridge = new QCopBridge( 4243 ); + if ( qcopBridge->ok() ) { + // ... OK + connect( qcopBridge, SIGNAL(connectionClosed(const QHostAddress&)), + this, SLOT(syncConnectionClosed(const QHostAddress&)) ); + } else { + delete qcopBridge; + qcopBridge = 0; + } } + if ( !transferServer ) { - // start transfer server - transferServer = new TransferServer( 4242 ); - if ( transferServer->ok() ) { - // ... OK - } else { - delete transferServer; - transferServer = 0; - } + // start transfer server + transferServer = new TransferServer( 4242 ); + if ( transferServer->ok() ) { + // ... OK + } else { + delete transferServer; + transferServer = 0; + } + + if ( !qcopBridge ) + tid_xfer = startTimer( 2000 ); } - if ( !transferServer || !qcopBridge ) - tid_xfer = startTimer( 2000 ); } void Server::timerEvent( QTimerEvent *e ) { if ( e->timerId() == tid_xfer ) { - killTimer( tid_xfer ); - tid_xfer = 0; - startTransferServer(); + killTimer( tid_xfer ); + tid_xfer = 0; + startTransferServer(); } - /* ### FIXME today startin */ #if 0 + /* ### FIXME today startin */ else if ( e->timerId() == tid_today ) { - QDate today = QDate::currentDate(); - if ( today != last_today_show ) { - last_today_show = today; - Config cfg("today"); - cfg.setGroup("Start"); + QDate today = QDate::currentDate(); + if ( today != last_today_show ) { + last_today_show = today; + Config cfg("today"); + cfg.setGroup("Start"); #ifndef QPE_DEFAULT_TODAY_MODE #define QPE_DEFAULT_TODAY_MODE "Never" #endif - if ( cfg.readEntry("Mode",QPE_DEFAULT_TODAY_MODE) == "Daily" ) { - QCopEnvelope env(Service::channel("today"),"raise()"); + if ( cfg.readEntry("Mode",QPE_DEFAULT_TODAY_MODE) == "Daily" ) { + QCopEnvelope env(Service::channel("today"),"raise()"); + } } } - } #endif } void Server::terminateServers() { delete transferServer; delete qcopBridge; transferServer = 0; qcopBridge = 0; } void Server::syncConnectionClosed( const QHostAddress & ) { odebug << "Lost sync connection" << oendl; delete syncDialog; syncDialog = 0; @@ -687,21 +731,20 @@ void Server::applicationConnected(const QString &app) void Server::storageChanged() { system( "opie-update-symlinks" ); serverGui->storageChanged( storage->fileSystems() ); docList->storageChanged(); } void Server::preloadApps() { Config cfg("Launcher"); cfg.setGroup("Preload"); QStringList apps = cfg.readListEntry("Apps",','); for (QStringList::ConstIterator it=apps.begin(); it!=apps.end(); ++it) { #ifndef QT_NO_COP - QCopEnvelope e("QPE/Application/"+(*it).local8Bit(), "enablePreload()"); + QCopEnvelope e("QPE/Application/"+(*it).local8Bit(), "enablePreload()"); #endif } } - |