summaryrefslogtreecommitdiff
path: root/library/global.cpp
Unidiff
Diffstat (limited to 'library/global.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/global.cpp35
1 files changed, 30 insertions, 5 deletions
diff --git a/library/global.cpp b/library/global.cpp
index dd15eb7..5a28595 100644
--- a/library/global.cpp
+++ b/library/global.cpp
@@ -1,146 +1,168 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of 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 QTOPIA_INTERNAL_LANGLIST 20#define QTOPIA_INTERNAL_LANGLIST
21#include <qpe/qpedebug.h> 21#include <qpe/qpedebug.h>
22#include <qpe/global.h> 22#include <qpe/global.h>
23#include <qpe/qdawg.h> 23#include <qpe/qdawg.h>
24#include <qpe/qpeapplication.h> 24#include <qpe/qpeapplication.h>
25#include <qpe/resource.h> 25#include <qpe/resource.h>
26#include <qpe/storage.h> 26#include <qpe/storage.h>
27#include <qpe/applnk.h> 27#include <qpe/applnk.h>
28#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 28#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
29#include "qpe/qcopenvelope_qws.h" 29#include "qpe/qcopenvelope_qws.h"
30#endif 30#endif
31 31
32#include <qfile.h> 32#include <qfile.h>
33#include <qlabel.h> 33#include <qlabel.h>
34#include <qtimer.h> 34#include <qtimer.h>
35#include <qmap.h> 35#include <qmap.h>
36#include <qdict.h> 36#include <qdict.h>
37#include <qdir.h> 37#include <qdir.h>
38#include <qmessagebox.h> 38#include <qmessagebox.h>
39#include <qregexp.h> 39#include <qregexp.h>
40 40
41#include <stdlib.h> 41#include <stdlib.h>
42#include <sys/stat.h> 42#include <sys/stat.h>
43#include <sys/wait.h> 43#include <sys/wait.h>
44#include <sys/types.h> 44#include <sys/types.h>
45#include <fcntl.h> 45#include <fcntl.h>
46#include <unistd.h> 46#include <unistd.h>
47 47
48#include <qwindowsystem_qws.h> // for qwsServer 48#include <qwindowsystem_qws.h> // for qwsServer
49#include <qdatetime.h> 49#include <qdatetime.h>
50 50
51#include <qfile.h>
52
53namespace {
54 // checks if the storage should be searched
55 bool checkStorage(const QString &path ){ // this is a small Config replacement cause config is too limited -zecke
56 QFile file(path );
57 if(!file.open(IO_ReadOnly ) )
58 return true;
59
60 QByteArray array = file.readAll();
61 QStringList list = QStringList::split('\n', QString( array ) );
62 for(QStringList::Iterator it = list.begin(); it != list.end(); ++it ){
63 if( (*it).startsWith("autocheck = 0" ) ){
64 return true;
65 }else if( (*it).startsWith("autocheck = 1" ) ){
66 return false;
67 }
68 }
69 return true;
70 }
71}
72
51//#include "quickexec_p.h" 73//#include "quickexec_p.h"
52 74
53class Emitter : public QObject { 75class Emitter : public QObject {
54 Q_OBJECT 76 Q_OBJECT
55public: 77public:
56 Emitter( QWidget* receiver, const QString& document ) 78 Emitter( QWidget* receiver, const QString& document )
57 { 79 {
58 connect(this, SIGNAL(setDocument(const QString&)), 80 connect(this, SIGNAL(setDocument(const QString&)),
59 receiver, SLOT(setDocument(const QString&))); 81 receiver, SLOT(setDocument(const QString&)));
60 emit setDocument(document); 82 emit setDocument(document);
61 disconnect(this, SIGNAL(setDocument(const QString&)), 83 disconnect(this, SIGNAL(setDocument(const QString&)),
62 receiver, SLOT(setDocument(const QString&))); 84 receiver, SLOT(setDocument(const QString&)));
63 } 85 }
64 86
65signals: 87signals:
66 void setDocument(const QString&); 88 void setDocument(const QString&);
67}; 89};
68 90
69 91
70class StartingAppList : public QObject { 92class StartingAppList : public QObject {
71 Q_OBJECT 93 Q_OBJECT
72public: 94public:
73 static void add( const QString& name ); 95 static void add( const QString& name );
74 static bool isStarting( const QString name ); 96 static bool isStarting( const QString name );
75private slots: 97private slots:
76 void handleNewChannel( const QString &); 98 void handleNewChannel( const QString &);
77private: 99private:
78 StartingAppList( QObject *parent=0, const char* name=0 ) ; 100 StartingAppList( QObject *parent=0, const char* name=0 ) ;
79 101
80 QDict<QTime> dict; 102 QDict<QTime> dict;
81 static StartingAppList *appl; 103 static StartingAppList *appl;
82}; 104};
83 105
84StartingAppList* StartingAppList::appl = 0; 106StartingAppList* StartingAppList::appl = 0;
85 107
86StartingAppList::StartingAppList( QObject *parent, const char* name ) 108StartingAppList::StartingAppList( QObject *parent, const char* name )
87 :QObject( parent, name ) 109 :QObject( parent, name )
88{ 110{
89#if QT_VERSION >= 232 && !defined(QT_NO_COP) 111#if QT_VERSION >= 232 && !defined(QT_NO_COP)
90 connect( qwsServer, SIGNAL( newChannel(const QString&)), 112 connect( qwsServer, SIGNAL( newChannel(const QString&)),
91 this, SLOT( handleNewChannel(const QString&)) ); 113 this, SLOT( handleNewChannel(const QString&)) );
92 dict.setAutoDelete( TRUE ); 114 dict.setAutoDelete( TRUE );
93#endif 115#endif
94} 116}
95 117
96void StartingAppList::add( const QString& name ) 118void StartingAppList::add( const QString& name )
97{ 119{
98#if QT_VERSION >= 232 && !defined(QT_NO_COP) 120#if QT_VERSION >= 232 && !defined(QT_NO_COP)
99 if ( !appl ) 121 if ( !appl )
100 appl = new StartingAppList; 122 appl = new StartingAppList;
101 QTime *t = new QTime; 123 QTime *t = new QTime;
102 t->start(); 124 t->start();
103 appl->dict.insert( "QPE/Application/" + name, t ); 125 appl->dict.insert( "QPE/Application/" + name, t );
104#endif 126#endif
105} 127}
106 128
107bool StartingAppList::isStarting( const QString name ) 129bool StartingAppList::isStarting( const QString name )
108{ 130{
109#if QT_VERSION >= 232 && !defined(QT_NO_COP) 131#if QT_VERSION >= 232 && !defined(QT_NO_COP)
110 if ( appl ) { 132 if ( appl ) {
111 QTime *t = appl->dict.find( "QPE/Application/" + name ); 133 QTime *t = appl->dict.find( "QPE/Application/" + name );
112 if ( !t ) 134 if ( !t )
113 return FALSE; 135 return FALSE;
114 if ( t->elapsed() > 10000 ) { 136 if ( t->elapsed() > 10000 ) {
115 // timeout in case of crash or something 137 // timeout in case of crash or something
116 appl->dict.remove( "QPE/Application/" + name ); 138 appl->dict.remove( "QPE/Application/" + name );
117 return FALSE; 139 return FALSE;
118 } 140 }
119 return TRUE; 141 return TRUE;
120 } 142 }
121#endif 143#endif
122 return FALSE; 144 return FALSE;
123} 145}
124 146
125void StartingAppList::handleNewChannel( const QString & name ) 147void StartingAppList::handleNewChannel( const QString & name )
126{ 148{
127#if QT_VERSION >= 232 && !defined(QT_NO_COP) 149#if QT_VERSION >= 232 && !defined(QT_NO_COP)
128 dict.remove( name ); 150 dict.remove( name );
129#endif 151#endif
130} 152}
131 153
132static bool docDirCreated = FALSE; 154static bool docDirCreated = FALSE;
133static QDawg* fixed_dawg = 0; 155static QDawg* fixed_dawg = 0;
134static QDict<QDawg> *named_dawg = 0; 156static QDict<QDawg> *named_dawg = 0;
135 157
136static QString qpeDir() 158static QString qpeDir()
137{ 159{
138 QString dir = getenv("OPIEDIR"); 160 QString dir = getenv("OPIEDIR");
139 if ( dir.isEmpty() ) dir = ".."; 161 if ( dir.isEmpty() ) dir = "..";
140 return dir; 162 return dir;
141} 163}
142 164
143static QString dictDir() 165static QString dictDir()
144{ 166{
145 return qpeDir() + "/etc/dict"; 167 return qpeDir() + "/etc/dict";
146} 168}
@@ -545,143 +567,146 @@ void Global::execute( const QString &c, const QString& document )
545 // else try and find it in the bin directory 567 // else try and find it in the bin directory
546 if (builtin) { 568 if (builtin) {
547 for (int i = 0; builtin[i].file; i++) { 569 for (int i = 0; builtin[i].file; i++) {
548 if ( builtin[i].file == c ) { 570 if ( builtin[i].file == c ) {
549 if ( running[i] ) { 571 if ( running[i] ) {
550 if ( !document.isNull() && builtin[i].documentary ) 572 if ( !document.isNull() && builtin[i].documentary )
551 setDocument(running[i], document); 573 setDocument(running[i], document);
552 running[i]->raise(); 574 running[i]->raise();
553 running[i]->show(); 575 running[i]->show();
554 running[i]->setActiveWindow(); 576 running[i]->setActiveWindow();
555 } else { 577 } else {
556 running[i] = builtin[i].func( builtin[i].maximized ); 578 running[i] = builtin[i].func( builtin[i].maximized );
557 } 579 }
558 QCopEnvelope e("QPE/System", "notBusy(QString)" ); 580 QCopEnvelope e("QPE/System", "notBusy(QString)" );
559 e << c; // that was quick ;-) 581 e << c; // that was quick ;-)
560 return; 582 return;
561 } 583 }
562 } 584 }
563 } 585 }
564 586
565 //Global::invoke(c, document); 587 //Global::invoke(c, document);
566 588
567 // Convert the command line in to a list of arguments 589 // Convert the command line in to a list of arguments
568 QStringList list = QStringList::split(QRegExp(" *"),c); 590 QStringList list = QStringList::split(QRegExp(" *"),c);
569 591
570#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 592#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
571 QString ap=list[0]; 593 QString ap=list[0];
572 594
573 qDebug("executing %s", ap.latin1() ); 595 qDebug("executing %s", ap.latin1() );
574 if ( ap == "suspend" ) { 596 if ( ap == "suspend" ) {
575 QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); 597 QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
576 return; 598 return;
577 } 599 }
578 600
579 /* if need be, sending a qcop message will result in an invoke, see 601 /* if need be, sending a qcop message will result in an invoke, see
580 preceeding function */ 602 preceeding function */
581 { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } 603 { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); }
582 if ( !document.isEmpty() ) { 604 if ( !document.isEmpty() ) {
583 QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" ); 605 QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" );
584 env << document; 606 env << document;
585 } 607 }
586#endif 608#endif
587} 609}
588 610
589/*! 611/*!
590 Returns the string \a s with the characters backslash, ", and $ 612 Returns the string \a s with the characters backslash, ", and $
591 quoted by a preceeding backslash. 613 quoted by a preceeding backslash.
592*/ 614*/
593QString Global::shellQuote(const QString& s) 615QString Global::shellQuote(const QString& s)
594{ 616{
595 QString r="\""; 617 QString r="\"";
596 for (int i=0; i<(int)s.length(); i++) { 618 for (int i=0; i<(int)s.length(); i++) {
597 char c = s[i].latin1(); 619 char c = s[i].latin1();
598 switch (c) { 620 switch (c) {
599 case '\\': case '"': case '$': 621 case '\\': case '"': case '$':
600 r+="\\"; 622 r+="\\";
601 } 623 }
602 r += s[i]; 624 r += s[i];
603 } 625 }
604 r += "\""; 626 r += "\"";
605 return r; 627 return r;
606} 628}
607 629
608/*! 630/*!
609 Returns the string \a s with the characters backslash and " 631 Returns the string \a s with the characters backslash and "
610 quoted by a preceeding backslash. 632 quoted by a preceeding backslash.
611*/ 633*/
612QString Global::stringQuote(const QString& s) 634QString Global::stringQuote(const QString& s)
613{ 635{
614 QString r="\""; 636 QString r="\"";
615 for (int i=0; i<(int)s.length(); i++) { 637 for (int i=0; i<(int)s.length(); i++) {
616 char c = s[i].latin1(); 638 char c = s[i].latin1();
617 switch (c) { 639 switch (c) {
618 case '\\': case '"': 640 case '\\': case '"':
619 r+="\\"; 641 r+="\\";
620 } 642 }
621 r += s[i]; 643 r += s[i];
622 } 644 }
623 r += "\""; 645 r += "\"";
624 return r; 646 return r;
625} 647}
626 648
627/*! 649/*!
628 Finds all documents on the system's document directories which 650 Finds all documents on the system's document directories which
629 match the filter \a mimefilter, and appends the resulting DocLnk 651 match the filter \a mimefilter, and appends the resulting DocLnk
630 objects to \a folder. 652 objects to \a folder.
631*/ 653*/
632void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter) 654void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter)
633{ 655{
634 QString homedocs = QString(getenv("HOME")) + "/Documents"; 656 QString homedocs = QString(getenv("HOME")) + "/Documents";
635 DocLnkSet d(homedocs,mimefilter); 657 DocLnkSet d(homedocs,mimefilter);
636 folder->appendFrom(d); 658 folder->appendFrom(d);
637 StorageInfo storage; 659 StorageInfo storage;
638 const QList<FileSystem> &fs = storage.fileSystems(); 660 const QList<FileSystem> &fs = storage.fileSystems();
639 QListIterator<FileSystem> it ( fs ); 661 QListIterator<FileSystem> it ( fs );
640 for ( ; it.current(); ++it ) { 662 for ( ; it.current(); ++it ) {
641 if ( (*it)->isRemovable() ) { 663 if ( (*it)->isRemovable() ) { // let's find out if we should search on it
642 QString path = (*it)->path(); 664 // this is a candidate look at the cf and see if we should search on it
643 DocLnkSet ide( path, mimefilter ); 665 QString path = (*it)->path();
644 folder->appendFrom(ide); 666 if( !checkStorage((*it)->path() + "/.opiestorage.cf" ) )
645 } 667 continue;
668 DocLnkSet ide( path, mimefilter );
669 folder->appendFrom(ide);
670 }
646 } 671 }
647} 672}
648 673
649QStringList Global::languageList() 674QStringList Global::languageList()
650{ 675{
651 QString lang = getenv("LANG"); 676 QString lang = getenv("LANG");
652 QStringList langs; 677 QStringList langs;
653 langs.append(lang); 678 langs.append(lang);
654 int i = lang.find("."); 679 int i = lang.find(".");
655 if ( i > 0 ) 680 if ( i > 0 )
656 lang = lang.left( i ); 681 lang = lang.left( i );
657 i = lang.find( "_" ); 682 i = lang.find( "_" );
658 if ( i > 0 ) 683 if ( i > 0 )
659 langs.append(lang.left(i)); 684 langs.append(lang.left(i));
660 return langs; 685 return langs;
661} 686}
662 687
663QStringList Global::helpPath() 688QStringList Global::helpPath()
664{ 689{
665 QStringList path; 690 QStringList path;
666 QStringList langs = Global::languageList(); 691 QStringList langs = Global::languageList();
667 for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) { 692 for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) {
668 QString lang = *it; 693 QString lang = *it;
669 if ( !lang.isEmpty() ) 694 if ( !lang.isEmpty() )
670 path += QPEApplication::qpeDir() + "/help/" + lang + "/html"; 695 path += QPEApplication::qpeDir() + "/help/" + lang + "/html";
671 } 696 }
672 path += QPEApplication::qpeDir() + "/pics"; 697 path += QPEApplication::qpeDir() + "/pics";
673 path += QPEApplication::qpeDir() + "/help/en/html"; 698 path += QPEApplication::qpeDir() + "/help/en/html";
674 path += QPEApplication::qpeDir() + "/docs"; 699 path += QPEApplication::qpeDir() + "/docs";
675 QString dir = QDir::current().canonicalPath(); 700 QString dir = QDir::current().canonicalPath();
676 if ( dir == "/" ) 701 if ( dir == "/" )
677 dir += "/docs"; 702 dir += "/docs";
678 else { 703 else {
679 path += dir + "/../pics"; 704 path += dir + "/../pics";
680 dir += "/../docs"; 705 dir += "/../docs";
681 path += dir; 706 path += dir;
682 } 707 }
683 return path; 708 return path;
684} 709}
685 710
686 711
687#include "global.moc" 712#include "global.moc"