author | eilers <eilers> | 2003-11-03 16:52:18 (UTC) |
---|---|---|
committer | eilers <eilers> | 2003-11-03 16:52:18 (UTC) |
commit | d34dc773591a2d467c68875a68a671d6a809f861 (patch) (unidiff) | |
tree | b57e5ae15c51e3d87ca95d57aedfd1ca3db57bfe /core/launcher | |
parent | ce84f2d8bdd65c438821f0457cdad6bbbfa73380 (diff) | |
download | opie-d34dc773591a2d467c68875a68a671d6a809f861.zip opie-d34dc773591a2d467c68875a68a671d6a809f861.tar.gz opie-d34dc773591a2d467c68875a68a671d6a809f861.tar.bz2 |
Porting Opie to MacOS-X.
The base system and all platform independent applications and platforms
should work.
Please see $OPIEDIR/development/macosx for details
-rw-r--r-- | core/launcher/applauncher.cpp | 4 | ||||
-rw-r--r-- | core/launcher/inputmethods.cpp | 4 | ||||
-rw-r--r-- | core/launcher/irserver.cpp | 4 | ||||
-rw-r--r-- | core/launcher/main.cpp | 2 | ||||
-rw-r--r-- | core/launcher/packageslave.cpp | 304 | ||||
-rw-r--r-- | core/launcher/qprocess_unix.cpp | 3 | ||||
-rw-r--r-- | core/launcher/server.pro | 5 | ||||
-rw-r--r-- | core/launcher/startmenu.cpp | 4 | ||||
-rw-r--r-- | core/launcher/systray.cpp | 5 | ||||
-rw-r--r-- | core/launcher/transferserver.cpp | 3 |
10 files changed, 308 insertions, 30 deletions
diff --git a/core/launcher/applauncher.cpp b/core/launcher/applauncher.cpp index d6f93da..0ac043b 100644 --- a/core/launcher/applauncher.cpp +++ b/core/launcher/applauncher.cpp | |||
@@ -501,97 +501,101 @@ bool AppLauncher::execute(const QString &c, const QString &docParam, bool noRais | |||
501 | if ( !noRaise && f.open(IO_WriteOnly | IO_Append) ) { | 501 | if ( !noRaise && f.open(IO_WriteOnly | IO_Append) ) { |
502 | #ifndef Q_OS_WIN32 | 502 | #ifndef Q_OS_WIN32 |
503 | flock(f.handle(), LOCK_EX); | 503 | flock(f.handle(), LOCK_EX); |
504 | #endif | 504 | #endif |
505 | 505 | ||
506 | QDataStream ds(&f); | 506 | QDataStream ds(&f); |
507 | QByteArray b; | 507 | QByteArray b; |
508 | QDataStream bstream(b, IO_WriteOnly); | 508 | QDataStream bstream(b, IO_WriteOnly); |
509 | if ( !f.size() ) { | 509 | if ( !f.size() ) { |
510 | ds << channel << QCString("raise()") << b; | 510 | ds << channel << QCString("raise()") << b; |
511 | if ( !waitingHeartbeat.contains( appName ) && appKillerName != appName ) { | 511 | if ( !waitingHeartbeat.contains( appName ) && appKillerName != appName ) { |
512 | int id = startTimer(RAISE_TIMEOUT_MS); | 512 | int id = startTimer(RAISE_TIMEOUT_MS); |
513 | waitingHeartbeat.insert( appName, id ); | 513 | waitingHeartbeat.insert( appName, id ); |
514 | } | 514 | } |
515 | } | 515 | } |
516 | if ( !docParam.isEmpty() ) { | 516 | if ( !docParam.isEmpty() ) { |
517 | bstream << docParam; | 517 | bstream << docParam; |
518 | ds << channel << QCString("setDocument(QString)") << b; | 518 | ds << channel << QCString("setDocument(QString)") << b; |
519 | } | 519 | } |
520 | 520 | ||
521 | f.flush(); | 521 | f.flush(); |
522 | #ifndef Q_OS_WIN32 | 522 | #ifndef Q_OS_WIN32 |
523 | flock(f.handle(), LOCK_UN); | 523 | flock(f.handle(), LOCK_UN); |
524 | #endif | 524 | #endif |
525 | f.close(); | 525 | f.close(); |
526 | } | 526 | } |
527 | if ( QCopChannel::isRegistered(channel) ) // avoid unnecessary warnings | 527 | if ( QCopChannel::isRegistered(channel) ) // avoid unnecessary warnings |
528 | QCopChannel::send(channel,"QPEProcessQCop()"); | 528 | QCopChannel::send(channel,"QPEProcessQCop()"); |
529 | 529 | ||
530 | return TRUE; | 530 | return TRUE; |
531 | } | 531 | } |
532 | 532 | ||
533 | #ifdef QT_NO_QWS_MULTIPROCESS | 533 | #ifdef QT_NO_QWS_MULTIPROCESS |
534 | QMessageBox::warning( 0, tr("Error"), tr("<qt>Could not find the application %1</qt>").arg(c), | 534 | QMessageBox::warning( 0, tr("Error"), tr("<qt>Could not find the application %1</qt>").arg(c), |
535 | tr("OK"), 0, 0, 0, 1 ); | 535 | tr("OK"), 0, 0, 0, 1 ); |
536 | #else | 536 | #else |
537 | 537 | ||
538 | QStrList slist; | 538 | QStrList slist; |
539 | unsigned j; | 539 | unsigned j; |
540 | for ( j = 0; j < list.count(); j++ ) | 540 | for ( j = 0; j < list.count(); j++ ) |
541 | slist.append( list[j].utf8() ); | 541 | slist.append( list[j].utf8() ); |
542 | 542 | ||
543 | const char **args = new const char *[slist.count() + 1]; | 543 | const char **args = new const char *[slist.count() + 1]; |
544 | for ( j = 0; j < slist.count(); j++ ) | 544 | for ( j = 0; j < slist.count(); j++ ) |
545 | args[j] = slist.at(j); | 545 | args[j] = slist.at(j); |
546 | args[j] = NULL; | 546 | args[j] = NULL; |
547 | 547 | ||
548 | #ifndef Q_OS_WIN32 | 548 | #ifndef Q_OS_WIN32 |
549 | #ifdef Q_OS_MACX | ||
550 | if ( qlPid && qlReady && QFile::exists( QPEApplication::qpeDir()+"plugins/application/lib"+args[0] + ".dylib" ) ) { | ||
551 | #else | ||
549 | if ( qlPid && qlReady && QFile::exists( QPEApplication::qpeDir()+"plugins/application/lib"+args[0] + ".so" ) ) { | 552 | if ( qlPid && qlReady && QFile::exists( QPEApplication::qpeDir()+"plugins/application/lib"+args[0] + ".so" ) ) { |
553 | #endif /* Q_OS_MACX */ | ||
550 | qDebug( "Quick launching: %s", args[0] ); | 554 | qDebug( "Quick launching: %s", args[0] ); |
551 | if ( getuid() == 0 ) | 555 | if ( getuid() == 0 ) |
552 | setpriority( PRIO_PROCESS, qlPid, 0 ); | 556 | setpriority( PRIO_PROCESS, qlPid, 0 ); |
553 | QCString qlch("QPE/QuickLauncher-"); | 557 | QCString qlch("QPE/QuickLauncher-"); |
554 | qlch += QString::number(qlPid); | 558 | qlch += QString::number(qlPid); |
555 | QCopEnvelope env( qlch, "execute(QStrList)" ); | 559 | QCopEnvelope env( qlch, "execute(QStrList)" ); |
556 | env << slist; | 560 | env << slist; |
557 | runningApps[qlPid] = QString(args[0]); | 561 | runningApps[qlPid] = QString(args[0]); |
558 | emit launched(qlPid, QString(args[0])); | 562 | emit launched(qlPid, QString(args[0])); |
559 | QCopEnvelope e("QPE/System", "busy()"); | 563 | QCopEnvelope e("QPE/System", "busy()"); |
560 | qlPid = 0; | 564 | qlPid = 0; |
561 | qlReady = FALSE; | 565 | qlReady = FALSE; |
562 | QTimer::singleShot( getuid() == 0 ? 800 : 1500, this, SLOT(createQuickLauncher()) ); | 566 | QTimer::singleShot( getuid() == 0 ? 800 : 1500, this, SLOT(createQuickLauncher()) ); |
563 | } else { | 567 | } else { |
564 | int pid = ::vfork(); | 568 | int pid = ::vfork(); |
565 | if ( !pid ) { | 569 | if ( !pid ) { |
566 | for ( int fd = 3; fd < 100; fd++ ) | 570 | for ( int fd = 3; fd < 100; fd++ ) |
567 | ::close( fd ); | 571 | ::close( fd ); |
568 | ::setpgid( ::getpid(), ::getppid() ); | 572 | ::setpgid( ::getpid(), ::getppid() ); |
569 | // Try bindir first, so that foo/bar works too | 573 | // Try bindir first, so that foo/bar works too |
570 | ::execv( QPEApplication::qpeDir()+"bin/"+args[0], (char * const *)args ); | 574 | ::execv( QPEApplication::qpeDir()+"bin/"+args[0], (char * const *)args ); |
571 | ::execvp( args[0], (char * const *)args ); | 575 | ::execvp( args[0], (char * const *)args ); |
572 | _exit( -1 ); | 576 | _exit( -1 ); |
573 | } | 577 | } |
574 | 578 | ||
575 | runningApps[pid] = QString(args[0]); | 579 | runningApps[pid] = QString(args[0]); |
576 | emit launched(pid, QString(args[0])); | 580 | emit launched(pid, QString(args[0])); |
577 | QCopEnvelope e("QPE/System", "busy()"); | 581 | QCopEnvelope e("QPE/System", "busy()"); |
578 | } | 582 | } |
579 | #else | 583 | #else |
580 | QProcess *proc = new QProcess(this); | 584 | QProcess *proc = new QProcess(this); |
581 | if (proc){ | 585 | if (proc){ |
582 | for (int i=0; i < slist.count(); i++) | 586 | for (int i=0; i < slist.count(); i++) |
583 | proc->addArgument(args[i]); | 587 | proc->addArgument(args[i]); |
584 | connect(proc, SIGNAL(processExited()), this, SLOT(processExited())); | 588 | connect(proc, SIGNAL(processExited()), this, SLOT(processExited())); |
585 | if (!proc->start()){ | 589 | if (!proc->start()){ |
586 | qDebug("Unable to start application %s", args[0]); | 590 | qDebug("Unable to start application %s", args[0]); |
587 | }else{ | 591 | }else{ |
588 | PROCESS_INFORMATION *procInfo = (PROCESS_INFORMATION *)proc->processIdentifier(); | 592 | PROCESS_INFORMATION *procInfo = (PROCESS_INFORMATION *)proc->processIdentifier(); |
589 | if (procInfo){ | 593 | if (procInfo){ |
590 | DWORD pid = procInfo->dwProcessId; | 594 | DWORD pid = procInfo->dwProcessId; |
591 | runningApps[pid] = QString(args[0]); | 595 | runningApps[pid] = QString(args[0]); |
592 | runningAppsProc.append(proc); | 596 | runningAppsProc.append(proc); |
593 | emit launched(pid, QString(args[0])); | 597 | emit launched(pid, QString(args[0])); |
594 | QCopEnvelope e("QPE/System", "busy()"); | 598 | QCopEnvelope e("QPE/System", "busy()"); |
595 | }else{ | 599 | }else{ |
596 | qDebug("Unable to read process inforation #1 for %s", args[0]); | 600 | qDebug("Unable to read process inforation #1 for %s", args[0]); |
597 | } | 601 | } |
diff --git a/core/launcher/inputmethods.cpp b/core/launcher/inputmethods.cpp index 8f3e812..62e316c 100644 --- a/core/launcher/inputmethods.cpp +++ b/core/launcher/inputmethods.cpp | |||
@@ -182,97 +182,101 @@ void InputMethods::showInputMethod(const QString& name) | |||
182 | int i = 0; | 182 | int i = 0; |
183 | QValueList<InputMethod>::Iterator it; | 183 | QValueList<InputMethod>::Iterator it; |
184 | InputMethod *im = 0; | 184 | InputMethod *im = 0; |
185 | for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) { | 185 | for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) { |
186 | QString lname = (*it).libName.mid((*it).libName.findRev('/') + 1); | 186 | QString lname = (*it).libName.mid((*it).libName.findRev('/') + 1); |
187 | if ( (*it).name() == name || lname == name ) { | 187 | if ( (*it).name() == name || lname == name ) { |
188 | im = &(*it); | 188 | im = &(*it); |
189 | break; | 189 | break; |
190 | } | 190 | } |
191 | } | 191 | } |
192 | if ( im ) | 192 | if ( im ) |
193 | chooseKeyboard(im); | 193 | chooseKeyboard(im); |
194 | } | 194 | } |
195 | 195 | ||
196 | void InputMethods::resetStates() | 196 | void InputMethods::resetStates() |
197 | { | 197 | { |
198 | if ( mkeyboard && !mkeyboard->newIM ) | 198 | if ( mkeyboard && !mkeyboard->newIM ) |
199 | mkeyboard->interface->resetState(); | 199 | mkeyboard->interface->resetState(); |
200 | } | 200 | } |
201 | 201 | ||
202 | QRect InputMethods::inputRect() const | 202 | QRect InputMethods::inputRect() const |
203 | { | 203 | { |
204 | if ( !mkeyboard || !mkeyboard->widget || !mkeyboard->widget->isVisible() ) | 204 | if ( !mkeyboard || !mkeyboard->widget || !mkeyboard->widget->isVisible() ) |
205 | return QRect(); | 205 | return QRect(); |
206 | else | 206 | else |
207 | return mkeyboard->widget->geometry(); | 207 | return mkeyboard->widget->geometry(); |
208 | } | 208 | } |
209 | 209 | ||
210 | void InputMethods::unloadInputMethods() | 210 | void InputMethods::unloadInputMethods() |
211 | { | 211 | { |
212 | unloadMethod( inputMethodList ); | 212 | unloadMethod( inputMethodList ); |
213 | unloadMethod( inputModifierList ); | 213 | unloadMethod( inputModifierList ); |
214 | inputMethodList.clear(); | 214 | inputMethodList.clear(); |
215 | inputModifierList.clear(); | 215 | inputModifierList.clear(); |
216 | 216 | ||
217 | } | 217 | } |
218 | 218 | ||
219 | void InputMethods::unloadMethod( QValueList<InputMethod>& list ) { | 219 | void InputMethods::unloadMethod( QValueList<InputMethod>& list ) { |
220 | QValueList<InputMethod>::Iterator it; | 220 | QValueList<InputMethod>::Iterator it; |
221 | 221 | ||
222 | for (it = list.begin(); it != list.end(); ++it ) | 222 | for (it = list.begin(); it != list.end(); ++it ) |
223 | (*it).releaseInterface(); | 223 | (*it).releaseInterface(); |
224 | 224 | ||
225 | } | 225 | } |
226 | 226 | ||
227 | 227 | ||
228 | QStringList InputMethods::plugins()const { | 228 | QStringList InputMethods::plugins()const { |
229 | QString path = QPEApplication::qpeDir() + "/plugins/inputmethods"; | 229 | QString path = QPEApplication::qpeDir() + "/plugins/inputmethods"; |
230 | #ifdef Q_OS_MACX | ||
231 | QDir dir( path, "lib*.dylib" ); | ||
232 | #else | ||
230 | QDir dir( path, "lib*.so" ); | 233 | QDir dir( path, "lib*.so" ); |
234 | #endif /* Q_OS_MACX */ | ||
231 | return dir.entryList(); | 235 | return dir.entryList(); |
232 | } | 236 | } |
233 | 237 | ||
234 | void InputMethods::installTranslator( const QString& type ) { | 238 | void InputMethods::installTranslator( const QString& type ) { |
235 | QStringList langs = Global::languageList(); | 239 | QStringList langs = Global::languageList(); |
236 | QStringList::ConstIterator lit; | 240 | QStringList::ConstIterator lit; |
237 | for ( lit= langs.begin(); lit!=langs.end(); ++lit) { | 241 | for ( lit= langs.begin(); lit!=langs.end(); ++lit) { |
238 | QString lang = *lit; | 242 | QString lang = *lit; |
239 | QTranslator * trans = new QTranslator(qApp); | 243 | QTranslator * trans = new QTranslator(qApp); |
240 | 244 | ||
241 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; | 245 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; |
242 | 246 | ||
243 | if ( trans->load( tfn )) | 247 | if ( trans->load( tfn )) |
244 | qApp->installTranslator( trans ); | 248 | qApp->installTranslator( trans ); |
245 | else | 249 | else |
246 | delete trans; | 250 | delete trans; |
247 | } | 251 | } |
248 | } | 252 | } |
249 | 253 | ||
250 | void InputMethods::setPreferedHandlers() { | 254 | void InputMethods::setPreferedHandlers() { |
251 | Config cfg("qpe"); | 255 | Config cfg("qpe"); |
252 | cfg.setGroup("InputMethod"); | 256 | cfg.setGroup("InputMethod"); |
253 | QString current = cfg.readEntry("current"); | 257 | QString current = cfg.readEntry("current"); |
254 | QString im = cfg.readEntry("im"); | 258 | QString im = cfg.readEntry("im"); |
255 | 259 | ||
256 | QValueList<InputMethod>::Iterator it; | 260 | QValueList<InputMethod>::Iterator it; |
257 | if (!inputModifierList.isEmpty() && !im.isEmpty() ) { | 261 | if (!inputModifierList.isEmpty() && !im.isEmpty() ) { |
258 | for (it = inputModifierList.begin(); it != inputModifierList.end(); ++it ) | 262 | for (it = inputModifierList.begin(); it != inputModifierList.end(); ++it ) |
259 | if ( (*it).name() == im ) { | 263 | if ( (*it).name() == im ) { |
260 | imethod = &(*it); break; | 264 | imethod = &(*it); break; |
261 | } | 265 | } |
262 | 266 | ||
263 | } | 267 | } |
264 | if (!inputMethodList.isEmpty() && !current.isEmpty() ) { | 268 | if (!inputMethodList.isEmpty() && !current.isEmpty() ) { |
265 | for (it = inputMethodList.begin(); it != inputMethodList.end(); ++it ) | 269 | for (it = inputMethodList.begin(); it != inputMethodList.end(); ++it ) |
266 | if ( (*it).name() == current ) { | 270 | if ( (*it).name() == current ) { |
267 | qWarning("preferred keyboard is %s", current.latin1() ); | 271 | qWarning("preferred keyboard is %s", current.latin1() ); |
268 | mkeyboard = &(*it); | 272 | mkeyboard = &(*it); |
269 | kbdButton->setPixmap( *mkeyboard->icon() ); | 273 | kbdButton->setPixmap( *mkeyboard->icon() ); |
270 | break; | 274 | break; |
271 | } | 275 | } |
272 | } | 276 | } |
273 | 277 | ||
274 | } | 278 | } |
275 | 279 | ||
276 | void InputMethods::loadInputMethods() | 280 | void InputMethods::loadInputMethods() |
277 | { | 281 | { |
278 | #ifndef QT_NO_COMPONENT | 282 | #ifndef QT_NO_COMPONENT |
diff --git a/core/launcher/irserver.cpp b/core/launcher/irserver.cpp index 579c78c..63f8d05 100644 --- a/core/launcher/irserver.cpp +++ b/core/launcher/irserver.cpp | |||
@@ -1,73 +1,77 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of the Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | 21 | ||
22 | #include "irserver.h" | 22 | #include "irserver.h" |
23 | 23 | ||
24 | #include <qtopia/qlibrary.h> | 24 | #include <qtopia/qlibrary.h> |
25 | #include <qtopia/qpeapplication.h> | 25 | #include <qtopia/qpeapplication.h> |
26 | 26 | ||
27 | #include <qtranslator.h> | 27 | #include <qtranslator.h> |
28 | 28 | ||
29 | #include "obexinterface.h" | 29 | #include "obexinterface.h" |
30 | 30 | ||
31 | #include <qdir.h> | 31 | #include <qdir.h> |
32 | 32 | ||
33 | IrServer::IrServer( QObject *parent, const char *name ) | 33 | IrServer::IrServer( QObject *parent, const char *name ) |
34 | : QObject( parent, name ), obexIface(0) | 34 | : QObject( parent, name ), obexIface(0) |
35 | { | 35 | { |
36 | lib = 0; | 36 | lib = 0; |
37 | obexIface = 0; | 37 | obexIface = 0; |
38 | QString path = QPEApplication::qpeDir() + "/plugins/obex/"; | 38 | QString path = QPEApplication::qpeDir() + "/plugins/obex/"; |
39 | #ifdef Q_OS_MACX | ||
40 | QDir dir( path, "lib*.dylib" ); | ||
41 | #else | ||
39 | QDir dir( path, "lib*.so" ); | 42 | QDir dir( path, "lib*.so" ); |
43 | #endif /* Q_OS_MACX */ | ||
40 | QStringList list = dir.entryList(); | 44 | QStringList list = dir.entryList(); |
41 | QStringList::Iterator it; | 45 | QStringList::Iterator it; |
42 | for ( it = list.begin(); it != list.end(); ++it ) { | 46 | for ( it = list.begin(); it != list.end(); ++it ) { |
43 | QLibrary *trylib = new QLibrary( path + *it ); | 47 | QLibrary *trylib = new QLibrary( path + *it ); |
44 | //qDebug("trying lib %s", (path + (*it)).latin1() ); | 48 | //qDebug("trying lib %s", (path + (*it)).latin1() ); |
45 | if ( trylib->queryInterface( IID_ObexInterface, (QUnknownInterface**)&obexIface ) == QS_OK ) { | 49 | if ( trylib->queryInterface( IID_ObexInterface, (QUnknownInterface**)&obexIface ) == QS_OK ) { |
46 | lib = trylib; | 50 | lib = trylib; |
47 | //qDebug("found obex lib" ); | 51 | //qDebug("found obex lib" ); |
48 | QString lang = getenv( "LANG" ); | 52 | QString lang = getenv( "LANG" ); |
49 | QTranslator * trans = new QTranslator(qApp); | 53 | QTranslator * trans = new QTranslator(qApp); |
50 | QString type = (*it).left( (*it).find(".") ); | 54 | QString type = (*it).left( (*it).find(".") ); |
51 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; | 55 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; |
52 | //qDebug("tr fpr obex: %s", tfn.latin1() ); | 56 | //qDebug("tr fpr obex: %s", tfn.latin1() ); |
53 | if ( trans->load( tfn )) | 57 | if ( trans->load( tfn )) |
54 | qApp->installTranslator( trans ); | 58 | qApp->installTranslator( trans ); |
55 | else | 59 | else |
56 | delete trans; | 60 | delete trans; |
57 | 61 | ||
58 | break; | 62 | break; |
59 | } else { | 63 | } else { |
60 | delete lib; | 64 | delete lib; |
61 | } | 65 | } |
62 | } | 66 | } |
63 | if ( !lib ) | 67 | if ( !lib ) |
64 | qDebug("could not load IR plugin" ); | 68 | qDebug("could not load IR plugin" ); |
65 | } | 69 | } |
66 | 70 | ||
67 | IrServer::~IrServer() | 71 | IrServer::~IrServer() |
68 | { | 72 | { |
69 | if ( obexIface ) | 73 | if ( obexIface ) |
70 | obexIface->release(); | 74 | obexIface->release(); |
71 | delete lib; | 75 | delete lib; |
72 | } | 76 | } |
73 | 77 | ||
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp index 74965df..5416d33 100644 --- a/core/launcher/main.cpp +++ b/core/launcher/main.cpp | |||
@@ -231,97 +231,99 @@ int initApplication( int argc, char ** argv ) | |||
231 | #ifdef QWS | 231 | #ifdef QWS |
232 | QWSServer::setDesktopBackground( QImage() ); | 232 | QWSServer::setDesktopBackground( QImage() ); |
233 | #endif | 233 | #endif |
234 | ServerApplication a( argc, argv, QApplication::GuiServer ); | 234 | ServerApplication a( argc, argv, QApplication::GuiServer ); |
235 | 235 | ||
236 | refreshTimeZoneConfig(); | 236 | refreshTimeZoneConfig(); |
237 | 237 | ||
238 | initKeyboard(); | 238 | initKeyboard(); |
239 | 239 | ||
240 | // Don't use first use under Windows | 240 | // Don't use first use under Windows |
241 | if ( firstUse() ) { | 241 | if ( firstUse() ) { |
242 | a.restart(); | 242 | a.restart(); |
243 | return 0; | 243 | return 0; |
244 | } | 244 | } |
245 | 245 | ||
246 | ODevice::inst ( )-> setSoftSuspend ( true ); | 246 | ODevice::inst ( )-> setSoftSuspend ( true ); |
247 | 247 | ||
248 | { | 248 | { |
249 | QCopEnvelope e("QPE/System", "setBacklight(int)" ); | 249 | QCopEnvelope e("QPE/System", "setBacklight(int)" ); |
250 | e << -3; // Forced on | 250 | e << -3; // Forced on |
251 | } | 251 | } |
252 | 252 | ||
253 | AlarmServer::initialize(); | 253 | AlarmServer::initialize(); |
254 | 254 | ||
255 | 255 | ||
256 | 256 | ||
257 | Server *s = new Server(); | 257 | Server *s = new Server(); |
258 | 258 | ||
259 | (void)new SysFileMonitor(s); | 259 | (void)new SysFileMonitor(s); |
260 | #ifdef QWS | 260 | #ifdef QWS |
261 | Network::createServer(s); | 261 | Network::createServer(s); |
262 | #endif | 262 | #endif |
263 | 263 | ||
264 | s->show(); | 264 | s->show(); |
265 | 265 | ||
266 | /* THE ARM rtc has problem holdings the time on reset */ | 266 | /* THE ARM rtc has problem holdings the time on reset */ |
267 | if ( QDate::currentDate ( ). year ( ) < 2000 ) { | 267 | if ( QDate::currentDate ( ). year ( ) < 2000 ) { |
268 | if ( QMessageBox::information ( 0, ServerApplication::tr( "Information" ), ServerApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" ). arg( TimeString::dateString ( QDate::currentDate ( ))), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) { | 268 | if ( QMessageBox::information ( 0, ServerApplication::tr( "Information" ), ServerApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" ). arg( TimeString::dateString ( QDate::currentDate ( ))), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) { |
269 | QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" ); | 269 | QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" ); |
270 | e << QString ( ); | 270 | e << QString ( ); |
271 | } | 271 | } |
272 | } | 272 | } |
273 | 273 | ||
274 | int rv = a.exec(); | 274 | int rv = a.exec(); |
275 | 275 | ||
276 | qDebug("exiting..."); | 276 | qDebug("exiting..."); |
277 | delete s; | 277 | delete s; |
278 | 278 | ||
279 | #ifndef Q_OS_MACX | ||
279 | ODevice::inst()->setSoftSuspend( false ); | 280 | ODevice::inst()->setSoftSuspend( false ); |
281 | #endif | ||
280 | 282 | ||
281 | return rv; | 283 | return rv; |
282 | } | 284 | } |
283 | 285 | ||
284 | static const char *pidfile_path = "/var/run/opie.pid"; | 286 | static const char *pidfile_path = "/var/run/opie.pid"; |
285 | 287 | ||
286 | void create_pidfile ( ) | 288 | void create_pidfile ( ) |
287 | { | 289 | { |
288 | FILE *f; | 290 | FILE *f; |
289 | 291 | ||
290 | if (( f = ::fopen ( pidfile_path, "w" ))) { | 292 | if (( f = ::fopen ( pidfile_path, "w" ))) { |
291 | ::fprintf ( f, "%d", getpid ( )); | 293 | ::fprintf ( f, "%d", getpid ( )); |
292 | ::fclose ( f ); | 294 | ::fclose ( f ); |
293 | } | 295 | } |
294 | } | 296 | } |
295 | 297 | ||
296 | void remove_pidfile ( ) | 298 | void remove_pidfile ( ) |
297 | { | 299 | { |
298 | ::unlink ( pidfile_path ); | 300 | ::unlink ( pidfile_path ); |
299 | } | 301 | } |
300 | 302 | ||
301 | void handle_sigterm ( int /* sig */ ) | 303 | void handle_sigterm ( int /* sig */ ) |
302 | { | 304 | { |
303 | if ( qApp ) | 305 | if ( qApp ) |
304 | qApp-> quit ( ); | 306 | qApp-> quit ( ); |
305 | } | 307 | } |
306 | 308 | ||
307 | #ifndef Q_OS_WIN32 | 309 | #ifndef Q_OS_WIN32 |
308 | int main( int argc, char ** argv ) | 310 | int main( int argc, char ** argv ) |
309 | { | 311 | { |
310 | 312 | ||
311 | ::signal ( SIGCHLD, SIG_IGN ); | 313 | ::signal ( SIGCHLD, SIG_IGN ); |
312 | 314 | ||
313 | ::signal ( SIGTERM, handle_sigterm ); | 315 | ::signal ( SIGTERM, handle_sigterm ); |
314 | ::signal ( SIGINT, handle_sigterm ); | 316 | ::signal ( SIGINT, handle_sigterm ); |
315 | 317 | ||
316 | ::setsid ( ); | 318 | ::setsid ( ); |
317 | ::setpgid ( 0, 0 ); | 319 | ::setpgid ( 0, 0 ); |
318 | 320 | ||
319 | ::atexit ( remove_pidfile ); | 321 | ::atexit ( remove_pidfile ); |
320 | create_pidfile ( ); | 322 | create_pidfile ( ); |
321 | 323 | ||
322 | int retVal = initApplication( argc, argv ); | 324 | int retVal = initApplication( argc, argv ); |
323 | 325 | ||
324 | // Have we been asked to restart? | 326 | // Have we been asked to restart? |
325 | if ( ServerApplication::doRestart ) { | 327 | if ( ServerApplication::doRestart ) { |
326 | for ( int fd = 3; fd < 100; fd++ ) | 328 | for ( int fd = 3; fd < 100; fd++ ) |
327 | close( fd ); | 329 | close( fd ); |
diff --git a/core/launcher/packageslave.cpp b/core/launcher/packageslave.cpp index 4f149a5..bf34368 100644 --- a/core/launcher/packageslave.cpp +++ b/core/launcher/packageslave.cpp | |||
@@ -1,97 +1,341 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | #include "packageslave.h" | 21 | #include "packageslave.h" |
22 | #include <qtopia/qprocess.h> | ||
22 | 23 | ||
23 | #include <qpe/process.h> | 24 | #ifdef Q_WS_QWS |
24 | #include <qpe/qcopenvelope_qws.h> | 25 | #include <qtopia/qcopenvelope_qws.h> |
26 | #endif | ||
25 | 27 | ||
26 | #include <qdatastream.h> | 28 | #include <qdatastream.h> |
29 | #ifdef Q_WS_QWS | ||
27 | #include <qcopchannel_qws.h> | 30 | #include <qcopchannel_qws.h> |
31 | #endif | ||
28 | 32 | ||
33 | #include <qtextstream.h> | ||
34 | #include <qdir.h> | ||
35 | |||
36 | #include <stdlib.h> | ||
37 | #include <sys/stat.h> // mkdir() | ||
38 | |||
39 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) | ||
40 | #include <unistd.h> | ||
41 | #include <sys/vfs.h> | ||
42 | #include <mntent.h> | ||
43 | #elif defined(Q_OS_WIN32) | ||
44 | #include <windows.h> | ||
45 | #include <winbase.h> | ||
46 | #elif defined(Q_OS_MACX) | ||
29 | #include <unistd.h> | 47 | #include <unistd.h> |
48 | #endif | ||
30 | 49 | ||
31 | PackageSlave::PackageSlave( QObject *parent, char* name ) | 50 | |
32 | : QObject( parent, name ), packageChannel( 0 ) | 51 | PackageHandler::PackageHandler( QObject *parent, char* name ) |
52 | : QObject( parent, name ), packageChannel( 0 ), currentProcess( 0 ), mNoSpaceLeft( FALSE ) | ||
33 | { | 53 | { |
34 | // setup qcop channel | 54 | // setup qcop channel |
55 | #ifndef QT_NO_COP | ||
35 | packageChannel = new QCopChannel( "QPE/Package", this ); | 56 | packageChannel = new QCopChannel( "QPE/Package", this ); |
36 | connect( packageChannel, SIGNAL( received(const QCString &, const QByteArray &) ), | 57 | connect( packageChannel, SIGNAL( received(const QCString &, const QByteArray &) ), |
37 | this, SLOT( qcopMessage( const QCString &, const QByteArray &) ) ); | 58 | this, SLOT( qcopMessage( const QCString &, const QByteArray &) ) ); |
59 | #endif | ||
38 | } | 60 | } |
39 | 61 | ||
40 | void PackageSlave::qcopMessage( const QCString &msg, const QByteArray &data ) | 62 | void PackageHandler::qcopMessage( const QCString &msg, const QByteArray &data ) |
41 | { | 63 | { |
42 | QDataStream stream( data, IO_ReadOnly ); | 64 | QDataStream stream( data, IO_ReadOnly ); |
43 | 65 | ||
44 | if ( msg == "installPackage(QString)" ) { | 66 | if ( msg == "installPackage(QString)" ) { |
45 | QString file; | 67 | QString file; |
46 | stream >> file; | 68 | stream >> file; |
47 | installPackage( file ); | 69 | installPackage( file ); |
48 | } | 70 | } else if ( msg == "removePackage(QString)" ) { |
49 | else if ( msg == "removePackage(QString)" ) { | ||
50 | QString file; | 71 | QString file; |
51 | stream >> file; | 72 | stream >> file; |
52 | removePackage( file ); | 73 | removePackage( file ); |
74 | } else if ( msg == "addPackageFiles(QString,QString)" ) { | ||
75 | QString location, listfile; | ||
76 | stream >> location >> listfile; | ||
77 | addPackageFiles( location, listfile); | ||
78 | } else if ( msg == "addPackages(QString)" ) { | ||
79 | QString location; | ||
80 | stream >> location; | ||
81 | addPackages( location ); | ||
82 | } else if ( msg == "cleanupPackageFiles(QString)" ) { | ||
83 | QString listfile; | ||
84 | stream >> listfile; | ||
85 | cleanupPackageFiles( listfile ); | ||
86 | } else if ( msg == "cleanupPackages(QString)" ) { | ||
87 | QString location; | ||
88 | stream >> location; | ||
89 | cleanupPackages( location ); | ||
90 | } else if ( msg == "prepareInstall(QString,QString)" ) { | ||
91 | QString size, path; | ||
92 | stream >> size; | ||
93 | stream >> path; | ||
94 | prepareInstall( size, path ); | ||
53 | } | 95 | } |
54 | } | 96 | } |
55 | 97 | ||
56 | void PackageSlave::installPackage( const QString &package ) | 98 | void PackageHandler::installPackage( const QString &package ) |
57 | { | 99 | { |
58 | Process proc( QStringList() << "ipkg" << "install" << package ); | 100 | if ( mNoSpaceLeft ) { |
101 | mNoSpaceLeft = FALSE; | ||
102 | // Don't emit that for now, I still couldn't test it (Wener) | ||
103 | //sendReply( "installFailed(QString)", package ); | ||
104 | //return; | ||
105 | } | ||
106 | |||
107 | currentProcess = new QProcess( QStringList() << "ipkg" << "install" << package ); // No tr | ||
108 | connect( currentProcess, SIGNAL( processExited() ), SLOT( iProcessExited() ) ); | ||
109 | connect( currentProcess, SIGNAL( readyReadStdout() ), SLOT( readyReadStdout() ) ); | ||
110 | connect( currentProcess, SIGNAL( readyReadStderr() ), SLOT( readyReadStderr() ) ); | ||
111 | currentPackage = package; | ||
59 | 112 | ||
113 | currentProcessError=""; | ||
60 | sendReply( "installStarted(QString)", package ); | 114 | sendReply( "installStarted(QString)", package ); |
115 | currentProcess->start(); | ||
116 | } | ||
117 | |||
118 | void PackageHandler::removePackage( const QString &package ) | ||
119 | { | ||
120 | currentProcess = new QProcess( QStringList() << "ipkg" << "remove" << package ); // No tr | ||
121 | connect( currentProcess, SIGNAL( processExited() ), SLOT( rmProcessExited() ) ); | ||
122 | connect( currentProcess, SIGNAL( readyReadStdout() ), SLOT( readyReadStdout() ) ); | ||
123 | connect( currentProcess, SIGNAL( readyReadStderr() ), SLOT( readyReadStderr() ) ); | ||
124 | currentPackage = package; | ||
61 | 125 | ||
62 | QString output; | 126 | currentProcessError=""; |
63 | if ( proc.exec( "", output ) ) { | 127 | sendReply( "removeStarted(QString)", package ); |
64 | sendReply( "installDone(QString)", package ); | 128 | currentProcess->start(); |
65 | } | 129 | } |
66 | else { | 130 | |
67 | sendReply( "installFailed(QString)", package ); | 131 | void PackageHandler::sendReply( const QCString& msg, const QString& arg ) |
132 | { | ||
133 | #ifndef QT_NO_COP | ||
134 | QCopEnvelope e( "QPE/Desktop", msg ); | ||
135 | e << arg; | ||
136 | #endif | ||
137 | } | ||
138 | |||
139 | void PackageHandler::addPackageFiles( const QString &location, | ||
140 | const QString &listfile ) | ||
141 | { | ||
142 | QFile f(listfile); | ||
143 | #ifndef Q_OS_WIN32 | ||
144 | //make a copy so we can remove the symlinks later | ||
145 | mkdir( ("/usr/lib/ipkg/info/"+location).ascii(), 0777 ); | ||
146 | system(("cp " + f.name() + " /usr/lib/ipkg/info/"+location).ascii()); | ||
147 | #else | ||
148 | QDir d; | ||
149 | //#### revise | ||
150 | qDebug("Copy file at %s: %s", __FILE__, __LINE__ ); | ||
151 | d.mkdir(("/usr/lib/ipkg/info/" + location).ascii()); | ||
152 | system(("copy " + f.name() + " /usr/lib/ipkg/info/"+location).ascii()); | ||
153 | #endif | ||
154 | |||
155 | |||
156 | if ( f.open(IO_ReadOnly) ) { | ||
157 | QTextStream ts(&f); | ||
158 | |||
159 | QString s; | ||
160 | while ( !ts.eof() ) { // until end of file... | ||
161 | s = ts.readLine(); // line of text excluding '\n' | ||
162 | // for s, do link/mkdir. | ||
163 | if ( s.right(1) == "/" ) { | ||
164 | qDebug("do mkdir for %s", s.ascii()); | ||
165 | #ifndef Q_OS_WIN32 | ||
166 | mkdir( s.ascii(), 0777 ); | ||
167 | //possible optimization: symlink directories | ||
168 | //that don't exist already. -- Risky. | ||
169 | #else | ||
170 | d.mkdir( s.ascii()); | ||
171 | #endif | ||
172 | |||
173 | } else { | ||
174 | #ifndef Q_OS_WIN32 | ||
175 | qDebug("do symlink for %s", s.ascii()); | ||
176 | symlink( (location + s).ascii(), s.ascii() ); | ||
177 | #else | ||
178 | qDebug("Copy file instead of a symlink for WIN32"); | ||
179 | if (!CopyFile((TCHAR*)qt_winTchar((location + s), TRUE), (TCHAR*)qt_winTchar(s, TRUE), FALSE)) | ||
180 | qWarning("Unable to create symlinkfor %s", | ||
181 | (location + s).ascii()); | ||
182 | #endif | ||
183 | } | ||
184 | } | ||
185 | f.close(); | ||
68 | } | 186 | } |
69 | QCopEnvelope e("QPE/System", "linkChanged(QString)"); | ||
70 | QString lf = QString::null; | ||
71 | e << lf; | ||
72 | unlink( package ); | ||
73 | } | 187 | } |
74 | 188 | ||
75 | void PackageSlave::removePackage( const QString &package ) | 189 | void PackageHandler::addPackages( const QString &location ) |
76 | { | 190 | { |
77 | Process proc( QStringList() << "ipkg" << "remove" << package ); | 191 | // get list of *.list in location/usr/lib/ipkg/info/*.list |
192 | QDir dir(location + "/usr/lib/ipkg/info", "*.list", // No tr | ||
193 | QDir::Name, QDir::Files); | ||
194 | if ( !dir.exists() ) | ||
195 | return; | ||
78 | 196 | ||
79 | sendReply( "removeStarted(QString)", package ); | 197 | QStringList packages = dir.entryList(); |
198 | for ( QStringList::Iterator it = packages.begin(); | ||
199 | it != packages.end(); ++it ) { | ||
200 | addPackageFiles( location, *it ); | ||
201 | } | ||
202 | } | ||
203 | |||
204 | |||
205 | void PackageHandler::cleanupPackageFiles( const QString &listfile ) | ||
206 | { | ||
207 | QFile f(listfile); | ||
80 | 208 | ||
81 | QString output; | 209 | if ( f.open(IO_ReadOnly) ) { |
82 | if ( proc.exec( "", output ) ) { | 210 | QTextStream ts(&f); |
83 | sendReply( "removeDone(QString)", package ); | 211 | |
212 | QString s; | ||
213 | while ( !ts.eof() ) { // until end of file... | ||
214 | s = ts.readLine(); // line of text excluding '\n' | ||
215 | // for s, do link/mkdir. | ||
216 | if ( s.right(1) == "/" ) { | ||
217 | //should rmdir if empty, after all files have been removed | ||
218 | } else { | ||
219 | #ifndef Q_OS_WIN32 | ||
220 | qDebug("remove symlink for %s", s.ascii()); | ||
221 | //check if it is a symlink first (don't remove /etc/passwd...) | ||
222 | char buf[10]; //we don't care about the contents | ||
223 | if ( ::readlink( s.ascii(),buf, 10 >= 0 ) ) | ||
224 | ::unlink( s.ascii() ); | ||
225 | #else | ||
226 | // ### revise | ||
227 | qWarning("Unable to remove symlink %s:%s", __FILE__, __LINE__); | ||
228 | #endif | ||
229 | } | ||
84 | } | 230 | } |
231 | f.close(); | ||
232 | |||
233 | //remove the list file | ||
234 | ::unlink( listfile.ascii() ); | ||
235 | |||
236 | } | ||
237 | } | ||
238 | |||
239 | void PackageHandler::cleanupPackages( const QString &location ) | ||
240 | { | ||
241 | // get list of *.list in location/usr/lib/ipkg/info/*.list | ||
242 | QDir dir( "/usr/lib/ipkg/info/"+location, "*.list", // No tr | ||
243 | QDir::Name, QDir::Files); | ||
244 | if ( !dir.exists() ) | ||
245 | return; | ||
246 | |||
247 | QStringList packages = dir.entryList(); | ||
248 | for ( QStringList::Iterator it = packages.begin(); | ||
249 | it != packages.end(); ++it ) { | ||
250 | cleanupPackageFiles( *it ); | ||
251 | } | ||
252 | |||
253 | //remove the backup directory | ||
254 | //### | ||
255 | } | ||
256 | |||
257 | void PackageHandler::prepareInstall( const QString& size, const QString& path ) | ||
258 | { | ||
259 | // Check whether there will be enough space to install the next package. | ||
260 | bool ok; | ||
261 | unsigned int s = size.toUInt( &ok ); | ||
262 | |||
263 | if ( !ok ) | ||
264 | return; | ||
265 | |||
266 | // Shamelessly stolen from the sysinfo application (Werner) | ||
267 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) | ||
268 | struct statfs fs; | ||
269 | if ( statfs( path.latin1(), &fs ) == 0 ) | ||
270 | if ( s > fs.f_bsize * fs.f_bavail ) { | ||
271 | //qDebug("############### Not enough space left ###############"); | ||
272 | mNoSpaceLeft = TRUE; | ||
273 | } | ||
274 | #endif | ||
275 | } | ||
276 | |||
277 | void PackageHandler::iProcessExited() | ||
278 | { | ||
279 | if ( currentProcess->normalExit() && currentProcess->exitStatus() == 0 ) | ||
280 | sendReply( "installDone(QString)", currentPackage ); | ||
85 | else { | 281 | else { |
86 | sendReply( "removeFailed(QString)", package ); | 282 | #ifndef QT_NO_COP |
283 | QCopEnvelope e( "QPE/Desktop", "installFailed(QString,int,QString)" ); | ||
284 | e << currentPackage << currentProcess->exitStatus() | ||
285 | << currentProcessError; | ||
286 | #endif | ||
87 | } | 287 | } |
288 | |||
289 | delete currentProcess; | ||
290 | currentProcess = 0; | ||
291 | |||
292 | #ifndef QT_NO_COP | ||
88 | QCopEnvelope e("QPE/System", "linkChanged(QString)"); | 293 | QCopEnvelope e("QPE/System", "linkChanged(QString)"); |
89 | QString lf = QString::null; | 294 | QString lf = QString::null; |
90 | e << lf; | 295 | e << lf; |
296 | #endif | ||
297 | unlink( currentPackage ); | ||
91 | } | 298 | } |
92 | 299 | ||
93 | void PackageSlave::sendReply( const QCString& msg, const QString& arg ) | 300 | void PackageHandler::rmProcessExited() |
94 | { | 301 | { |
95 | QCopEnvelope e( "QPE/Desktop", msg ); | 302 | if ( currentProcess->normalExit() && currentProcess->exitStatus() == 0 ) |
96 | e << arg; | 303 | sendReply( "removeDone(QString)", currentPackage ); |
304 | else | ||
305 | sendReply( "removeFailed(QString)", currentPackage ); | ||
306 | |||
307 | #ifndef QT_NO_COP | ||
308 | QCopEnvelope e("QPE/System", "linkChanged(QString)"); | ||
309 | QString lf = QString::null; | ||
310 | e << lf; | ||
311 | #endif | ||
312 | } | ||
313 | |||
314 | void PackageHandler::readyReadStdout() | ||
315 | { | ||
316 | while ( currentProcess->canReadLineStdout() ) { | ||
317 | QString line = currentProcess->readLineStdout(); | ||
318 | currentProcessError.append("OUT:"+line); | ||
319 | if ( line.contains( "Unpacking" ) ) // No tr | ||
320 | sendReply( "installStep(QString)", "one" ); // No tr | ||
321 | else if ( line.contains( "Configuring" ) ) // No tr | ||
322 | sendReply( "installStep(QString)", "two" ); // No tr | ||
323 | } | ||
324 | } | ||
325 | |||
326 | void PackageHandler::readyReadStderr() | ||
327 | { | ||
328 | while ( currentProcess->canReadLineStderr() ) { | ||
329 | QString line = currentProcess->readLineStderr(); | ||
330 | currentProcessError.append("ERR:"+line); | ||
331 | } | ||
332 | } | ||
333 | |||
334 | void PackageHandler::redoPackages() | ||
335 | { | ||
336 | //get list of filesystems | ||
337 | |||
338 | //call cleanupPackages for the ones that have disappeared | ||
339 | |||
340 | //call addPackageFiles for the new ones | ||
97 | } | 341 | } |
diff --git a/core/launcher/qprocess_unix.cpp b/core/launcher/qprocess_unix.cpp index a07bf64..19a8c93 100644 --- a/core/launcher/qprocess_unix.cpp +++ b/core/launcher/qprocess_unix.cpp | |||
@@ -5,96 +5,99 @@ | |||
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | //#include "qplatformdefs.h" | 21 | //#include "qplatformdefs.h" |
22 | 22 | ||
23 | // Solaris redefines connect -> __xnet_connect with _XOPEN_SOURCE_EXTENDED. | 23 | // Solaris redefines connect -> __xnet_connect with _XOPEN_SOURCE_EXTENDED. |
24 | #if defined(connect) | 24 | #if defined(connect) |
25 | #undef connect | 25 | #undef connect |
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | #include "qprocess.h" | 28 | #include "qprocess.h" |
29 | 29 | ||
30 | #ifndef QT_NO_PROCESS | 30 | #ifndef QT_NO_PROCESS |
31 | 31 | ||
32 | #include "qapplication.h" | 32 | #include "qapplication.h" |
33 | #include "qqueue.h" | 33 | #include "qqueue.h" |
34 | #include "qlist.h" | 34 | #include "qlist.h" |
35 | #include "qsocketnotifier.h" | 35 | #include "qsocketnotifier.h" |
36 | #include "qtimer.h" | 36 | #include "qtimer.h" |
37 | #include "qregexp.h" | 37 | #include "qregexp.h" |
38 | 38 | ||
39 | #include "qcleanuphandler_p.h" | 39 | #include "qcleanuphandler_p.h" |
40 | 40 | ||
41 | #include <stdlib.h> | 41 | #include <stdlib.h> |
42 | 42 | ||
43 | // ### FOR Qt 2.3 compat | 43 | // ### FOR Qt 2.3 compat |
44 | #include <unistd.h> | 44 | #include <unistd.h> |
45 | #include <signal.h> | 45 | #include <signal.h> |
46 | #include <sys/socket.h> | 46 | #include <sys/socket.h> |
47 | #include <sys/ioctl.h> | 47 | #include <sys/ioctl.h> |
48 | #include <sys/wait.h> | 48 | #include <sys/wait.h> |
49 | #include <sys/fcntl.h> | 49 | #include <sys/fcntl.h> |
50 | 50 | ||
51 | #include <errno.h> | 51 | #include <errno.h> |
52 | 52 | ||
53 | #ifdef Q_OS_MACX | ||
54 | #include <sys/time.h> | ||
55 | #endif | ||
53 | #include <sys/resource.h> | 56 | #include <sys/resource.h> |
54 | 57 | ||
55 | #ifdef __MIPSEL__ | 58 | #ifdef __MIPSEL__ |
56 | # ifndef SOCK_DGRAM | 59 | # ifndef SOCK_DGRAM |
57 | # define SOCK_DGRAM 1 | 60 | # define SOCK_DGRAM 1 |
58 | # endif | 61 | # endif |
59 | # ifndef SOCK_STREAM | 62 | # ifndef SOCK_STREAM |
60 | # define SOCK_STREAM 2 | 63 | # define SOCK_STREAM 2 |
61 | # endif | 64 | # endif |
62 | #endif | 65 | #endif |
63 | 66 | ||
64 | //#define QT_QPROCESS_DEBUG | 67 | //#define QT_QPROCESS_DEBUG |
65 | 68 | ||
66 | 69 | ||
67 | #ifdef Q_C_CALLBACKS | 70 | #ifdef Q_C_CALLBACKS |
68 | extern "C" { | 71 | extern "C" { |
69 | #endif // Q_C_CALLBACKS | 72 | #endif // Q_C_CALLBACKS |
70 | 73 | ||
71 | #define QT_SIGNAL_RETTYPE void | 74 | #define QT_SIGNAL_RETTYPE void |
72 | #define QT_SIGNAL_ARGS int | 75 | #define QT_SIGNAL_ARGS int |
73 | #define QT_SIGNAL_IGNORE SIG_IGN | 76 | #define QT_SIGNAL_IGNORE SIG_IGN |
74 | 77 | ||
75 | QT_SIGNAL_RETTYPE qt_C_sigchldHnd(QT_SIGNAL_ARGS); | 78 | QT_SIGNAL_RETTYPE qt_C_sigchldHnd(QT_SIGNAL_ARGS); |
76 | QT_SIGNAL_RETTYPE qt_C_sigpipeHnd(QT_SIGNAL_ARGS); | 79 | QT_SIGNAL_RETTYPE qt_C_sigpipeHnd(QT_SIGNAL_ARGS); |
77 | 80 | ||
78 | #ifdef Q_C_CALLBACKS | 81 | #ifdef Q_C_CALLBACKS |
79 | } | 82 | } |
80 | #endif // Q_C_CALLBACKS | 83 | #endif // Q_C_CALLBACKS |
81 | 84 | ||
82 | 85 | ||
83 | class QProc; | 86 | class QProc; |
84 | class QProcessManager; | 87 | class QProcessManager; |
85 | class QProcessPrivate | 88 | class QProcessPrivate |
86 | { | 89 | { |
87 | public: | 90 | public: |
88 | QProcessPrivate(); | 91 | QProcessPrivate(); |
89 | ~QProcessPrivate(); | 92 | ~QProcessPrivate(); |
90 | 93 | ||
91 | void closeOpenSocketsForChild(); | 94 | void closeOpenSocketsForChild(); |
92 | void newProc( pid_t pid, QProcess *process ); | 95 | void newProc( pid_t pid, QProcess *process ); |
93 | 96 | ||
94 | QByteArray bufStdout; | 97 | QByteArray bufStdout; |
95 | QByteArray bufStderr; | 98 | QByteArray bufStderr; |
96 | 99 | ||
97 | QQueue<QByteArray> stdinBuf; | 100 | QQueue<QByteArray> stdinBuf; |
98 | 101 | ||
99 | QSocketNotifier *notifierStdin; | 102 | QSocketNotifier *notifierStdin; |
100 | QSocketNotifier *notifierStdout; | 103 | QSocketNotifier *notifierStdout; |
diff --git a/core/launcher/server.pro b/core/launcher/server.pro index 93baeb4..0513536 100644 --- a/core/launcher/server.pro +++ b/core/launcher/server.pro | |||
@@ -70,51 +70,56 @@ SOURCES += server.cpp \ | |||
70 | packageslave.cpp \ | 70 | packageslave.cpp \ |
71 | irserver.cpp \ | 71 | irserver.cpp \ |
72 | qcopbridge.cpp \ | 72 | qcopbridge.cpp \ |
73 | startmenu.cpp \ | 73 | startmenu.cpp \ |
74 | main.cpp \ | 74 | main.cpp \ |
75 | firstuse.cpp \ | 75 | firstuse.cpp \ |
76 | $$(OPIEDIR)/rsync/base64.c \ | 76 | $$(OPIEDIR)/rsync/base64.c \ |
77 | $$(OPIEDIR)/rsync/buf.c \ | 77 | $$(OPIEDIR)/rsync/buf.c \ |
78 | $$(OPIEDIR)/rsync/checksum.c \ | 78 | $$(OPIEDIR)/rsync/checksum.c \ |
79 | $$(OPIEDIR)/rsync/command.c \ | 79 | $$(OPIEDIR)/rsync/command.c \ |
80 | $$(OPIEDIR)/rsync/delta.c \ | 80 | $$(OPIEDIR)/rsync/delta.c \ |
81 | $$(OPIEDIR)/rsync/emit.c \ | 81 | $$(OPIEDIR)/rsync/emit.c \ |
82 | $$(OPIEDIR)/rsync/hex.c \ | 82 | $$(OPIEDIR)/rsync/hex.c \ |
83 | $$(OPIEDIR)/rsync/job.c \ | 83 | $$(OPIEDIR)/rsync/job.c \ |
84 | $$(OPIEDIR)/rsync/mdfour.c \ | 84 | $$(OPIEDIR)/rsync/mdfour.c \ |
85 | $$(OPIEDIR)/rsync/mksum.c \ | 85 | $$(OPIEDIR)/rsync/mksum.c \ |
86 | $$(OPIEDIR)/rsync/msg.c \ | 86 | $$(OPIEDIR)/rsync/msg.c \ |
87 | $$(OPIEDIR)/rsync/netint.c \ | 87 | $$(OPIEDIR)/rsync/netint.c \ |
88 | $$(OPIEDIR)/rsync/patch.c \ | 88 | $$(OPIEDIR)/rsync/patch.c \ |
89 | $$(OPIEDIR)/rsync/prototab.c \ | 89 | $$(OPIEDIR)/rsync/prototab.c \ |
90 | $$(OPIEDIR)/rsync/readsums.c \ | 90 | $$(OPIEDIR)/rsync/readsums.c \ |
91 | $$(OPIEDIR)/rsync/scoop.c \ | 91 | $$(OPIEDIR)/rsync/scoop.c \ |
92 | $$(OPIEDIR)/rsync/search.c \ | 92 | $$(OPIEDIR)/rsync/search.c \ |
93 | $$(OPIEDIR)/rsync/stats.c \ | 93 | $$(OPIEDIR)/rsync/stats.c \ |
94 | $$(OPIEDIR)/rsync/stream.c \ | 94 | $$(OPIEDIR)/rsync/stream.c \ |
95 | $$(OPIEDIR)/rsync/sumset.c \ | 95 | $$(OPIEDIR)/rsync/sumset.c \ |
96 | $$(OPIEDIR)/rsync/trace.c \ | 96 | $$(OPIEDIR)/rsync/trace.c \ |
97 | $$(OPIEDIR)/rsync/tube.c \ | 97 | $$(OPIEDIR)/rsync/tube.c \ |
98 | $$(OPIEDIR)/rsync/util.c \ | 98 | $$(OPIEDIR)/rsync/util.c \ |
99 | $$(OPIEDIR)/rsync/version.c \ | 99 | $$(OPIEDIR)/rsync/version.c \ |
100 | $$(OPIEDIR)/rsync/whole.c \ | 100 | $$(OPIEDIR)/rsync/whole.c \ |
101 | $$(OPIEDIR)/rsync/qrsync.cpp \ | 101 | $$(OPIEDIR)/rsync/qrsync.cpp \ |
102 | syncdialog.cpp \ | 102 | syncdialog.cpp \ |
103 | serverapp.cpp \ | 103 | serverapp.cpp \ |
104 | launcherglobal.cpp \ | 104 | launcherglobal.cpp \ |
105 | qprocess.cpp \ | 105 | qprocess.cpp \ |
106 | qprocess_unix.cpp \ | 106 | qprocess_unix.cpp \ |
107 | screensaver.cpp | 107 | screensaver.cpp |
108 | 108 | ||
109 | 109 | ||
110 | INCLUDEPATH += $(OPIEDIR)/core/apps/calibrate | 110 | INCLUDEPATH += $(OPIEDIR)/core/apps/calibrate |
111 | DEPENDPATH+= $(OPIEDIR)/core/apps/calibrate | 111 | DEPENDPATH+= $(OPIEDIR)/core/apps/calibrate |
112 | 112 | ||
113 | INCLUDEPATH += $(OPIEDIR)/include $(OPIEDIR)/rsync | 113 | INCLUDEPATH += $(OPIEDIR)/include $(OPIEDIR)/rsync |
114 | DEPENDPATH+= $(OPIEDIR)/rsync | 114 | DEPENDPATH+= $(OPIEDIR)/rsync |
115 | 115 | ||
116 | TARGET = qpe | 116 | TARGET = qpe |
117 | 117 | ||
118 | CONFTEST = $$system( echo $CONFIG_TARGET_MACOSX ) | ||
119 | contains( CONFTEST, y ){ | ||
120 | LIBS += -lqpe -lopie | ||
121 | }else{ | ||
118 | LIBS+= -lcrypt -lqpe -lopie | 122 | LIBS+= -lcrypt -lqpe -lopie |
123 | } | ||
119 | 124 | ||
120 | include ( $(OPIEDIR)/include.pro ) | 125 | include ( $(OPIEDIR)/include.pro ) |
diff --git a/core/launcher/startmenu.cpp b/core/launcher/startmenu.cpp index 014418d..08ae885 100644 --- a/core/launcher/startmenu.cpp +++ b/core/launcher/startmenu.cpp | |||
@@ -211,97 +211,101 @@ void StartMenu::launch() | |||
211 | 211 | ||
212 | 212 | ||
213 | 213 | ||
214 | static int compareAppletPositions(const void *a, const void *b) | 214 | static int compareAppletPositions(const void *a, const void *b) |
215 | { | 215 | { |
216 | const MenuApplet* aa = *(const MenuApplet**)a; | 216 | const MenuApplet* aa = *(const MenuApplet**)a; |
217 | const MenuApplet* ab = *(const MenuApplet**)b; | 217 | const MenuApplet* ab = *(const MenuApplet**)b; |
218 | int d = aa->iface->position() - ab->iface->position(); | 218 | int d = aa->iface->position() - ab->iface->position(); |
219 | if ( d ) return d; | 219 | if ( d ) return d; |
220 | return QString::compare(aa->library->library(),ab->library->library()); | 220 | return QString::compare(aa->library->library(),ab->library->library()); |
221 | } | 221 | } |
222 | 222 | ||
223 | void StartMenu::clearApplets() | 223 | void StartMenu::clearApplets() |
224 | { | 224 | { |
225 | if (launchMenu ) | 225 | if (launchMenu ) |
226 | launchMenu-> hide(); | 226 | launchMenu-> hide(); |
227 | 227 | ||
228 | for ( QIntDictIterator<MenuApplet> it ( m_applets ); it. current ( ); ++it ) { | 228 | for ( QIntDictIterator<MenuApplet> it ( m_applets ); it. current ( ); ++it ) { |
229 | MenuApplet *applet = it. current ( ); | 229 | MenuApplet *applet = it. current ( ); |
230 | if ( launchMenu ) { | 230 | if ( launchMenu ) { |
231 | launchMenu-> removeItem ( applet-> id ); | 231 | launchMenu-> removeItem ( applet-> id ); |
232 | delete applet-> popup; | 232 | delete applet-> popup; |
233 | } | 233 | } |
234 | 234 | ||
235 | applet-> iface-> release(); | 235 | applet-> iface-> release(); |
236 | applet-> library-> unload(); | 236 | applet-> library-> unload(); |
237 | delete applet-> library; | 237 | delete applet-> library; |
238 | } | 238 | } |
239 | m_applets.clear(); | 239 | m_applets.clear(); |
240 | } | 240 | } |
241 | 241 | ||
242 | 242 | ||
243 | 243 | ||
244 | 244 | ||
245 | void StartMenu::loadApplets() | 245 | void StartMenu::loadApplets() |
246 | { | 246 | { |
247 | Config cfg( "StartMenu" ); | 247 | Config cfg( "StartMenu" ); |
248 | cfg.setGroup( "Applets" ); | 248 | cfg.setGroup( "Applets" ); |
249 | 249 | ||
250 | // SafeMode causes too much problems, so we disable it for now -- | 250 | // SafeMode causes too much problems, so we disable it for now -- |
251 | // maybe we should reenable it for OPIE 1.0 - sandman 26.09.02 | 251 | // maybe we should reenable it for OPIE 1.0 - sandman 26.09.02 |
252 | // removed in the remerge PluginManager could handle it | 252 | // removed in the remerge PluginManager could handle it |
253 | // we don't currently use it -zecke | 253 | // we don't currently use it -zecke |
254 | 254 | ||
255 | QStringList exclude = cfg.readListEntry( "ExcludeApplets", ',' ); | 255 | QStringList exclude = cfg.readListEntry( "ExcludeApplets", ',' ); |
256 | 256 | ||
257 | QString lang = getenv( "LANG" ); | 257 | QString lang = getenv( "LANG" ); |
258 | QString path = QPEApplication::qpeDir() + "/plugins/applets"; | 258 | QString path = QPEApplication::qpeDir() + "/plugins/applets"; |
259 | #ifdef Q_OS_MACX | ||
260 | QDir dir( path, "lib*.dylib" ); | ||
261 | #else | ||
259 | QDir dir( path, "lib*.so" ); | 262 | QDir dir( path, "lib*.so" ); |
263 | #endif /* Q_OS_MACX */ | ||
260 | QStringList list = dir.entryList(); | 264 | QStringList list = dir.entryList(); |
261 | QStringList::Iterator it; | 265 | QStringList::Iterator it; |
262 | int napplets=0; | 266 | int napplets=0; |
263 | MenuApplet* *xapplets = new MenuApplet*[list.count()]; | 267 | MenuApplet* *xapplets = new MenuApplet*[list.count()]; |
264 | for ( it = list.begin(); it != list.end(); ++it ) { | 268 | for ( it = list.begin(); it != list.end(); ++it ) { |
265 | if ( exclude.find( *it ) != exclude.end() ) | 269 | if ( exclude.find( *it ) != exclude.end() ) |
266 | continue; | 270 | continue; |
267 | MenuAppletInterface *iface = 0; | 271 | MenuAppletInterface *iface = 0; |
268 | QLibrary *lib = new QLibrary( path + "/" + *it ); | 272 | QLibrary *lib = new QLibrary( path + "/" + *it ); |
269 | if (( lib->queryInterface( IID_MenuApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) { | 273 | if (( lib->queryInterface( IID_MenuApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) { |
270 | MenuApplet *applet = new MenuApplet; | 274 | MenuApplet *applet = new MenuApplet; |
271 | xapplets[napplets++] = applet; | 275 | xapplets[napplets++] = applet; |
272 | applet->library = lib; | 276 | applet->library = lib; |
273 | applet->iface = iface; | 277 | applet->iface = iface; |
274 | 278 | ||
275 | QTranslator *trans = new QTranslator(qApp); | 279 | QTranslator *trans = new QTranslator(qApp); |
276 | QString type = (*it).left( (*it).find(".") ); | 280 | QString type = (*it).left( (*it).find(".") ); |
277 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; | 281 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; |
278 | if ( trans->load( tfn )) | 282 | if ( trans->load( tfn )) |
279 | qApp->installTranslator( trans ); | 283 | qApp->installTranslator( trans ); |
280 | else | 284 | else |
281 | delete trans; | 285 | delete trans; |
282 | } else { | 286 | } else { |
283 | exclude += *it; | 287 | exclude += *it; |
284 | delete lib; | 288 | delete lib; |
285 | } | 289 | } |
286 | } | 290 | } |
287 | cfg.writeEntry( "ExcludeApplets", exclude, ',' ); | 291 | cfg.writeEntry( "ExcludeApplets", exclude, ',' ); |
288 | qsort(xapplets,napplets,sizeof(m_applets[0]),compareAppletPositions); | 292 | qsort(xapplets,napplets,sizeof(m_applets[0]),compareAppletPositions); |
289 | 293 | ||
290 | 294 | ||
291 | int foo = ( launchMenu-> count ( )) ? launchMenu-> insertSeparator ( ) : 0; | 295 | int foo = ( launchMenu-> count ( )) ? launchMenu-> insertSeparator ( ) : 0; |
292 | 296 | ||
293 | while (napplets--) { | 297 | while (napplets--) { |
294 | MenuApplet *applet = xapplets[napplets]; | 298 | MenuApplet *applet = xapplets[napplets]; |
295 | 299 | ||
296 | applet-> popup = applet-> iface-> popup ( this ); | 300 | applet-> popup = applet-> iface-> popup ( this ); |
297 | 301 | ||
298 | if ( applet-> popup ) | 302 | if ( applet-> popup ) |
299 | applet-> id = launchMenu-> insertItem ( applet-> iface-> icon ( ), applet-> iface-> text ( ), applet-> popup ); | 303 | applet-> id = launchMenu-> insertItem ( applet-> iface-> icon ( ), applet-> iface-> text ( ), applet-> popup ); |
300 | else | 304 | else |
301 | applet-> id = launchMenu-> insertItem ( applet-> iface-> icon ( ), applet-> iface-> text ( ) ); | 305 | applet-> id = launchMenu-> insertItem ( applet-> iface-> icon ( ), applet-> iface-> text ( ) ); |
302 | 306 | ||
303 | 307 | ||
304 | m_applets.insert ( applet-> id, new MenuApplet(*applet)); | 308 | m_applets.insert ( applet-> id, new MenuApplet(*applet)); |
305 | } | 309 | } |
306 | delete [] xapplets; | 310 | delete [] xapplets; |
307 | 311 | ||
diff --git a/core/launcher/systray.cpp b/core/launcher/systray.cpp index 6122770..691f6b8 100644 --- a/core/launcher/systray.cpp +++ b/core/launcher/systray.cpp | |||
@@ -57,93 +57,98 @@ static int compareAppletPositions(const void *a, const void *b) | |||
57 | if ( d ) return d; | 57 | if ( d ) return d; |
58 | return QString::compare(ab->name,aa->name); | 58 | return QString::compare(ab->name,aa->name); |
59 | } | 59 | } |
60 | 60 | ||
61 | void SysTray::loadApplets() | 61 | void SysTray::loadApplets() |
62 | { | 62 | { |
63 | hide(); | 63 | hide(); |
64 | clearApplets(); | 64 | clearApplets(); |
65 | addApplets(); | 65 | addApplets(); |
66 | } | 66 | } |
67 | 67 | ||
68 | void SysTray::clearApplets() | 68 | void SysTray::clearApplets() |
69 | { | 69 | { |
70 | #ifndef QT_NO_COMPONENTS | 70 | #ifndef QT_NO_COMPONENTS |
71 | 71 | ||
72 | /* | 72 | /* |
73 | * Note on clearing. SOme applets delete their | 73 | * Note on clearing. SOme applets delete their |
74 | * applets themselves some don't do it | 74 | * applets themselves some don't do it |
75 | * and on restart this can crash. If we delete it | 75 | * and on restart this can crash. If we delete it |
76 | * here we might end up in a double deletion. We could | 76 | * here we might end up in a double deletion. We could |
77 | * use QGuardedPtr but that would be one QOBject | 77 | * use QGuardedPtr but that would be one QOBject |
78 | * for every applet more but only useful for restart | 78 | * for every applet more but only useful for restart |
79 | */ | 79 | */ |
80 | QValueList<TaskbarApplet>::Iterator mit; | 80 | QValueList<TaskbarApplet>::Iterator mit; |
81 | for ( mit = appletList.begin(); mit != appletList.end(); ++mit ) { | 81 | for ( mit = appletList.begin(); mit != appletList.end(); ++mit ) { |
82 | (*mit).iface->release(); | 82 | (*mit).iface->release(); |
83 | (*mit).library->unload(); | 83 | (*mit).library->unload(); |
84 | delete (*mit).library; | 84 | delete (*mit).library; |
85 | } | 85 | } |
86 | 86 | ||
87 | #endif | 87 | #endif |
88 | appletList.clear(); | 88 | appletList.clear(); |
89 | if ( layout ) | 89 | if ( layout ) |
90 | delete layout; | 90 | delete layout; |
91 | layout = new QHBoxLayout( this, 0, 1 ); | 91 | layout = new QHBoxLayout( this, 0, 1 ); |
92 | layout->setAutoAdd(TRUE); | 92 | layout->setAutoAdd(TRUE); |
93 | } | 93 | } |
94 | 94 | ||
95 | void SysTray::addApplets() | 95 | void SysTray::addApplets() |
96 | { | 96 | { |
97 | hide(); | 97 | hide(); |
98 | #ifndef QT_NO_COMPONENTS | 98 | #ifndef QT_NO_COMPONENTS |
99 | Config cfg( "Taskbar" ); | 99 | Config cfg( "Taskbar" ); |
100 | cfg.setGroup( "Applets" ); | 100 | cfg.setGroup( "Applets" ); |
101 | QStringList exclude = cfg.readListEntry( "ExcludeApplets", ',' ); | 101 | QStringList exclude = cfg.readListEntry( "ExcludeApplets", ',' ); |
102 | 102 | ||
103 | QString lang = getenv( "LANG" ); | 103 | QString lang = getenv( "LANG" ); |
104 | QString path = QPEApplication::qpeDir() + "/plugins/applets"; | 104 | QString path = QPEApplication::qpeDir() + "/plugins/applets"; |
105 | #ifdef Q_OS_MACX | ||
106 | QDir dir( path, "lib*.dylib" ); | ||
107 | #else | ||
105 | QDir dir( path, "lib*.so" ); | 108 | QDir dir( path, "lib*.so" ); |
109 | #endif /* Q_OS_MACX */ | ||
106 | QStringList list = dir.entryList(); | 110 | QStringList list = dir.entryList(); |
107 | QStringList::Iterator it; | 111 | QStringList::Iterator it; |
108 | int napplets=0; | 112 | int napplets=0; |
109 | TaskbarApplet* *applets = new TaskbarApplet*[list.count()]; | 113 | TaskbarApplet* *applets = new TaskbarApplet*[list.count()]; |
110 | for ( it = list.begin(); it != list.end(); ++it ) { | 114 | for ( it = list.begin(); it != list.end(); ++it ) { |
111 | if ( exclude.find( *it ) != exclude.end() ) | 115 | if ( exclude.find( *it ) != exclude.end() ) |
112 | continue; | 116 | continue; |
117 | qWarning( "Found Applet: %s", (*it).latin1() ); | ||
113 | TaskbarAppletInterface *iface = 0; | 118 | TaskbarAppletInterface *iface = 0; |
114 | QLibrary *lib = new QLibrary( path + "/" + *it ); | 119 | QLibrary *lib = new QLibrary( path + "/" + *it ); |
115 | if (( lib->queryInterface( IID_TaskbarApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) { | 120 | if (( lib->queryInterface( IID_TaskbarApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) { |
116 | TaskbarApplet *applet = new TaskbarApplet; | 121 | TaskbarApplet *applet = new TaskbarApplet; |
117 | applets[napplets++] = applet; | 122 | applets[napplets++] = applet; |
118 | applet->library = lib; | 123 | applet->library = lib; |
119 | applet->iface = iface; | 124 | applet->iface = iface; |
120 | 125 | ||
121 | QTranslator *trans = new QTranslator(qApp); | 126 | QTranslator *trans = new QTranslator(qApp); |
122 | QString type = (*it).left( (*it).find(".") ); | 127 | QString type = (*it).left( (*it).find(".") ); |
123 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; | 128 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; |
124 | if ( trans->load( tfn )) | 129 | if ( trans->load( tfn )) |
125 | qApp->installTranslator( trans ); | 130 | qApp->installTranslator( trans ); |
126 | else | 131 | else |
127 | delete trans; | 132 | delete trans; |
128 | } else { | 133 | } else { |
129 | exclude += *it; | 134 | exclude += *it; |
130 | delete lib; | 135 | delete lib; |
131 | } | 136 | } |
132 | } | 137 | } |
133 | cfg.writeEntry( "ExcludeApplets", exclude, ',' ); | 138 | cfg.writeEntry( "ExcludeApplets", exclude, ',' ); |
134 | qsort(applets,napplets,sizeof(applets[0]),compareAppletPositions); | 139 | qsort(applets,napplets,sizeof(applets[0]),compareAppletPositions); |
135 | while (napplets--) { | 140 | while (napplets--) { |
136 | TaskbarApplet *applet = applets[napplets]; | 141 | TaskbarApplet *applet = applets[napplets]; |
137 | applet->applet = applet->iface->applet( this ); | 142 | applet->applet = applet->iface->applet( this ); |
138 | appletList.append(*applet); | 143 | appletList.append(*applet); |
139 | } | 144 | } |
140 | delete [] applets; | 145 | delete [] applets; |
141 | #else /* ## FIXME single app */ | 146 | #else /* ## FIXME single app */ |
142 | TaskbarApplet * const applet = new TaskbarApplet(); | 147 | TaskbarApplet * const applet = new TaskbarApplet(); |
143 | applet->iface = new ClockAppletImpl(); | 148 | applet->iface = new ClockAppletImpl(); |
144 | applet->applet = applet->iface->applet( this ); | 149 | applet->applet = applet->iface->applet( this ); |
145 | appletList.append( applet ); | 150 | appletList.append( applet ); |
146 | #endif | 151 | #endif |
147 | show(); | 152 | show(); |
148 | } | 153 | } |
149 | 154 | ||
diff --git a/core/launcher/transferserver.cpp b/core/launcher/transferserver.cpp index c69df2d..439e110 100644 --- a/core/launcher/transferserver.cpp +++ b/core/launcher/transferserver.cpp | |||
@@ -1,80 +1,83 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of the Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | //#define _XOPEN_SOURCE | 20 | //#define _XOPEN_SOURCE |
21 | 21 | ||
22 | #include <qtopia/global.h> | 22 | #include <qtopia/global.h> |
23 | #include <qtopia/qpeapplication.h> | 23 | #include <qtopia/qpeapplication.h> |
24 | 24 | ||
25 | #ifndef Q_OS_WIN32 | 25 | #ifndef Q_OS_WIN32 |
26 | #include <pwd.h> | 26 | #include <pwd.h> |
27 | #include <sys/types.h> | 27 | #include <sys/types.h> |
28 | #include <unistd.h> | 28 | #include <unistd.h> |
29 | #include <stdlib.h> | 29 | #include <stdlib.h> |
30 | #include <time.h> | 30 | #include <time.h> |
31 | |||
32 | #ifndef Q_OS_MACX | ||
31 | #include <shadow.h> | 33 | #include <shadow.h> |
32 | #include <crypt.h> | 34 | #include <crypt.h> |
35 | #endif /* Q_OS_MACX */ | ||
33 | 36 | ||
34 | #else | 37 | #else |
35 | #include <stdlib.h> | 38 | #include <stdlib.h> |
36 | #include <time.h> | 39 | #include <time.h> |
37 | #endif | 40 | #endif |
38 | 41 | ||
39 | 42 | ||
40 | #if defined(_OS_LINUX_) | 43 | #if defined(_OS_LINUX_) |
41 | #include <shadow.h> | 44 | #include <shadow.h> |
42 | #endif | 45 | #endif |
43 | 46 | ||
44 | #include <qdir.h> | 47 | #include <qdir.h> |
45 | #include <qfile.h> | 48 | #include <qfile.h> |
46 | #include <qtextstream.h> | 49 | #include <qtextstream.h> |
47 | #include <qdatastream.h> | 50 | #include <qdatastream.h> |
48 | #include <qmessagebox.h> | 51 | #include <qmessagebox.h> |
49 | #include <qstringlist.h> | 52 | #include <qstringlist.h> |
50 | #include <qfileinfo.h> | 53 | #include <qfileinfo.h> |
51 | #include <qregexp.h> | 54 | #include <qregexp.h> |
52 | //#include <qtopia/qcopchannel_qws.h> | 55 | //#include <qtopia/qcopchannel_qws.h> |
53 | #include <qtopia/process.h> | 56 | #include <qtopia/process.h> |
54 | #include <qtopia/global.h> | 57 | #include <qtopia/global.h> |
55 | #include <qtopia/config.h> | 58 | #include <qtopia/config.h> |
56 | #include <qtopia/private/contact.h> | 59 | #include <qtopia/private/contact.h> |
57 | #include <qtopia/quuid.h> | 60 | #include <qtopia/quuid.h> |
58 | #include <qtopia/version.h> | 61 | #include <qtopia/version.h> |
59 | #ifdef Q_WS_QWS | 62 | #ifdef Q_WS_QWS |
60 | #include <qtopia/qcopenvelope_qws.h> | 63 | #include <qtopia/qcopenvelope_qws.h> |
61 | #endif | 64 | #endif |
62 | 65 | ||
63 | #include "launcherglobal.h" | 66 | #include "launcherglobal.h" |
64 | 67 | ||
65 | #include "transferserver.h" | 68 | #include "transferserver.h" |
66 | #include <qtopia/qprocess.h> | 69 | #include <qtopia/qprocess.h> |
67 | 70 | ||
68 | const int block_size = 51200; | 71 | const int block_size = 51200; |
69 | 72 | ||
70 | TransferServer::TransferServer( Q_UINT16 port, QObject *parent, | 73 | TransferServer::TransferServer( Q_UINT16 port, QObject *parent, |
71 | const char* name) | 74 | const char* name) |
72 | : QServerSocket( port, 1, parent, name ) | 75 | : QServerSocket( port, 1, parent, name ) |
73 | { | 76 | { |
74 | connections.setAutoDelete( TRUE ); | 77 | connections.setAutoDelete( TRUE ); |
75 | if ( !ok() ) | 78 | if ( !ok() ) |
76 | qWarning( "Failed to bind to port %d", port ); | 79 | qWarning( "Failed to bind to port %d", port ); |
77 | } | 80 | } |
78 | 81 | ||
79 | void TransferServer::authorizeConnections() | 82 | void TransferServer::authorizeConnections() |
80 | { | 83 | { |