summaryrefslogtreecommitdiff
authorharlekin <harlekin>2002-06-11 21:51:34 (UTC)
committer harlekin <harlekin>2002-06-11 21:51:34 (UTC)
commit7ab79b2a607a0790d9ef040c76ae2687d9c5a3f8 (patch) (unidiff)
treecd2782f9be46e59cb49867bb9221e4e6d7b27d01
parent53cbd5404cea16ec1ddbd2e264fcc42acfb453c8 (diff)
downloadopie-7ab79b2a607a0790d9ef040c76ae2687d9c5a3f8.zip
opie-7ab79b2a607a0790d9ef040c76ae2687d9c5a3f8.tar.gz
opie-7ab79b2a607a0790d9ef040c76ae2687d9c5a3f8.tar.bz2
attempt to fix remove from autostart
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/launcher.cpp289
-rw-r--r--core/pim/today/changelog1
-rw-r--r--core/pim/today/today.cpp6
3 files changed, 148 insertions, 148 deletions
diff --git a/core/launcher/launcher.cpp b/core/launcher/launcher.cpp
index a0f04f1..59b38e3 100644
--- a/core/launcher/launcher.cpp
+++ b/core/launcher/launcher.cpp
@@ -489,164 +489,164 @@ Launcher::Launcher( QWidget* parent, const char* name, WFlags fl )
489 got_lnk_change = FALSE; 489 got_lnk_change = FALSE;
490} 490}
491 491
492Launcher::~Launcher() 492Launcher::~Launcher()
493{ 493{
494} 494}
495 495
496static bool isVisibleWindow(int wid) 496static bool isVisibleWindow(int wid)
497{ 497{
498 const QList<QWSWindow> &list = qwsServer->clientWindows(); 498 const QList<QWSWindow> &list = qwsServer->clientWindows();
499 QWSWindow* w; 499 QWSWindow* w;
500 for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) { 500 for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
501 if ( w->winId() == wid ) 501 if ( w->winId() == wid )
502 return !w->isFullyObscured(); 502 return !w->isFullyObscured();
503 } 503 }
504 return FALSE; 504 return FALSE;
505} 505}
506 506
507void Launcher::showMaximized() 507void Launcher::showMaximized()
508{ 508{
509 if ( isVisibleWindow( winId() ) ) 509 if ( isVisibleWindow( winId() ) )
510 doMaximize(); 510 doMaximize();
511 else 511 else
512 QTimer::singleShot( 20, this, SLOT(doMaximize()) ); 512 QTimer::singleShot( 20, this, SLOT(doMaximize()) );
513} 513}
514 514
515void Launcher::doMaximize() 515void Launcher::doMaximize()
516{ 516{
517 QMainWindow::showMaximized(); 517 QMainWindow::showMaximized();
518} 518}
519 519
520void Launcher::updateMimeTypes() 520void Launcher::updateMimeTypes()
521{ 521{
522 MimeType::clear(); 522 MimeType::clear();
523 updateMimeTypes(rootFolder); 523 updateMimeTypes(rootFolder);
524} 524}
525 525
526void Launcher::updateMimeTypes(AppLnkSet* folder) 526void Launcher::updateMimeTypes(AppLnkSet* folder)
527{ 527{
528 for ( QListIterator<AppLnk> it( folder->children() ); it.current(); ++it ) { 528 for ( QListIterator<AppLnk> it( folder->children() ); it.current(); ++it ) {
529 AppLnk *app = it.current(); 529 AppLnk *app = it.current();
530 if ( app->type() == "Folder" ) 530 if ( app->type() == "Folder" )
531 updateMimeTypes((AppLnkSet *)app); 531 updateMimeTypes((AppLnkSet *)app);
532 else { 532 else {
533 MimeType::registerApp(*app); 533 MimeType::registerApp(*app);
534 } 534 }
535 } 535 }
536} 536}
537/** This is a HACK.... 537/** This is a HACK....
538 * Reason: scanning huge mediums, microdirvers for examples 538 * Reason: scanning huge mediums, microdirvers for examples
539 * consomes time. To avoid that we invented the MediumMountCheck 539 * consomes time. To avoid that we invented the MediumMountCheck
540 * 540 *
541 * a) the user globally disabled medium checking. We can ignore 541 * a) the user globally disabled medium checking. We can ignore
542 * all removable medium 542 * all removable medium
543 * b) the user enabled medium checking globally and we need to use this mimefilter 543 * b) the user enabled medium checking globally and we need to use this mimefilter
544 * c) the user enabled medium checking on a per medium bases 544 * c) the user enabled medium checking on a per medium bases
545 * c1) we already checked and its not ask again turns 545 * c1) we already checked and its not ask again turns
546 * c2) we need to ask and then apply the mimefilter 546 * c2) we need to ask and then apply the mimefilter
547 */ 547 */
548void Launcher::loadDocs() // ok here comes a hack belonging to Global:: 548void Launcher::loadDocs() // ok here comes a hack belonging to Global::
549{ 549{
550 delete docsFolder; 550 delete docsFolder;
551 docsFolder = new DocLnkSet; 551 docsFolder = new DocLnkSet;
552 552
553 DocLnkSet *tmp = 0; 553 DocLnkSet *tmp = 0;
554 QString home = QString(getenv("HOME")) + "/Documents"; 554 QString home = QString(getenv("HOME")) + "/Documents";
555 tmp = new DocLnkSet( home , QString::null); 555 tmp = new DocLnkSet( home , QString::null);
556 docsFolder->appendFrom( *tmp ); 556 docsFolder->appendFrom( *tmp );
557 delete tmp; 557 delete tmp;
558 558
559 Config mediumCfg( "medium"); 559 Config mediumCfg( "medium");
560 mediumCfg.setGroup("main"); 560 mediumCfg.setGroup("main");
561 // a) -zecke we don't want to check 561 // a) -zecke we don't want to check
562 if(!mediumCfg.readBoolEntry("use", true ) ) 562 if(!mediumCfg.readBoolEntry("use", true ) )
563 return; 563 return;
564 564
565 // find out wich filesystems are new in this round 565 // find out wich filesystems are new in this round
566 // We will do this by having a timestamp inside each mountpoint 566 // We will do this by having a timestamp inside each mountpoint
567 // if the current timestamp doesn't match this is a new file system and 567 // if the current timestamp doesn't match this is a new file system and
568 // come up with our MediumMountGui :) let the hacking begin 568 // come up with our MediumMountGui :) let the hacking begin
569 int stamp = uidgen.generate(); 569 int stamp = uidgen.generate();
570 570
571 QString newStamp = QString::number( stamp ); // generates newtime Stamp 571 QString newStamp = QString::number( stamp ); // generates newtime Stamp
572 StorageInfo storage; 572 StorageInfo storage;
573 const QList<FileSystem> &fileSystems = storage.fileSystems(); 573 const QList<FileSystem> &fileSystems = storage.fileSystems();
574 QListIterator<FileSystem> it ( fileSystems ); 574 QListIterator<FileSystem> it ( fileSystems );
575 575
576 // b) 576 // b)
577 if( mediumCfg.readBoolEntry("global", true ) ){ 577 if( mediumCfg.readBoolEntry("global", true ) ){
578 QString mime = configToMime(&mediumCfg).join(";"); 578 QString mime = configToMime(&mediumCfg).join(";");
579 for( ; it.current(); ++it ){ 579 for( ; it.current(); ++it ){
580 if( (*it)->isRemovable() ){ 580 if( (*it)->isRemovable() ){
581 tmp = new DocLnkSet( (*it)->path(), mime ); 581 tmp = new DocLnkSet( (*it)->path(), mime );
582 docsFolder->appendFrom( *tmp ); 582 docsFolder->appendFrom( *tmp );
583 delete tmp; 583 delete tmp;
584 } 584 }
585 } // done 585 } // done
586 return; // save the else 586 return; // save the else
587 } 587 }
588 // c) zecke 588 // c) zecke
589 for ( ; it.current(); ++it ) { 589 for ( ; it.current(); ++it ) {
590 if ( (*it)->isRemovable() ) { // let's find out if we should search on it 590 if ( (*it)->isRemovable() ) { // let's find out if we should search on it
591 Config cfg( (*it)->path() + "/.opiestorage.cf", Config::File); 591 Config cfg( (*it)->path() + "/.opiestorage.cf", Config::File);
592 cfg.setGroup("main"); 592 cfg.setGroup("main");
593 QString stamp = cfg.readEntry("timestamp", QDateTime::currentDateTime().toString() ); 593 QString stamp = cfg.readEntry("timestamp", QDateTime::currentDateTime().toString() );
594 /** This medium is uptodate 594 /** This medium is uptodate
595 */ 595 */
596 if( stamp == m_timeStamp ){ // ok we know this card 596 if( stamp == m_timeStamp ){ // ok we know this card
597 cfg.writeEntry("timestamp", newStamp ); //just write a new timestamp 597 cfg.writeEntry("timestamp", newStamp ); //just write a new timestamp
598 // we need to scan the list now. Hopefully the cache will be there 598 // we need to scan the list now. Hopefully the cache will be there
599 // read the mimetypes from the config and search for documents 599 // read the mimetypes from the config and search for documents
600 QStringList mimetypes = configToMime( &cfg); 600 QStringList mimetypes = configToMime( &cfg);
601 tmp = new DocLnkSet( (*it)->path(), mimetypes.join(";") ); 601 tmp = new DocLnkSet( (*it)->path(), mimetypes.join(";") );
602 docsFolder->appendFrom( *tmp ); 602 docsFolder->appendFrom( *tmp );
603 delete tmp; 603 delete tmp;
604 604
605 }else{ // come up with the gui cause this a new card 605 }else{ // come up with the gui cause this a new card
606 MediumMountGui medium(&cfg, (*it)->path() ); 606 MediumMountGui medium(&cfg, (*it)->path() );
607 if( medium.check() ){ // we did not ask before or ask again is off 607 if( medium.check() ){ // we did not ask before or ask again is off
608 /** c2) */ 608 /** c2) */
609 if( medium.exec() ){ // he clicked yes so search it 609 if( medium.exec() ){ // he clicked yes so search it
610 // speicher 610 // speicher
611 //cfg.read(); // cause of a race we need to reread - fixed 611 //cfg.read(); // cause of a race we need to reread - fixed
612 cfg.setGroup("main"); 612 cfg.setGroup("main");
613 cfg.writeEntry("timestamp", newStamp ); 613 cfg.writeEntry("timestamp", newStamp );
614 cfg.write(); 614 cfg.write();
615 tmp = new DocLnkSet( (*it)->path(), medium.mimeTypes().join(";" ) ); 615 tmp = new DocLnkSet( (*it)->path(), medium.mimeTypes().join(";" ) );
616 docsFolder->appendFrom( *tmp ); 616 docsFolder->appendFrom( *tmp );
617 delete tmp; 617 delete tmp;
618 }// no else 618 }// no else
619 /** c1) */ 619 /** c1) */
620 }else{ // we checked 620 }else{ // we checked
621 // do something different see what we need to do 621 // do something different see what we need to do
622 // let's see if we should check the device 622 // let's see if we should check the device
623 cfg.setGroup("main" ); 623 cfg.setGroup("main" );
624 bool check = cfg.readBoolEntry("autocheck", true ); 624 bool check = cfg.readBoolEntry("autocheck", true );
625 if( check ){ // find the documents 625 if( check ){ // find the documents
626 tmp = new DocLnkSet( (*it)->path(), configToMime(&cfg ).join(";") ); 626 tmp = new DocLnkSet( (*it)->path(), configToMime(&cfg ).join(";") );
627 docsFolder->appendFrom( *tmp ); 627 docsFolder->appendFrom( *tmp );
628 delete tmp; 628 delete tmp;
629 } 629 }
630 } 630 }
631 } 631 }
632 } 632 }
633 } 633 }
634 m_timeStamp = newStamp; 634 m_timeStamp = newStamp;
635} 635}
636 636
637void Launcher::updateTabs() 637void Launcher::updateTabs()
638{ 638{
639 MimeType::updateApplications(); // ### reads all applnks twice 639 MimeType::updateApplications(); // ### reads all applnks twice
640 640
641 delete rootFolder; 641 delete rootFolder;
642 rootFolder = new AppLnkSet( MimeType::appsFolderName() ); 642 rootFolder = new AppLnkSet( MimeType::appsFolderName() );
643 643
644 loadDocs(); 644 loadDocs();
645 645
646 tabs->initializeCategories(rootFolder, docsFolder, storage->fileSystems()); 646 tabs->initializeCategories(rootFolder, docsFolder, storage->fileSystems());
647} 647}
648 648
649void Launcher::updateDocs() 649void Launcher::updateDocs()
650{ 650{
651 loadDocs(); 651 loadDocs();
652 tabs->updateDocs(docsFolder,storage->fileSystems()); 652 tabs->updateDocs(docsFolder,storage->fileSystems());
@@ -673,297 +673,296 @@ void Launcher::select( const AppLnk *appLnk )
673 tr("<p>No application is defined for this document." 673 tr("<p>No application is defined for this document."
674 "<p>Type is %1.").arg(appLnk->type())); 674 "<p>Type is %1.").arg(appLnk->type()));
675 return; 675 return;
676 } 676 }
677 tabs->setBusy(TRUE); 677 tabs->setBusy(TRUE);
678 emit executing( appLnk ); 678 emit executing( appLnk );
679 appLnk->execute(); 679 appLnk->execute();
680 } 680 }
681} 681}
682 682
683void Launcher::externalSelected(const AppLnk *appLnk) 683void Launcher::externalSelected(const AppLnk *appLnk)
684{ 684{
685 tabs->setBusy(TRUE); 685 tabs->setBusy(TRUE);
686 emit executing( appLnk ); 686 emit executing( appLnk );
687} 687}
688 688
689void Launcher::properties( AppLnk *appLnk ) 689void Launcher::properties( AppLnk *appLnk )
690{ 690{
691 if ( appLnk->type() == "Folder" ) { 691 if ( appLnk->type() == "Folder" ) {
692 // Not supported: flat is simpler for the user 692 // Not supported: flat is simpler for the user
693 } else { 693 } else {
694 in_lnk_props = TRUE; 694 in_lnk_props = TRUE;
695 got_lnk_change = FALSE; 695 got_lnk_change = FALSE;
696 LnkProperties prop(appLnk); 696 LnkProperties prop(appLnk);
697 connect(&prop, SIGNAL(select(const AppLnk *)), this, SLOT(externalSelected(const AppLnk *))); 697 connect(&prop, SIGNAL(select(const AppLnk *)), this, SLOT(externalSelected(const AppLnk *)));
698 prop.showMaximized(); 698 prop.showMaximized();
699 prop.exec(); 699 prop.exec();
700 in_lnk_props = FALSE; 700 in_lnk_props = FALSE;
701 if ( got_lnk_change ) { 701 if ( got_lnk_change ) {
702 updateLink(lnk_change); 702 updateLink(lnk_change);
703 } 703 }
704 } 704 }
705} 705}
706 706
707void Launcher::updateLink(const QString& link) 707void Launcher::updateLink(const QString& link)
708{ 708{
709 if (link.isNull()) 709 if (link.isNull())
710 updateTabs(); 710 updateTabs();
711 else if (link.isEmpty()) 711 else if (link.isEmpty())
712 updateDocs(); 712 updateDocs();
713 else 713 else
714 tabs->updateLink(link); 714 tabs->updateLink(link);
715} 715}
716 716
717void Launcher::systemMessage( const QCString &msg, const QByteArray &data) 717void Launcher::systemMessage( const QCString &msg, const QByteArray &data)
718{ 718{
719 QDataStream stream( data, IO_ReadOnly ); 719 QDataStream stream( data, IO_ReadOnly );
720 if ( msg == "closing(QString)" ){ 720 if ( msg == "closing(QString)" ){
721 QString app; 721 QString app;
722 stream >> app; 722 stream >> app;
723 qWarning("app closed %s", app.latin1() ); 723 qWarning("app closed %s", app.latin1() );
724 MRUList::removeTask( app ); 724 MRUList::removeTask( app );
725 }else if ( msg == "linkChanged(QString)" ) { 725 }else if ( msg == "linkChanged(QString)" ) {
726 QString link; 726 QString link;
727 stream >> link; 727 stream >> link;
728 if ( in_lnk_props ) { 728 if ( in_lnk_props ) {
729 got_lnk_change = TRUE; 729 got_lnk_change = TRUE;
730 lnk_change = link; 730 lnk_change = link;
731 } else { 731 } else {
732 updateLink(link); 732 updateLink(link);
733 } 733 }
734 } else if ( msg == "busy()" ) { 734 } else if ( msg == "busy()" ) {
735 emit busy(); 735 emit busy();
736 } else if ( msg == "notBusy(QString)" ) { 736 } else if ( msg == "notBusy(QString)" ) {
737 QString app; 737 QString app;
738 stream >> app; 738 stream >> app;
739 tabs->setBusy(FALSE); 739 tabs->setBusy(FALSE);
740 emit notBusy(app); 740 emit notBusy(app);
741 } else if ( msg == "mkdir(QString)" ) { 741 } else if ( msg == "mkdir(QString)" ) {
742 QString dir; 742 QString dir;
743 stream >> dir; 743 stream >> dir;
744 if ( !dir.isEmpty() ) 744 if ( !dir.isEmpty() )
745 mkdir( dir ); 745 mkdir( dir );
746 } else if ( msg == "rdiffGenSig(QString,QString)" ) { 746 } else if ( msg == "rdiffGenSig(QString,QString)" ) {
747 QString baseFile, sigFile; 747 QString baseFile, sigFile;
748 stream >> baseFile >> sigFile; 748 stream >> baseFile >> sigFile;
749 QRsync::generateSignature( baseFile, sigFile ); 749 QRsync::generateSignature( baseFile, sigFile );
750 } else if ( msg == "rdiffGenDiff(QString,QString,QString)" ) { 750 } else if ( msg == "rdiffGenDiff(QString,QString,QString)" ) {
751 QString baseFile, sigFile, deltaFile; 751 QString baseFile, sigFile, deltaFile;
752 stream >> baseFile >> sigFile >> deltaFile; 752 stream >> baseFile >> sigFile >> deltaFile;
753 QRsync::generateDiff( baseFile, sigFile, deltaFile ); 753 QRsync::generateDiff( baseFile, sigFile, deltaFile );
754 } else if ( msg == "rdiffApplyPatch(QString,QString)" ) { 754 } else if ( msg == "rdiffApplyPatch(QString,QString)" ) {
755 QString baseFile, deltaFile; 755 QString baseFile, deltaFile;
756 stream >> baseFile >> deltaFile; 756 stream >> baseFile >> deltaFile;
757 if ( !QFile::exists( baseFile ) ) { 757 if ( !QFile::exists( baseFile ) ) {
758 QFile f( baseFile ); 758 QFile f( baseFile );
759 f.open( IO_WriteOnly ); 759 f.open( IO_WriteOnly );
760 f.close(); 760 f.close();
761 } 761 }
762 QRsync::applyDiff( baseFile, deltaFile ); 762 QRsync::applyDiff( baseFile, deltaFile );
763 QCopEnvelope e( "QPE/Desktop", "patchApplied(QString)" ); 763 QCopEnvelope e( "QPE/Desktop", "patchApplied(QString)" );
764 e << baseFile; 764 e << baseFile;
765 } else if ( msg == "rdiffCleanup()" ) { 765 } else if ( msg == "rdiffCleanup()" ) {
766 mkdir( "/tmp/rdiff" ); 766 mkdir( "/tmp/rdiff" );
767 QDir dir; 767 QDir dir;
768 dir.setPath( "/tmp/rdiff" ); 768 dir.setPath( "/tmp/rdiff" );
769 QStringList entries = dir.entryList(); 769 QStringList entries = dir.entryList();
770 for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it ) 770 for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it )
771 dir.remove( *it ); 771 dir.remove( *it );
772 } else if ( msg == "sendHandshakeInfo()" ) { 772 } else if ( msg == "sendHandshakeInfo()" ) {
773 QString home = getenv( "HOME" ); 773 QString home = getenv( "HOME" );
774 QCopEnvelope e( "QPE/Desktop", "handshakeInfo(QString,bool)" ); 774 QCopEnvelope e( "QPE/Desktop", "handshakeInfo(QString,bool)" );
775 e << home; 775 e << home;
776 int locked = (int) Desktop::screenLocked(); 776 int locked = (int) Desktop::screenLocked();
777 e << locked; 777 e << locked;
778 // register an app for autostart 778 // register an app for autostart
779 // if clear is send the list is cleared. 779 // if clear is send the list is cleared.
780 } else if ( msg == "autoStart(QString)" ) { 780 } else if ( msg == "autoStart(QString)" ) {
781 QString appName; 781 QString appName;
782 stream >> appName; 782 stream >> appName;
783 Config cfg( "autostart" ); 783 Config cfg( "autostart" );
784 cfg.setGroup( "AutoStart" ); 784 cfg.setGroup( "AutoStart" );
785 if ( appName.compare("clear") == 0){ 785 if ( appName.compare("clear") == 0){
786 cfg.writeEntry("Apps", ""); 786 cfg.writeEntry("Apps", "");
787 } 787 }
788 } else if ( msg == "autoStart(QString,QString)" ) { 788 } else if ( msg == "autoStart(QString,QString)" ) {
789 QString modifier, appName; 789 QString modifier, appName;
790 stream >> modifier >> appName; 790 stream >> modifier >> appName;
791 Config cfg( "autostart" ); 791 Config cfg( "autostart" );
792 cfg.setGroup( "AutoStart" ); 792 cfg.setGroup( "AutoStart" );
793 if ( modifier.compare("add") == 0 ){ 793 if ( modifier.compare("add") == 0 ){
794 // only add if appname is entered 794 // only add if appname is entered
795 if (!appName.isEmpty()) { 795 if (!appName.isEmpty()) {
796 cfg.writeEntry("Apps", appName); 796 cfg.writeEntry("Apps", appName);
797 } 797 }
798 } else if (modifier.compare("remove") == 0 ) { 798 } else if (modifier.compare("remove") == 0 ) {
799 // need to change for multiple entries 799 // need to change for multiple entries
800 // actually remove is right now simular to clear, but in future there 800 // actually remove is right now simular to clear, but in future there
801 // should be multiple apps in autostart possible. 801 // should be multiple apps in autostart possible.
802 QString checkName; 802 QString checkName;
803 checkName = cfg.readEntry("Apps", ""); 803 checkName = cfg.readEntry("Apps", "");
804 if (checkName == appName) { 804 if (checkName == appName) {
805 cfg.writeEntry("Apps", ""); 805 cfg.writeEntry("Apps", "");
806 } 806 }
807 } 807 }
808 // case the autostart feature should be delayed 808 // case the autostart feature should be delayed
809 } else if ( msg == "autoStart(QString, QString, QString)") { 809 } else if ( msg == "autoStart(QString, QString, QString)") {
810 QString modifier, appName, delay; 810 QString modifier, appName, delay;
811 stream >> modifier >> appName >> delay; 811 stream >> modifier >> appName >> delay;
812 Config cfg( "autostart" ); 812 Config cfg( "autostart" );
813 cfg.setGroup( "AutoStart" ); 813 cfg.setGroup( "AutoStart" );
814 if ( modifier.compare("add") == 0 ){ 814 if ( modifier.compare("add") == 0 ){
815 // only add it appname is entered 815 // only add it appname is entered
816 if (!appName.isEmpty()) { 816 if (!appName.isEmpty()) {
817 cfg.writeEntry("Apps", appName); 817 cfg.writeEntry("Apps", appName);
818 cfg.writeEntry("Delay", delay); 818 cfg.writeEntry("Delay", delay);
819 } 819 }
820 } else { 820 } else {
821 } 821 }
822 } else if ( msg == "sendCardInfo()" ) { 822 } else if ( msg == "sendCardInfo()" ) {
823 QCopEnvelope e( "QPE/Desktop", "cardInfo(QString)" ); 823 QCopEnvelope e( "QPE/Desktop", "cardInfo(QString)" );
824 const QList<FileSystem> &fs = storage->fileSystems(); 824 const QList<FileSystem> &fs = storage->fileSystems();
825 QListIterator<FileSystem> it ( fs ); 825 QListIterator<FileSystem> it ( fs );
826 QString s; 826 QString s;
827 QString homeDir = getenv("HOME"); 827 QString homeDir = getenv("HOME");
828 QString hardDiskHome; 828 QString hardDiskHome;
829 for ( ; it.current(); ++it ) { 829 for ( ; it.current(); ++it ) {
830 if ( (*it)->isRemovable() ) 830 if ( (*it)->isRemovable() )
831 s += (*it)->name() + "=" + (*it)->path() + "/Documents " 831 s += (*it)->name() + "=" + (*it)->path() + "/Documents "
832 + QString::number( (*it)->availBlocks() * (*it)->blockSize() ) 832 + QString::number( (*it)->availBlocks() * (*it)->blockSize() )
833 + " " + (*it)->options() + ";"; 833 + " " + (*it)->options() + ";";
834 else if ( (*it)->disk() == "/dev/mtdblock1" || 834 else if ( (*it)->disk() == "/dev/mtdblock1" ||
835 (*it)->disk() == "/dev/mtdblock/1" ) 835 (*it)->disk() == "/dev/mtdblock/1" )
836 s += (*it)->name() + "=" + homeDir + "/Documents " 836 s += (*it)->name() + "=" + homeDir + "/Documents "
837 + QString::number( (*it)->availBlocks() * (*it)->blockSize() ) 837 + QString::number( (*it)->availBlocks() * (*it)->blockSize() )
838 + " " + (*it)->options() + ";"; 838 + " " + (*it)->options() + ";";
839 else if ( (*it)->name().contains( "Hard Disk") && 839 else if ( (*it)->name().contains( "Hard Disk") &&
840 homeDir.contains( (*it)->path() ) && 840 homeDir.contains( (*it)->path() ) &&
841 (*it)->path().length() > hardDiskHome.length() ) 841 (*it)->path().length() > hardDiskHome.length() )
842 hardDiskHome = 842 hardDiskHome =
843 (*it)->name() + "=" + homeDir + "/Documents " 843 (*it)->name() + "=" + homeDir + "/Documents "
844 + QString::number( (*it)->availBlocks() * (*it)->blockSize() ) 844 + QString::number( (*it)->availBlocks() * (*it)->blockSize() )
845 + " " + (*it)->options() + ";"; 845 + " " + (*it)->options() + ";";
846 } 846 }
847 if ( !hardDiskHome.isEmpty() ) 847 if ( !hardDiskHome.isEmpty() )
848 s += hardDiskHome; 848 s += hardDiskHome;
849 849
850 e << s; 850 e << s;
851 } else if ( msg == "sendSyncDate(QString)" ) { 851 } else if ( msg == "sendSyncDate(QString)" ) {
852 QString app; 852 QString app;
853 stream >> app; 853 stream >> app;
854 Config cfg( "qpe" ); 854 Config cfg( "qpe" );
855 cfg.setGroup("SyncDate"); 855 cfg.setGroup("SyncDate");
856 QCopEnvelope e( "QPE/Desktop", "syncDate(QString,QString)" ); 856 QCopEnvelope e( "QPE/Desktop", "syncDate(QString,QString)" );
857 e << app << cfg.readEntry( app ); 857 e << app << cfg.readEntry( app );
858 //qDebug("QPE/System sendSyncDate for %s: response %s", app.latin1(), 858 //qDebug("QPE/System sendSyncDate for %s: response %s", app.latin1(),
859 //cfg.readEntry( app ).latin1() ); 859 //cfg.readEntry( app ).latin1() );
860 } else if ( msg == "setSyncDate(QString,QString)" ) { 860 } else if ( msg == "setSyncDate(QString,QString)" ) {
861 QString app, date; 861 QString app, date;
862 stream >> app >> date; 862 stream >> app >> date;
863 Config cfg( "qpe" ); 863 Config cfg( "qpe" );
864 cfg.setGroup("SyncDate"); 864 cfg.setGroup("SyncDate");
865 cfg.writeEntry( app, date ); 865 cfg.writeEntry( app, date );
866 //qDebug("setSyncDate(QString,QString) %s %s", app.latin1(), date.latin1()); 866 //qDebug("setSyncDate(QString,QString) %s %s", app.latin1(), date.latin1());
867 } else if ( msg == "startSync(QString)" ) { 867 } else if ( msg == "startSync(QString)" ) {
868 QString what; 868 QString what;
869 stream >> what; 869 stream >> what;
870 delete syncDialog; syncDialog = 0; 870 delete syncDialog; syncDialog = 0;
871 syncDialog = new SyncDialog( this, "syncProgress", FALSE, 871 syncDialog = new SyncDialog( this, "syncProgress", FALSE,
872 WStyle_Tool | WStyle_Customize | 872 WStyle_Tool | WStyle_Customize |
873 Qt::WStyle_StaysOnTop ); 873 Qt::WStyle_StaysOnTop );
874 syncDialog->showMaximized(); 874 syncDialog->showMaximized();
875 syncDialog->whatLabel->setText( "<b>" + what + "</b>" ); 875 syncDialog->whatLabel->setText( "<b>" + what + "</b>" );
876 connect( syncDialog->buttonCancel, SIGNAL( clicked() ), 876 connect( syncDialog->buttonCancel, SIGNAL( clicked() ),
877 SLOT( cancelSync() ) ); 877 SLOT( cancelSync() ) );
878 } 878 } else if ( msg == "stopSync()") {
879 else if ( msg == "stopSync()") { 879 delete syncDialog; syncDialog = 0;
880 delete syncDialog; syncDialog = 0;
881 } else if ( msg == "getAllDocLinks()" ) { 880 } else if ( msg == "getAllDocLinks()" ) {
882 loadDocs(); 881 loadDocs();
883 882
884 QString contents; 883 QString contents;
885 884
886 for ( QListIterator<DocLnk> it( docsFolder->children() ); it.current(); ++it ) { 885 for ( QListIterator<DocLnk> it( docsFolder->children() ); it.current(); ++it ) {
887 DocLnk *doc = it.current(); 886 DocLnk *doc = it.current();
888 QFileInfo fi( doc->file() ); 887 QFileInfo fi( doc->file() );
889 if ( !fi.exists() ) 888 if ( !fi.exists() )
890 continue; 889 continue;
891 890
892 bool fake = !doc->linkFileKnown(); 891 bool fake = !doc->linkFileKnown();
893 if ( !fake ) { 892 if ( !fake ) {
894 QFile f( doc->linkFile() ); 893 QFile f( doc->linkFile() );
895 if ( f.open( IO_ReadOnly ) ) { 894 if ( f.open( IO_ReadOnly ) ) {
896 QTextStream ts( &f ); 895 QTextStream ts( &f );
897 ts.setEncoding( QTextStream::UnicodeUTF8 ); 896 ts.setEncoding( QTextStream::UnicodeUTF8 );
898 contents += ts.read(); 897 contents += ts.read();
899 f.close(); 898 f.close();
900 } else 899 } else
901 fake = TRUE; 900 fake = TRUE;
902 } 901 }
903 if (fake) { 902 if (fake) {
904 contents += "[Desktop Entry]\n"; 903 contents += "[Desktop Entry]\n";
905 contents += "Categories = " + Qtopia::Record::idsToString( doc->categories() ) + "\n"; 904 contents += "Categories = " + Qtopia::Record::idsToString( doc->categories() ) + "\n";
906 contents += "File = "+doc->file()+"\n"; 905 contents += "File = "+doc->file()+"\n";
907 contents += "Name = "+doc->name()+"\n"; 906 contents += "Name = "+doc->name()+"\n";
908 contents += "Type = "+doc->type()+"\n"; 907 contents += "Type = "+doc->type()+"\n";
909 } 908 }
910 contents += QString("Size = %1\n").arg( fi.size() ); 909 contents += QString("Size = %1\n").arg( fi.size() );
911 } 910 }
912 911
913 //qDebug( "sending length %d", contents.length() ); 912 //qDebug( "sending length %d", contents.length() );
914 QCopEnvelope e( "QPE/Desktop", "docLinks(QString)" ); 913 QCopEnvelope e( "QPE/Desktop", "docLinks(QString)" );
915 e << contents; 914 e << contents;
916 915
917 qDebug( "================ \n\n%s\n\n===============", 916 qDebug( "================ \n\n%s\n\n===============",
918 contents.latin1() ); 917 contents.latin1() );
919 918
920 delete docsFolder; 919 delete docsFolder;
921 docsFolder = 0; 920 docsFolder = 0;
922 } 921 }
923} 922}
924 923
925void Launcher::cancelSync() 924void Launcher::cancelSync()
926{ 925{
927 QCopEnvelope e( "QPE/Desktop", "cancelSync()" ); 926 QCopEnvelope e( "QPE/Desktop", "cancelSync()" );
928} 927}
929 928
930void Launcher::storageChanged() 929void Launcher::storageChanged()
931{ 930{
932 if ( in_lnk_props ) { 931 if ( in_lnk_props ) {
933 got_lnk_change = TRUE; 932 got_lnk_change = TRUE;
934 lnk_change = ""; 933 lnk_change = "";
935 } else { 934 } else {
936 updateDocs(); 935 updateDocs();
937 } 936 }
938} 937}
939 938
940 939
941bool Launcher::mkdir(const QString &localPath) 940bool Launcher::mkdir(const QString &localPath)
942{ 941{
943 QDir fullDir(localPath); 942 QDir fullDir(localPath);
944 if (fullDir.exists()) 943 if (fullDir.exists())
945 return true; 944 return true;
946 945
947 // at this point the directory doesn't exist 946 // at this point the directory doesn't exist
948 // go through the directory tree and start creating the direcotories 947 // go through the directory tree and start creating the direcotories
949 // that don't exist; if we can't create the directories, return false 948 // that don't exist; if we can't create the directories, return false
950 949
951 QString dirSeps = "/"; 950 QString dirSeps = "/";
952 int dirIndex = localPath.find(dirSeps); 951 int dirIndex = localPath.find(dirSeps);
953 QString checkedPath; 952 QString checkedPath;
954 953
955 // didn't find any seps; weird, use the cur dir instead 954 // didn't find any seps; weird, use the cur dir instead
956 if (dirIndex == -1) { 955 if (dirIndex == -1) {
957 //qDebug("No seperators found in path %s", localPath.latin1()); 956 //qDebug("No seperators found in path %s", localPath.latin1());
958 checkedPath = QDir::currentDirPath(); 957 checkedPath = QDir::currentDirPath();
959 } 958 }
960 959
961 while (checkedPath != localPath) { 960 while (checkedPath != localPath) {
962 // no more seperators found, use the local path 961 // no more seperators found, use the local path
963 if (dirIndex == -1) 962 if (dirIndex == -1)
964 checkedPath = localPath; 963 checkedPath = localPath;
965 else { 964 else {
966 // the next directory to check 965 // the next directory to check
967 checkedPath = localPath.left(dirIndex) + "/"; 966 checkedPath = localPath.left(dirIndex) + "/";
968 // advance the iterator; the next dir seperator 967 // advance the iterator; the next dir seperator
969 dirIndex = localPath.find(dirSeps, dirIndex+1); 968 dirIndex = localPath.find(dirSeps, dirIndex+1);
diff --git a/core/pim/today/changelog b/core/pim/today/changelog
index 93bbcac..73de50d 100644
--- a/core/pim/today/changelog
+++ b/core/pim/today/changelog
@@ -1,50 +1,51 @@
10.3.4 10.3.4
2 2
3* "fill our business card now a clickable label"
3* Several bugfixes regarding todo section. 4* Several bugfixes regarding todo section.
4 5
50.3.3 60.3.3
6 7
7* Changed the logo so it better scales to bigger display and also 8* Changed the logo so it better scales to bigger display and also
8 made the "Today" string translatable. 9 made the "Today" string translatable.
9* some am/pm fixes 10* some am/pm fixes
10* clickable labels now in libopie 11* clickable labels now in libopie
11 12
120.3.2 130.3.2
13 14
14* Autostart is now more configurable. You can decide how long 15* Autostart is now more configurable. You can decide how long
15 the ipaq has to has been suspended, before autostart is triggered.(Opie 16 the ipaq has to has been suspended, before autostart is triggered.(Opie
16 only) 17 only)
17* am/pm time optinal (autodetect) 18* am/pm time optinal (autodetect)
18 19
190.3.1 200.3.1
20 21
21* fixed the wrong color of the buttons 22* fixed the wrong color of the buttons
22* better translation (thanks carsten and others) 23* better translation (thanks carsten and others)
23* fixes memory leaks 24* fixes memory leaks
24* bugfixes in calendar part, now location and note are working again. 25* bugfixes in calendar part, now location and note are working again.
25 26
260.3.0 270.3.0
27 28
28* today uses now tododb from libopie. So major changes in the todo part: 29* today uses now tododb from libopie. So major changes in the todo part:
29 - overdue items on top 30 - overdue items on top
30 - then sorted by date, then by priority 31 - then sorted by date, then by priority
31* some cleanups 32* some cleanups
32* speed optimisations 33* speed optimisations
33 34
340.2.9 350.2.9
35 36
36* Many bugfixes. 37* Many bugfixes.
37* Today now apparently sorts the dates _allways_ right, i would assume it 38* Today now apparently sorts the dates _allways_ right, i would assume it
38to be a qt bug 39to be a qt bug
39 40
400.2.8 410.2.8
41 42
42* Appointments are now clickable (connection to datebook still missing) 43* Appointments are now clickable (connection to datebook still missing)
43* autostart support (opie only) 44* autostart support (opie only)
44 45
450.2.7 460.2.7
46 47
47* check if todolist.xml was changed before parsing it 48* check if todolist.xml was changed before parsing it
48* check only every 30 sec for changes. 49* check only every 30 sec for changes.
49* some visual stuff 50* some visual stuff
50* as usual many little improvements .-) 51* as usual many little improvements .-)
diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp
index 06cfa01..9e9d31f 100644
--- a/core/pim/today/today.cpp
+++ b/core/pim/today/today.cpp
@@ -90,103 +90,103 @@ Today::Today( QWidget* parent, const char* name, WFlags fl )
90} 90}
91 91
92/* 92/*
93 * Qcop receive method. 93 * Qcop receive method.
94 */ 94 */
95void Today::channelReceived(const QCString &msg, const QByteArray & data) { 95void Today::channelReceived(const QCString &msg, const QByteArray & data) {
96 QDataStream stream(data, IO_ReadOnly ); 96 QDataStream stream(data, IO_ReadOnly );
97 if ( msg == "message(QString)" ) { 97 if ( msg == "message(QString)" ) {
98 QString message; 98 QString message;
99 stream >> message; 99 stream >> message;
100 setOwnerField(message); 100 setOwnerField(message);
101 } 101 }
102 102
103} 103}
104 104
105/* 105/*
106 * Initialises the owner field with the default value, the username 106 * Initialises the owner field with the default value, the username
107 */ 107 */
108void Today::setOwnerField() { 108void Today::setOwnerField() {
109 QString file = Global::applicationFileName("addressbook", "businesscard.vcf"); 109 QString file = Global::applicationFileName("addressbook", "businesscard.vcf");
110 if (QFile::exists(file)) { 110 if (QFile::exists(file)) {
111 Contact cont = Contact::readVCard(file)[0]; 111 Contact cont = Contact::readVCard(file)[0];
112 QString returnString = cont.fullName(); 112 QString returnString = cont.fullName();
113 OwnerField->setText( "<b>" +tr ("Owned by ") + returnString + "</b>"); 113 OwnerField->setText( "<b>" +tr ("Owned by ") + returnString + "</b>");
114 } else { 114 } else {
115 OwnerField->setText( "<b>" + tr ("Please fill out the business card")+" </b>"); 115 OwnerField->setText( "<b>" + tr ("Please fill out the business card")+" </b>");
116 } 116 }
117} 117}
118 118
119/* 119/*
120 * Set the owner field with a given QString, for example per qcop. 120 * Set the owner field with a given QString, for example per qcop.
121 */ 121 */
122void Today::setOwnerField(QString &message) { 122void Today::setOwnerField(QString &message) {
123 if (!message.isEmpty()) { 123 if (!message.isEmpty()) {
124 OwnerField->setText("<b>" + message + "</b>"); 124 OwnerField->setText("<b>" + message + "</b>");
125 } 125 }
126} 126}
127 127
128/* 128/*
129 * Autostart, uses the new (opie only) autostart method in the launcher code. 129 * Autostart, uses the new (opie only) autostart method in the launcher code.
130 * If registered against that today ist started on each resume. 130 * If registered against that today ist started on each resume.
131 */ 131 */
132void Today::autoStart() { 132void Today::autoStart() {
133 Config cfg("today"); 133 Config cfg("today");
134 cfg.setGroup("Autostart"); 134 cfg.setGroup("Autostart");
135 int AUTOSTART = cfg.readNumEntry("autostart",1); 135 int AUTOSTART = cfg.readNumEntry("autostart",1);
136// qDebug(QString("%1").arg(AUTOSTART)); 136// qDebug(QString("%1").arg(AUTOSTART));
137 if (AUTOSTART) { 137 if (AUTOSTART) {
138 QCopEnvelope e("QPE/System", "autoStart(QString, QString, QString)"); 138 QCopEnvelope e("QPE/System", "autoStart(QString,QString,QString)");
139 e << QString("add"); 139 e << QString("add");
140 e << QString("today"); 140 e << QString("today");
141 e << AUTOSTART_TIMER; 141 e << AUTOSTART_TIMER;
142 } else { 142 } else {
143 qDebug("Nun in else bei autostart"); 143 qDebug("Nun in else bei autostart");
144 QCopEnvelope e("QPE/System", "autoStart(QString, QString)"); 144 QCopEnvelope e("QPE/System", "autoStart(QString,QString)");
145 e << QString("remove"); 145 e << QString("remove");
146 e << QString("today"); 146 e << QString("today");
147 } 147 }
148} 148}
149 149
150/* 150/*
151 * Repaint method. Reread all fields. 151 * Repaint method. Reread all fields.
152 */ 152 */
153void Today::draw() { 153void Today::draw() {
154 init(); 154 init();
155 getDates(); 155 getDates();
156 getMail(); 156 getMail();
157 157
158 // if the todolist.xml file was not modified in between, do not parse it. 158 // if the todolist.xml file was not modified in between, do not parse it.
159 if (checkIfModified() || NEW_START==1) { 159 if (checkIfModified() || NEW_START==1) {
160 if (todo) delete todo; 160 if (todo) delete todo;
161 todo = new ToDoDB; 161 todo = new ToDoDB;
162 getTodo(); 162 getTodo();
163 } 163 }
164 164
165 // how often refresh 165 // how often refresh
166 QTimer::singleShot( 20*1000, this, SLOT(draw() ) ); 166 QTimer::singleShot( 20*1000, this, SLOT(draw() ) );
167} 167}
168 168
169/* 169/*
170 * Check if the todolist.xml was modified (if there are new entries. 170 * Check if the todolist.xml was modified (if there are new entries.
171 * Returns true if it was modified. 171 * Returns true if it was modified.
172 */ 172 */
173bool Today::checkIfModified() { 173bool Today::checkIfModified() {
174 174
175 QDir dir; 175 QDir dir;
176 QString homedir = dir.homeDirPath (); 176 QString homedir = dir.homeDirPath ();
177 QString time; 177 QString time;
178 178
179 Config cfg("today"); 179 Config cfg("today");
180 cfg.setGroup("Files"); 180 cfg.setGroup("Files");
181 time = cfg.readEntry("todolisttimestamp", ""); 181 time = cfg.readEntry("todolisttimestamp", "");
182 182
183 QFileInfo file = (homedir +"/Applications/todolist/todolist.xml"); 183 QFileInfo file = (homedir +"/Applications/todolist/todolist.xml");
184 QDateTime fileTime = file.lastModified(); 184 QDateTime fileTime = file.lastModified();
185 if (time.compare(fileTime.toString()) == 0) { 185 if (time.compare(fileTime.toString()) == 0) {
186 return false; 186 return false;
187 } else { 187 } else {
188 cfg.writeEntry("todolisttimestamp", fileTime.toString() ); 188 cfg.writeEntry("todolisttimestamp", fileTime.toString() );
189 cfg.write(); 189 cfg.write();
190 return true; 190 return true;
191 } 191 }
192} 192}
@@ -376,104 +376,104 @@ void Today::getTodo() {
376 376
377 QString output; 377 QString output;
378 QString tmpout; 378 QString tmpout;
379 int count = 0; 379 int count = 0;
380 int ammount = 0; 380 int ammount = 0;
381 381
382 // get overdue todos first 382 // get overdue todos first
383 QValueList<ToDoEvent> overDueList = todo->overDue(); 383 QValueList<ToDoEvent> overDueList = todo->overDue();
384 qBubbleSort(overDueList); 384 qBubbleSort(overDueList);
385 for ( QValueList<ToDoEvent>::Iterator it=overDueList.begin(); 385 for ( QValueList<ToDoEvent>::Iterator it=overDueList.begin();
386 it!=overDueList.end(); ++it ) { 386 it!=overDueList.end(); ++it ) {
387 if (!(*it).isCompleted() && ( ammount < MAX_LINES_TASK) ) { 387 if (!(*it).isCompleted() && ( ammount < MAX_LINES_TASK) ) {
388 tmpout += "<font color=#e00000><b>-" +((*it).description()).mid(0, MAX_CHAR_CLIP) + "</b></font><br>"; 388 tmpout += "<font color=#e00000><b>-" +((*it).description()).mid(0, MAX_CHAR_CLIP) + "</b></font><br>";
389 ammount++; 389 ammount++;
390 } 390 }
391 } 391 }
392 392
393 // get total number of still open todos 393 // get total number of still open todos
394 QValueList<ToDoEvent> openTodo = todo->rawToDos(); 394 QValueList<ToDoEvent> openTodo = todo->rawToDos();
395 qBubbleSort(openTodo); 395 qBubbleSort(openTodo);
396 for ( QValueList<ToDoEvent>::Iterator it=openTodo.begin(); 396 for ( QValueList<ToDoEvent>::Iterator it=openTodo.begin();
397 it!=openTodo.end(); ++it ) { 397 it!=openTodo.end(); ++it ) {
398 if (!(*it).isCompleted()){ 398 if (!(*it).isCompleted()){
399 count +=1; 399 count +=1;
400 // not the overdues, we allready got them, and not if we are 400 // not the overdues, we allready got them, and not if we are
401 // over the maxlines 401 // over the maxlines
402 if (!(*it).isOverdue() && ( ammount < MAX_LINES_TASK) ) { 402 if (!(*it).isOverdue() && ( ammount < MAX_LINES_TASK) ) {
403 tmpout += "<b>-</b>" + ((*it).description()).mid(0, MAX_CHAR_CLIP) + "<br>"; 403 tmpout += "<b>-</b>" + ((*it).description()).mid(0, MAX_CHAR_CLIP) + "<br>";
404 ammount++; 404 ammount++;
405 } 405 }
406 } 406 }
407 } 407 }
408 408
409 409
410 if (count > 0) { 410 if (count > 0) {
411 if( count == 1 ) { 411 if( count == 1 ) {
412 output = tr("There is <b> 1</b> active task: <br>" ); 412 output = tr("There is <b> 1</b> active task: <br>" );
413 } else { 413 } else {
414 output = tr("There are <b> %1</b> active tasks: <br>").arg(count); 414 output = tr("There are <b> %1</b> active tasks: <br>").arg(count);
415 } 415 }
416 output += tmpout; 416 output += tmpout;
417 } else { 417 } else {
418 output = tr("No active tasks"); 418 output = tr("No active tasks");
419 } 419 }
420 420
421 TodoField->setText(tr(output)); 421 TodoField->setText(tr(output));
422} 422}
423 423
424
425/* 424/*
426 * launch addressbook (personal card) 425 * launch addressbook (personal card)
427 */ 426 */
428void Today::editCard() { 427void Today::editCard() {
429 QCopEnvelope w("QPE/System", "execute(QString)"); 428 QCopEnvelope w("QPE/System", "execute(QString)");
430 w << QString("addressbook"); 429 w << QString("addressbook");
431 430
431 // while( !QCopChannel::isRegistered("QPE/Addressbook"))
432 QCopEnvelope v("QPE/Addressbook", "editPersonalAndClose()"); 432 QCopEnvelope v("QPE/Addressbook", "editPersonalAndClose()");
433} 433}
434 434
435/* 435/*
436 * launches datebook 436 * launches datebook
437 */ 437 */
438void Today::startDatebook() { 438void Today::startDatebook() {
439 QCopEnvelope e("QPE/System", "execute(QString)"); 439 QCopEnvelope e("QPE/System", "execute(QString)");
440 e << QString("datebook"); 440 e << QString("datebook");
441} 441}
442 442
443/* 443/*
444 * starts the edit dialog as known from datebook 444 * starts the edit dialog as known from datebook
445 */ 445 */
446 446
447 447
448extern QPEApplication *todayApp; 448extern QPEApplication *todayApp;
449 449
450void Today::editEvent(const Event &e) { 450void Today::editEvent(const Event &e) {
451 startDatebook(); 451 startDatebook();
452 452
453 while(!QCopChannel::isRegistered("QPE/Datebook")) todayApp->processEvents(); 453 while(!QCopChannel::isRegistered("QPE/Datebook")) todayApp->processEvents();
454 QCopEnvelope env("QPE/Datebook", "editEvent(int)"); 454 QCopEnvelope env("QPE/Datebook", "editEvent(int)");
455 env << e.uid(); 455 env << e.uid();
456} 456}
457 457
458/* 458/*
459 * launches todolist 459 * launches todolist
460 */ 460 */
461void Today::startTodo() { 461void Today::startTodo() {
462 QCopEnvelope e("QPE/System", "execute(QString)"); 462 QCopEnvelope e("QPE/System", "execute(QString)");
463 e << QString("todolist"); 463 e << QString("todolist");
464} 464}
465 465
466/* 466/*
467 * launch opiemail 467 * launch opiemail
468 */ 468 */
469void Today::startMail() { 469void Today::startMail() {
470 QCopEnvelope e("QPE/System", "execute(QString)"); 470 QCopEnvelope e("QPE/System", "execute(QString)");
471 e << QString("opiemail"); 471 e << QString("opiemail");
472//Right now start both, maybe decide which to rum via config file .. 472//Right now start both, maybe decide which to rum via config file ..
473 QCopEnvelope f("QPE/System", "execute(QString)"); 473 QCopEnvelope f("QPE/System", "execute(QString)");
474 f << QString("qtmail"); 474 f << QString("qtmail");
475} 475}
476 476
477 477
478Today::~Today() { 478Today::~Today() {
479} 479}