summaryrefslogtreecommitdiff
path: root/library/global.cpp
Unidiff
Diffstat (limited to 'library/global.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/global.cpp4
1 files changed, 0 insertions, 4 deletions
diff --git a/library/global.cpp b/library/global.cpp
index 2e4d03f..9b908bf 100644
--- a/library/global.cpp
+++ b/library/global.cpp
@@ -299,518 +299,514 @@ const QDawg& Global::dawg(const QString& name)
299{ 299{
300 createDocDir(); 300 createDocDir();
301 if ( !named_dawg ) 301 if ( !named_dawg )
302 named_dawg = new QDict<QDawg>; 302 named_dawg = new QDict<QDawg>;
303 QDawg* r = named_dawg->find(name); 303 QDawg* r = named_dawg->find(name);
304 if ( !r ) { 304 if ( !r ) {
305 r = new QDawg; 305 r = new QDawg;
306 named_dawg->insert(name,r); 306 named_dawg->insert(name,r);
307 QString dawgfilename = applicationFileName("Dictionary", name ) + ".dawg"; 307 QString dawgfilename = applicationFileName("Dictionary", name ) + ".dawg";
308 QFile dawgfile(dawgfilename); 308 QFile dawgfile(dawgfilename);
309 if ( dawgfile.open(IO_ReadOnly) ) 309 if ( dawgfile.open(IO_ReadOnly) )
310 r->readFile(dawgfilename); 310 r->readFile(dawgfilename);
311 } 311 }
312 return *r; 312 return *r;
313} 313}
314 314
315/*! 315/*!
316 \overload 316 \overload
317 Adds \a wordlist to the addedDawg(). 317 Adds \a wordlist to the addedDawg().
318 318
319 Note that the addition of words persists between program executions 319 Note that the addition of words persists between program executions
320 (they are saved in the dictionary files), so you should confirm the 320 (they are saved in the dictionary files), so you should confirm the
321 words with the user before adding them. 321 words with the user before adding them.
322*/ 322*/
323void Global::addWords(const QStringList& wordlist) 323void Global::addWords(const QStringList& wordlist)
324{ 324{
325 addWords("local",wordlist); 325 addWords("local",wordlist);
326} 326}
327 327
328/*! 328/*!
329 \overload 329 \overload
330 Adds \a wordlist to the addedDawg(). 330 Adds \a wordlist to the addedDawg().
331 331
332 Note that the addition of words persists between program executions 332 Note that the addition of words persists between program executions
333 (they are saved in the dictionary files), so you should confirm the 333 (they are saved in the dictionary files), so you should confirm the
334 words with the user before adding them. 334 words with the user before adding them.
335*/ 335*/
336void Global::addWords(const QString& dictname, const QStringList& wordlist) 336void Global::addWords(const QString& dictname, const QStringList& wordlist)
337{ 337{
338 QDawg& d = (QDawg&)dawg(dictname); 338 QDawg& d = (QDawg&)dawg(dictname);
339 QStringList all = d.allWords() + wordlist; 339 QStringList all = d.allWords() + wordlist;
340 d.createFromWords(all); 340 d.createFromWords(all);
341 341
342 QString dawgfilename = applicationFileName("Dictionary", dictname) + ".dawg"; 342 QString dawgfilename = applicationFileName("Dictionary", dictname) + ".dawg";
343 QFile dawgfile(dawgfilename); 343 QFile dawgfile(dawgfilename);
344 if ( dawgfile.open(IO_WriteOnly) ) { 344 if ( dawgfile.open(IO_WriteOnly) ) {
345 d.write(&dawgfile); 345 d.write(&dawgfile);
346 dawgfile.close(); 346 dawgfile.close();
347 } 347 }
348 348
349 // #### Re-read the dawg here if we use mmap(). 349 // #### Re-read the dawg here if we use mmap().
350 350
351 // #### Signal other processes to re-read. 351 // #### Signal other processes to re-read.
352} 352}
353 353
354 354
355/*! 355/*!
356 Returns the full path for the application called \a appname, with the 356 Returns the full path for the application called \a appname, with the
357 given \a filename. Returns QString::null if there was a problem creating 357 given \a filename. Returns QString::null if there was a problem creating
358 the directory tree for \a appname. 358 the directory tree for \a appname.
359 If \a filename contains "/", it is the caller's responsibility to 359 If \a filename contains "/", it is the caller's responsibility to
360 ensure that those directories exist. 360 ensure that those directories exist.
361*/ 361*/
362QString Global::applicationFileName(const QString& appname, const QString& filename) 362QString Global::applicationFileName(const QString& appname, const QString& filename)
363{ 363{
364 QDir d; 364 QDir d;
365 QString r = getenv("HOME"); 365 QString r = getenv("HOME");
366 r += "/Applications/"; 366 r += "/Applications/";
367 if ( !QFile::exists( r ) ) 367 if ( !QFile::exists( r ) )
368 if ( d.mkdir(r) == false ) 368 if ( d.mkdir(r) == false )
369 return QString::null; 369 return QString::null;
370 r += appname; 370 r += appname;
371 if ( !QFile::exists( r ) ) 371 if ( !QFile::exists( r ) )
372 if ( d.mkdir(r) == false ) 372 if ( d.mkdir(r) == false )
373 return QString::null; 373 return QString::null;
374 r += "/"; r += filename; 374 r += "/"; r += filename;
375 return r; 375 return r;
376} 376}
377 377
378/*! 378/*!
379 \internal 379 \internal
380*/ 380*/
381void Global::createDocDir() 381void Global::createDocDir()
382{ 382{
383 if ( !docDirCreated ) { 383 if ( !docDirCreated ) {
384 docDirCreated = TRUE; 384 docDirCreated = TRUE;
385 mkdir( QPEApplication::documentDir().latin1(), 0755 ); 385 mkdir( QPEApplication::documentDir().latin1(), 0755 );
386 } 386 }
387} 387}
388 388
389 389
390/*! 390/*!
391 Displays a status \a message to the user. This usually appears 391 Displays a status \a message to the user. This usually appears
392 in the taskbar for a short amount of time, then disappears. 392 in the taskbar for a short amount of time, then disappears.
393*/ 393*/
394void Global::statusMessage(const QString& message) 394void Global::statusMessage(const QString& message)
395{ 395{
396#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 396#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
397 QCopEnvelope e( "QPE/TaskBar", "message(QString)" ); 397 QCopEnvelope e( "QPE/TaskBar", "message(QString)" );
398 e << message; 398 e << message;
399#endif 399#endif
400} 400}
401 401
402/*! 402/*!
403 \internal 403 \internal
404*/ 404*/
405void Global::applyStyle() 405void Global::applyStyle()
406{ 406{
407#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 407#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
408 QCopChannel::send( "QPE/System", "applyStyle()" ); 408 QCopChannel::send( "QPE/System", "applyStyle()" );
409#else 409#else
410 ((QPEApplication *)qApp)->applyStyle(); // apply without needing QCop for floppy version 410 ((QPEApplication *)qApp)->applyStyle(); // apply without needing QCop for floppy version
411#endif 411#endif
412} 412}
413 413
414/*! 414/*!
415 \internal 415 \internal
416*/ 416*/
417QWidget *Global::shutdown( bool ) 417QWidget *Global::shutdown( bool )
418{ 418{
419#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 419#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
420 QCopChannel::send( "QPE/System", "shutdown()" ); 420 QCopChannel::send( "QPE/System", "shutdown()" );
421#endif 421#endif
422 return 0; 422 return 0;
423} 423}
424 424
425/*! 425/*!
426 \internal 426 \internal
427*/ 427*/
428QWidget *Global::restart( bool ) 428QWidget *Global::restart( bool )
429{ 429{
430#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 430#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
431 QCopChannel::send( "QPE/System", "restart()" ); 431 QCopChannel::send( "QPE/System", "restart()" );
432#endif 432#endif
433 return 0; 433 return 0;
434} 434}
435 435
436/*! 436/*!
437 Explicitly show the current input method. 437 Explicitly show the current input method.
438 438
439 Input methods are indicated in the taskbar by a small icon. If the 439 Input methods are indicated in the taskbar by a small icon. If the
440 input method is activated (shown) then it takes up some proportion 440 input method is activated (shown) then it takes up some proportion
441 of the bottom of the screen, to allow the user to interact (input 441 of the bottom of the screen, to allow the user to interact (input
442 characters) with it. 442 characters) with it.
443 443
444 \sa hideInputMethod() 444 \sa hideInputMethod()
445*/ 445*/
446void Global::showInputMethod() 446void Global::showInputMethod()
447{ 447{
448#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 448#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
449 QCopChannel::send( "QPE/TaskBar", "showInputMethod()" ); 449 QCopChannel::send( "QPE/TaskBar", "showInputMethod()" );
450#endif 450#endif
451} 451}
452 452
453/*! 453/*!
454 Explicitly hide the current input method. 454 Explicitly hide the current input method.
455 455
456 The current input method is still indicated in the taskbar, but no 456 The current input method is still indicated in the taskbar, but no
457 longer takes up screen space, and can no longer be interacted with. 457 longer takes up screen space, and can no longer be interacted with.
458 458
459 \sa showInputMethod() 459 \sa showInputMethod()
460*/ 460*/
461void Global::hideInputMethod() 461void Global::hideInputMethod()
462{ 462{
463#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 463#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
464 QCopChannel::send( "QPE/TaskBar", "hideInputMethod()" ); 464 QCopChannel::send( "QPE/TaskBar", "hideInputMethod()" );
465#endif 465#endif
466} 466}
467 467
468 468
469/*! 469/*!
470 \internal 470 \internal
471*/ 471*/
472bool Global::isBuiltinCommand( const QString &name ) 472bool Global::isBuiltinCommand( const QString &name )
473{ 473{
474 if(!builtin) 474 if(!builtin)
475 return FALSE; // yes, it can happen 475 return FALSE; // yes, it can happen
476 for (int i = 0; builtin[i].file; i++) { 476 for (int i = 0; builtin[i].file; i++) {
477 if ( builtin[i].file == name ) { 477 if ( builtin[i].file == name ) {
478 return TRUE; 478 return TRUE;
479 } 479 }
480 } 480 }
481 return FALSE; 481 return FALSE;
482} 482}
483 483
484Global::Command* Global::builtin=0; 484Global::Command* Global::builtin=0;
485QGuardedPtr<QWidget> *Global::running=0; 485QGuardedPtr<QWidget> *Global::running=0;
486 486
487/*! 487/*!
488 \class Global::Command 488 \class Global::Command
489 \brief The Global::Command class is internal. 489 \brief The Global::Command class is internal.
490 \internal 490 \internal
491*/ 491*/
492 492
493/*! 493/*!
494 \internal 494 \internal
495*/ 495*/
496void Global::setBuiltinCommands( Command* list ) 496void Global::setBuiltinCommands( Command* list )
497{ 497{
498 if ( running ) 498 if ( running )
499 delete [] running; 499 delete [] running;
500 500
501 builtin = list; 501 builtin = list;
502 int count = 0; 502 int count = 0;
503 if (!builtin) 503 if (!builtin)
504 return; 504 return;
505 while ( builtin[count].file ) 505 while ( builtin[count].file )
506 count++; 506 count++;
507 507
508 running = new QGuardedPtr<QWidget> [ count ]; 508 running = new QGuardedPtr<QWidget> [ count ];
509} 509}
510 510
511/*! 511/*!
512 \internal 512 \internal
513*/ 513*/
514void Global::setDocument( QWidget* receiver, const QString& document ) 514void Global::setDocument( QWidget* receiver, const QString& document )
515{ 515{
516 Emitter emitter(receiver,document); 516 Emitter emitter(receiver,document);
517} 517}
518 518
519/*! 519/*!
520 \internal 520 \internal
521*/ 521*/
522bool Global::terminateBuiltin( const QString& n ) 522bool Global::terminateBuiltin( const QString& n )
523{ 523{
524 if (!builtin) 524 if (!builtin)
525 return FALSE; 525 return FALSE;
526 for (int i = 0; builtin[i].file; i++) { 526 for (int i = 0; builtin[i].file; i++) {
527 if ( builtin[i].file == n ) { 527 if ( builtin[i].file == n ) {
528 delete running[i]; 528 delete running[i];
529 return TRUE; 529 return TRUE;
530 } 530 }
531 } 531 }
532 return FALSE; 532 return FALSE;
533} 533}
534 534
535/*! 535/*!
536 \internal 536 \internal
537*/ 537*/
538void Global::terminate( const AppLnk* app ) 538void Global::terminate( const AppLnk* app )
539{ 539{
540 //if ( terminateBuiltin(app->exec()) ) return; // maybe? haven't tried this 540 //if ( terminateBuiltin(app->exec()) ) return; // maybe? haven't tried this
541 541
542#ifndef QT_NO_COP 542#ifndef QT_NO_COP
543 QCString channel = "QPE/Application/" + app->exec().utf8(); 543 QCString channel = "QPE/Application/" + app->exec().utf8();
544 if ( QCopChannel::isRegistered(channel) ) { 544 if ( QCopChannel::isRegistered(channel) ) {
545 QCopEnvelope e(channel, "quit()"); 545 QCopEnvelope e(channel, "quit()");
546 } 546 }
547#endif 547#endif
548} 548}
549 549
550/*! 550/*!
551 Low-level function to run command \a c. 551 Low-level function to run command \a c.
552 552
553 \warning Do not use this function. Use execute instead. 553 \warning Do not use this function. Use execute instead.
554 554
555 \sa execute() 555 \sa execute()
556*/ 556*/
557void Global::invoke(const QString &c) 557void Global::invoke(const QString &c)
558{ 558{
559 // Convert the command line in to a list of arguments 559 // Convert the command line in to a list of arguments
560 QStringList list = QStringList::split(QRegExp(" *"),c); 560 QStringList list = QStringList::split(QRegExp(" *"),c);
561 561
562#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 562#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
563 QString ap=list[0]; 563 QString ap=list[0];
564 // see if the application is already running 564 // see if the application is already running
565 // XXX should lock file /tmp/qcop-msg-ap 565 // XXX should lock file /tmp/qcop-msg-ap
566 if ( QCopChannel::isRegistered( ("QPE/Application/" + ap).latin1() ) ) { 566 if ( QCopChannel::isRegistered( ("QPE/Application/" + ap).latin1() ) ) {
567 // If the channel is already register, the app is already running, so show it. 567 // If the channel is already register, the app is already running, so show it.
568 { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } 568 { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); }
569 569
570 QCopEnvelope e("QPE/System", "notBusy(QString)" ); 570 QCopEnvelope e("QPE/System", "notBusy(QString)" );
571 e << ap; 571 e << ap;
572 return; 572 return;
573 } 573 }
574 // XXX should unlock file /tmp/qcop-msg-ap 574 // XXX should unlock file /tmp/qcop-msg-ap
575 //see if it is being started 575 //see if it is being started
576 if ( StartingAppList::isStarting( ap ) ) { 576 if ( StartingAppList::isStarting( ap ) ) {
577 QCopEnvelope e("QPE/System", "notBusy(QString)" ); 577 QCopEnvelope e("QPE/System", "notBusy(QString)" );
578 e << ap; 578 e << ap;
579 return; 579 return;
580 } 580 }
581 581
582#endif 582#endif
583 583
584#ifdef QT_NO_QWS_MULTIPROCESS 584#ifdef QT_NO_QWS_MULTIPROCESS
585 QMessageBox::warning( 0, "Error", "Could not find the application " + c, "Ok", 0, 0, 0, 1 ); 585 QMessageBox::warning( 0, "Error", "Could not find the application " + c, "Ok", 0, 0, 0, 1 );
586#else 586#else
587 587
588 QStrList slist; 588 QStrList slist;
589 unsigned int j; 589 unsigned int j;
590 for ( j = 0; j < list.count(); j++ ) 590 for ( j = 0; j < list.count(); j++ )
591 slist.append( list[j].utf8() ); 591 slist.append( list[j].utf8() );
592 592
593 const char **args = new (const char *)[slist.count() + 1]; 593 const char **args = new (const char *)[slist.count() + 1];
594 for ( j = 0; j < slist.count(); j++ ) 594 for ( j = 0; j < slist.count(); j++ )
595 args[j] = slist.at(j); 595 args[j] = slist.at(j);
596 args[j] = NULL; 596 args[j] = NULL;
597 597
598#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 598#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
599 // an attempt to show a wait... 599 // an attempt to show a wait...
600 // more logic should be used, but this will be fine for the moment... 600 // more logic should be used, but this will be fine for the moment...
601 QCopEnvelope ( "QPE/System", "busy()" ); 601 QCopEnvelope ( "QPE/System", "busy()" );
602#endif 602#endif
603 603
604#ifdef HAVE_QUICKEXEC 604#ifdef HAVE_QUICKEXEC
605 QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".so"; 605 QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".so";
606 qDebug("libfile = %s", libexe.latin1() ); 606 qDebug("libfile = %s", libexe.latin1() );
607 if ( QFile::exists( libexe ) ) { 607 if ( QFile::exists( libexe ) ) {
608 qDebug("calling quickexec %s", libexe.latin1() ); 608 qDebug("calling quickexec %s", libexe.latin1() );
609 quickexecv( libexe.utf8().data(), (const char **)args ); 609 quickexecv( libexe.utf8().data(), (const char **)args );
610 } else 610 } else
611#endif 611#endif
612 { 612 {
613 if ( !::vfork() ) { 613 if ( !::vfork() ) {
614 for ( int fd = 3; fd < 100; fd++ ) 614 for ( int fd = 3; fd < 100; fd++ )
615 ::close( fd ); 615 ::close( fd );
616 ::setpgid( ::getpid(), ::getppid() ); 616 ::setpgid( ::getpid(), ::getppid() );
617 // Try bindir first, so that foo/bar works too 617 // Try bindir first, so that foo/bar works too
618 ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args ); 618 ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args );
619 ::execvp( args[0], (char * const *)args ); 619 ::execvp( args[0], (char * const *)args );
620 _exit( -1 ); 620 _exit( -1 );
621 } 621 }
622 } 622 }
623 StartingAppList::add( list[0] ); 623 StartingAppList::add( list[0] );
624#endif //QT_NO_QWS_MULTIPROCESS 624#endif //QT_NO_QWS_MULTIPROCESS
625} 625}
626 626
627 627
628/*! 628/*!
629 Executes the application identfied by \a c, passing \a 629 Executes the application identfied by \a c, passing \a
630 document if it isn't null. 630 document if it isn't null.
631 631
632 Note that a better approach might be to send a QCop message to the 632 Note that a better approach might be to send a QCop message to the
633 application's QPE/Application/\e{appname} channel. 633 application's QPE/Application/\e{appname} channel.
634*/ 634*/
635void Global::execute( const QString &c, const QString& document ) 635void Global::execute( const QString &c, const QString& document )
636{ 636{
637 if ( qApp->type() != QApplication::GuiServer ) { 637 if ( qApp->type() != QApplication::GuiServer ) {
638 // ask the server to do the work 638 // ask the server to do the work
639#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 639#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
640 if ( document.isNull() ) { 640 if ( document.isNull() ) {
641 QCopEnvelope e( "QPE/System", "execute(QString)" ); 641 QCopEnvelope e( "QPE/System", "execute(QString)" );
642 e << c; 642 e << c;
643 } else { 643 } else {
644 QCopEnvelope e( "QPE/System", "execute(QString,QString)" ); 644 QCopEnvelope e( "QPE/System", "execute(QString,QString)" );
645 e << c << document; 645 e << c << document;
646 } 646 }
647#endif 647#endif
648 return; 648 return;
649 } 649 }
650 650
651 // Attempt to execute the app using a builtin class for the app first 651 // Attempt to execute the app using a builtin class for the app first
652 // else try and find it in the bin directory 652 // else try and find it in the bin directory
653 if (builtin) { 653 if (builtin) {
654 for (int i = 0; builtin[i].file; i++) { 654 for (int i = 0; builtin[i].file; i++) {
655 if ( builtin[i].file == c ) { 655 if ( builtin[i].file == c ) {
656 if ( running[i] ) { 656 if ( running[i] ) {
657 if ( !document.isNull() && builtin[i].documentary ) 657 if ( !document.isNull() && builtin[i].documentary )
658 setDocument(running[i], document); 658 setDocument(running[i], document);
659 running[i]->raise(); 659 running[i]->raise();
660 running[i]->show(); 660 running[i]->show();
661 running[i]->setActiveWindow(); 661 running[i]->setActiveWindow();
662 } else { 662 } else {
663 running[i] = builtin[i].func( builtin[i].maximized ); 663 running[i] = builtin[i].func( builtin[i].maximized );
664 } 664 }
665#ifndef QT_NO_COP 665#ifndef QT_NO_COP
666 QCopEnvelope e("QPE/System", "notBusy(QString)" ); 666 QCopEnvelope e("QPE/System", "notBusy(QString)" );
667 e << c; // that was quick ;-) 667 e << c; // that was quick ;-)
668#endif 668#endif
669 return; 669 return;
670 } 670 }
671 } 671 }
672 } 672 }
673 673
674 //Global::invoke(c, document); 674 //Global::invoke(c, document);
675 675
676 // Convert the command line in to a list of arguments 676 // Convert the command line in to a list of arguments
677 QStringList list = QStringList::split(QRegExp(" *"),c); 677 QStringList list = QStringList::split(QRegExp(" *"),c);
678 678
679#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 679#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
680 QString ap=list[0]; 680 QString ap=list[0];
681 681
682 qDebug("executing %s", ap.latin1() ); 682 qDebug("executing %s", ap.latin1() );
683 if ( ap == "suspend" ) {
684 QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
685 return;
686 }
687 683
688 /* if need be, sending a qcop message will result in an invoke, see 684 /* if need be, sending a qcop message will result in an invoke, see
689 preceeding function */ 685 preceeding function */
690 invoke( ap ); 686 invoke( ap );
691 //{ QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } 687 //{ QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); }
692 if ( !document.isEmpty() ) { 688 if ( !document.isEmpty() ) {
693 QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" ); 689 QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" );
694 env << document; 690 env << document;
695 } 691 }
696#endif 692#endif
697} 693}
698 694
699/*! 695/*!
700 Returns the string \a s with the characters '\', '"', and '$' quoted 696 Returns the string \a s with the characters '\', '"', and '$' quoted
701 by a preceeding '\'. 697 by a preceeding '\'.
702 698
703 \sa stringQuote() 699 \sa stringQuote()
704*/ 700*/
705QString Global::shellQuote(const QString& s) 701QString Global::shellQuote(const QString& s)
706{ 702{
707 QString r="\""; 703 QString r="\"";
708 for (int i=0; i<(int)s.length(); i++) { 704 for (int i=0; i<(int)s.length(); i++) {
709 char c = s[i].latin1(); 705 char c = s[i].latin1();
710 switch (c) { 706 switch (c) {
711 case '\\': case '"': case '$': 707 case '\\': case '"': case '$':
712 r+="\\"; 708 r+="\\";
713 } 709 }
714 r += s[i]; 710 r += s[i];
715 } 711 }
716 r += "\""; 712 r += "\"";
717 return r; 713 return r;
718} 714}
719 715
720/*! 716/*!
721 Returns the string \a s with the characters '\' and '"' quoted by a 717 Returns the string \a s with the characters '\' and '"' quoted by a
722 preceeding '\'. 718 preceeding '\'.
723 719
724 \sa shellQuote() 720 \sa shellQuote()
725*/ 721*/
726QString Global::stringQuote(const QString& s) 722QString Global::stringQuote(const QString& s)
727{ 723{
728 QString r="\""; 724 QString r="\"";
729 for (int i=0; i<(int)s.length(); i++) { 725 for (int i=0; i<(int)s.length(); i++) {
730 char c = s[i].latin1(); 726 char c = s[i].latin1();
731 switch (c) { 727 switch (c) {
732 case '\\': case '"': 728 case '\\': case '"':
733 r+="\\"; 729 r+="\\";
734 } 730 }
735 r += s[i]; 731 r += s[i];
736 } 732 }
737 r += "\""; 733 r += "\"";
738 return r; 734 return r;
739} 735}
740 736
741/*! 737/*!
742 Finds all documents on the system's document directories which 738 Finds all documents on the system's document directories which
743 match the filter \a mimefilter, and appends the resulting DocLnk 739 match the filter \a mimefilter, and appends the resulting DocLnk
744 objects to \a folder. 740 objects to \a folder.
745*/ 741*/
746void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter) 742void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter)
747{ 743{
748 QString homedocs = QString(getenv("HOME")) + "/Documents"; 744 QString homedocs = QString(getenv("HOME")) + "/Documents";
749 DocLnkSet d(homedocs,mimefilter); 745 DocLnkSet d(homedocs,mimefilter);
750 folder->appendFrom(d); 746 folder->appendFrom(d);
751 /** let's do intellegint way of searching these files 747 /** let's do intellegint way of searching these files
752 * a) the user don't want to check mediums global 748 * a) the user don't want to check mediums global
753 * b) the user wants to check but use the global options for it 749 * b) the user wants to check but use the global options for it
754 * c) the user wants to check it but not this medium 750 * c) the user wants to check it but not this medium
755 * d) the user wants to check and this medium as well 751 * d) the user wants to check and this medium as well
756 * 752 *
757 * In all cases we need to apply a different mimefilter to 753 * In all cases we need to apply a different mimefilter to
758 * the medium. 754 * the medium.
759 * a) mimefilter.isEmpty() we need to apply the responding filter 755 * a) mimefilter.isEmpty() we need to apply the responding filter
760 * either the global or the one on the medium 756 * either the global or the one on the medium
761 * 757 *
762 * b) mimefilter is set to an application we need to find out if the 758 * b) mimefilter is set to an application we need to find out if the
763 * mimetypes are included in the mime mask of the medium 759 * mimetypes are included in the mime mask of the medium
764 */ 760 */
765 StorageInfo storage; 761 StorageInfo storage;
766 const QList<FileSystem> &fs = storage.fileSystems(); 762 const QList<FileSystem> &fs = storage.fileSystems();
767 QListIterator<FileSystem> it ( fs ); 763 QListIterator<FileSystem> it ( fs );
768 for ( ; it.current(); ++it ) { 764 for ( ; it.current(); ++it ) {
769 if ( (*it)->isRemovable() ) { // let's find out if we should search on it 765 if ( (*it)->isRemovable() ) { // let's find out if we should search on it
770 // this is a candidate look at the cf and see if we should search on it 766 // this is a candidate look at the cf and see if we should search on it
771 QString path = (*it)->path(); 767 QString path = (*it)->path();
772 if( !checkStorage((*it)->path() + "/.opiestorage.cf" ) ) 768 if( !checkStorage((*it)->path() + "/.opiestorage.cf" ) )
773 continue; 769 continue;
774 DocLnkSet ide( path, mimefilter ); 770 DocLnkSet ide( path, mimefilter );
775 folder->appendFrom(ide); 771 folder->appendFrom(ide);
776 } else if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) { 772 } else if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) {
777 QString path = (*it)->path() + "/Documents"; 773 QString path = (*it)->path() + "/Documents";
778 DocLnkSet ide( path, mimefilter ); 774 DocLnkSet ide( path, mimefilter );
779 folder->appendFrom(ide); 775 folder->appendFrom(ide);
780 } 776 }
781 } 777 }
782} 778}
783 779
784QStringList Global::languageList() 780QStringList Global::languageList()
785{ 781{
786 QString lang = getenv("LANG"); 782 QString lang = getenv("LANG");
787 QStringList langs; 783 QStringList langs;
788 langs.append(lang); 784 langs.append(lang);
789 int i = lang.find("."); 785 int i = lang.find(".");
790 if ( i > 0 ) 786 if ( i > 0 )
791 lang = lang.left( i ); 787 lang = lang.left( i );
792 i = lang.find( "_" ); 788 i = lang.find( "_" );
793 if ( i > 0 ) 789 if ( i > 0 )
794 langs.append(lang.left(i)); 790 langs.append(lang.left(i));
795 return langs; 791 return langs;
796} 792}
797 793
798QStringList Global::helpPath() 794QStringList Global::helpPath()
799{ 795{
800 QStringList path; 796 QStringList path;
801 QStringList langs = Global::languageList(); 797 QStringList langs = Global::languageList();
802 for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) { 798 for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) {
803 QString lang = *it; 799 QString lang = *it;
804 if ( !lang.isEmpty() ) 800 if ( !lang.isEmpty() )
805 path += QPEApplication::qpeDir() + "/help/" + lang + "/html"; 801 path += QPEApplication::qpeDir() + "/help/" + lang + "/html";
806 } 802 }
807 path += QPEApplication::qpeDir() + "/pics"; 803 path += QPEApplication::qpeDir() + "/pics";
808 path += QPEApplication::qpeDir() + "/help/html"; 804 path += QPEApplication::qpeDir() + "/help/html";
809 path += QPEApplication::qpeDir() + "/docs"; 805 path += QPEApplication::qpeDir() + "/docs";
810 806
811 807
812 return path; 808 return path;
813} 809}
814 810
815 811
816#include "global.moc" 812#include "global.moc"