summaryrefslogtreecommitdiffabout
path: root/microkde
authorzautrix <zautrix>2005-01-18 12:06:27 (UTC)
committer zautrix <zautrix>2005-01-18 12:06:27 (UTC)
commit4b82a36d1b2479dd2e6f00aef45af848f6793099 (patch) (unidiff)
tree21e5077956085c33f57c4cb54c2b25d5d9a4dc20 /microkde
parentfbc1ca53388337b66017973896725d51416aae1a (diff)
downloadkdepimpi-4b82a36d1b2479dd2e6f00aef45af848f6793099.zip
kdepimpi-4b82a36d1b2479dd2e6f00aef45af848f6793099.tar.gz
kdepimpi-4b82a36d1b2479dd2e6f00aef45af848f6793099.tar.bz2
data dir
Diffstat (limited to 'microkde') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kdecore/kstandarddirs.cpp4
-rw-r--r--microkde/kdecore/kstandarddirs.h2
2 files changed, 4 insertions, 2 deletions
diff --git a/microkde/kdecore/kstandarddirs.cpp b/microkde/kdecore/kstandarddirs.cpp
index 4c03c15..f3584d7 100644
--- a/microkde/kdecore/kstandarddirs.cpp
+++ b/microkde/kdecore/kstandarddirs.cpp
@@ -774,889 +774,891 @@ QStringList KStandardDirs::resourceDirs(const char *type) const
774 pit != prefixList->end(); 774 pit != prefixList->end();
775 pit++) 775 pit++)
776 { 776 {
777 for (QStringList::ConstIterator it = dirs->begin(); 777 for (QStringList::ConstIterator it = dirs->begin();
778 it != dirs->end(); ++it) { 778 it != dirs->end(); ++it) {
779 QString path = realPath(*pit + *it); 779 QString path = realPath(*pit + *it);
780 testdir.setPath(path); 780 testdir.setPath(path);
781 if (local && restrictionActive) 781 if (local && restrictionActive)
782 continue; 782 continue;
783 if ((local || testdir.exists()) && !candidates->contains(path)) 783 if ((local || testdir.exists()) && !candidates->contains(path))
784 candidates->append(path); 784 candidates->append(path);
785 } 785 }
786 local = false; 786 local = false;
787 } 787 }
788 } 788 }
789 dirs = absolutes.find(type); 789 dirs = absolutes.find(type);
790 if (dirs) 790 if (dirs)
791 for (QStringList::ConstIterator it = dirs->begin(); 791 for (QStringList::ConstIterator it = dirs->begin();
792 it != dirs->end(); ++it) 792 it != dirs->end(); ++it)
793 { 793 {
794 testdir.setPath(*it); 794 testdir.setPath(*it);
795 if (testdir.exists()) 795 if (testdir.exists())
796 { 796 {
797 QString filename = realPath(*it); 797 QString filename = realPath(*it);
798 if (!candidates->contains(filename)) 798 if (!candidates->contains(filename))
799 candidates->append(filename); 799 candidates->append(filename);
800 } 800 }
801 } 801 }
802 dircache.insert(type, candidates); 802 dircache.insert(type, candidates);
803 } 803 }
804 804
805#if 0 805#if 0
806 kdDebug() << "found dirs for resource " << type << ":" << endl; 806 kdDebug() << "found dirs for resource " << type << ":" << endl;
807 for (QStringList::ConstIterator pit = candidates->begin(); 807 for (QStringList::ConstIterator pit = candidates->begin();
808 pit != candidates->end(); 808 pit != candidates->end();
809 pit++) 809 pit++)
810 { 810 {
811 fprintf(stderr, "%s\n", (*pit).latin1()); 811 fprintf(stderr, "%s\n", (*pit).latin1());
812 } 812 }
813#endif 813#endif
814 814
815 815
816 return *candidates; 816 return *candidates;
817} 817}
818 818
819/*US 819/*US
820QString KStandardDirs::findExe( const QString& appname, 820QString KStandardDirs::findExe( const QString& appname,
821 const QString& pstr, bool ignore) 821 const QString& pstr, bool ignore)
822{ 822{
823 QFileInfo info; 823 QFileInfo info;
824 824
825 // absolute path ? 825 // absolute path ?
826 if (appname.startsWith(QString::fromLatin1("/"))) 826 if (appname.startsWith(QString::fromLatin1("/")))
827 { 827 {
828 info.setFile( appname ); 828 info.setFile( appname );
829 if( info.exists() && ( ignore || info.isExecutable() ) 829 if( info.exists() && ( ignore || info.isExecutable() )
830 && info.isFile() ) { 830 && info.isFile() ) {
831 return appname; 831 return appname;
832 } 832 }
833 return QString::null; 833 return QString::null;
834 } 834 }
835 835
836//US QString p = QString("%1/%2").arg(__KDE_BINDIR).arg(appname); 836//US QString p = QString("%1/%2").arg(__KDE_BINDIR).arg(appname);
837 QString p = QString("%1/%2").arg(appname).arg(appname); 837 QString p = QString("%1/%2").arg(appname).arg(appname);
838 qDebug("KStandardDirs::findExe this is probably wrong"); 838 qDebug("KStandardDirs::findExe this is probably wrong");
839 839
840 info.setFile( p ); 840 info.setFile( p );
841 if( info.exists() && ( ignore || info.isExecutable() ) 841 if( info.exists() && ( ignore || info.isExecutable() )
842 && ( info.isFile() || info.isSymLink() ) ) { 842 && ( info.isFile() || info.isSymLink() ) ) {
843 return p; 843 return p;
844 } 844 }
845 845
846 QStringList tokens; 846 QStringList tokens;
847 p = pstr; 847 p = pstr;
848 848
849 if( p.isNull() ) { 849 if( p.isNull() ) {
850 p = getenv( "PATH" ); 850 p = getenv( "PATH" );
851 } 851 }
852 852
853 tokenize( tokens, p, ":\b" ); 853 tokenize( tokens, p, ":\b" );
854 854
855 // split path using : or \b as delimiters 855 // split path using : or \b as delimiters
856 for( unsigned i = 0; i < tokens.count(); i++ ) { 856 for( unsigned i = 0; i < tokens.count(); i++ ) {
857 p = tokens[ i ]; 857 p = tokens[ i ];
858 858
859 if ( p[ 0 ] == '~' ) 859 if ( p[ 0 ] == '~' )
860 { 860 {
861 int len = p.find( '/' ); 861 int len = p.find( '/' );
862 if ( len == -1 ) 862 if ( len == -1 )
863 len = p.length(); 863 len = p.length();
864 if ( len == 1 ) 864 if ( len == 1 )
865 p.replace( 0, 1, QDir::homeDirPath() ); 865 p.replace( 0, 1, QDir::homeDirPath() );
866 else 866 else
867 { 867 {
868 QString user = p.mid( 1, len - 1 ); 868 QString user = p.mid( 1, len - 1 );
869 struct passwd *dir = getpwnam( user.local8Bit().data() ); 869 struct passwd *dir = getpwnam( user.local8Bit().data() );
870 if ( dir && strlen( dir->pw_dir ) ) 870 if ( dir && strlen( dir->pw_dir ) )
871 p.replace( 0, len, QString::fromLocal8Bit( dir->pw_dir ) ); 871 p.replace( 0, len, QString::fromLocal8Bit( dir->pw_dir ) );
872 } 872 }
873 } 873 }
874 874
875 p += "/"; 875 p += "/";
876 p += appname; 876 p += appname;
877 877
878 // Check for executable in this tokenized path 878 // Check for executable in this tokenized path
879 info.setFile( p ); 879 info.setFile( p );
880 880
881 if( info.exists() && ( ignore || info.isExecutable() ) 881 if( info.exists() && ( ignore || info.isExecutable() )
882 && ( info.isFile() || info.isSymLink() ) ) { 882 && ( info.isFile() || info.isSymLink() ) ) {
883 return p; 883 return p;
884 } 884 }
885 } 885 }
886 886
887 // If we reach here, the executable wasn't found. 887 // If we reach here, the executable wasn't found.
888 // So return empty string. 888 // So return empty string.
889 889
890 return QString::null; 890 return QString::null;
891} 891}
892 892
893int KStandardDirs::findAllExe( QStringList& list, const QString& appname, 893int KStandardDirs::findAllExe( QStringList& list, const QString& appname,
894 const QString& pstr, bool ignore ) 894 const QString& pstr, bool ignore )
895{ 895{
896 QString p = pstr; 896 QString p = pstr;
897 QFileInfo info; 897 QFileInfo info;
898 QStringList tokens; 898 QStringList tokens;
899 899
900 if( p.isNull() ) { 900 if( p.isNull() ) {
901 p = getenv( "PATH" ); 901 p = getenv( "PATH" );
902 } 902 }
903 903
904 list.clear(); 904 list.clear();
905 tokenize( tokens, p, ":\b" ); 905 tokenize( tokens, p, ":\b" );
906 906
907 for ( unsigned i = 0; i < tokens.count(); i++ ) { 907 for ( unsigned i = 0; i < tokens.count(); i++ ) {
908 p = tokens[ i ]; 908 p = tokens[ i ];
909 p += "/"; 909 p += "/";
910 p += appname; 910 p += appname;
911 911
912 info.setFile( p ); 912 info.setFile( p );
913 913
914 if( info.exists() && (ignore || info.isExecutable()) 914 if( info.exists() && (ignore || info.isExecutable())
915 && info.isFile() ) { 915 && info.isFile() ) {
916 list.append( p ); 916 list.append( p );
917 } 917 }
918 918
919 } 919 }
920 920
921 return list.count(); 921 return list.count();
922} 922}
923*/ 923*/
924 924
925static int tokenize( QStringList& tokens, const QString& str, 925static int tokenize( QStringList& tokens, const QString& str,
926 const QString& delim ) 926 const QString& delim )
927{ 927{
928 int len = str.length(); 928 int len = str.length();
929 QString token = ""; 929 QString token = "";
930 930
931 for( int index = 0; index < len; index++) 931 for( int index = 0; index < len; index++)
932 { 932 {
933 if ( delim.find( str[ index ] ) >= 0 ) 933 if ( delim.find( str[ index ] ) >= 0 )
934 { 934 {
935 tokens.append( token ); 935 tokens.append( token );
936 token = ""; 936 token = "";
937 } 937 }
938 else 938 else
939 { 939 {
940 token += str[ index ]; 940 token += str[ index ];
941 } 941 }
942 } 942 }
943 if ( token.length() > 0 ) 943 if ( token.length() > 0 )
944 { 944 {
945 tokens.append( token ); 945 tokens.append( token );
946 } 946 }
947 947
948 return tokens.count(); 948 return tokens.count();
949} 949}
950 950
951QString KStandardDirs::kde_default(const char *type) { 951QString KStandardDirs::kde_default(const char *type) {
952 if (!strcmp(type, "data")) 952 if (!strcmp(type, "data"))
953 return "apps/"; 953 return "apps/";
954 if (!strcmp(type, "html")) 954 if (!strcmp(type, "html"))
955 return "share/doc/HTML/"; 955 return "share/doc/HTML/";
956 if (!strcmp(type, "icon")) 956 if (!strcmp(type, "icon"))
957 return "share/icons/"; 957 return "share/icons/";
958 if (!strcmp(type, "config")) 958 if (!strcmp(type, "config"))
959 return "config/"; 959 return "config/";
960 if (!strcmp(type, "pixmap")) 960 if (!strcmp(type, "pixmap"))
961 return "share/pixmaps/"; 961 return "share/pixmaps/";
962 if (!strcmp(type, "apps")) 962 if (!strcmp(type, "apps"))
963 return "share/applnk/"; 963 return "share/applnk/";
964 if (!strcmp(type, "sound")) 964 if (!strcmp(type, "sound"))
965 return "share/sounds/"; 965 return "share/sounds/";
966 if (!strcmp(type, "locale")) 966 if (!strcmp(type, "locale"))
967 return "share/locale/"; 967 return "share/locale/";
968 if (!strcmp(type, "services")) 968 if (!strcmp(type, "services"))
969 return "share/services/"; 969 return "share/services/";
970 if (!strcmp(type, "servicetypes")) 970 if (!strcmp(type, "servicetypes"))
971 return "share/servicetypes/"; 971 return "share/servicetypes/";
972 if (!strcmp(type, "mime")) 972 if (!strcmp(type, "mime"))
973 return "share/mimelnk/"; 973 return "share/mimelnk/";
974 if (!strcmp(type, "cgi")) 974 if (!strcmp(type, "cgi"))
975 return "cgi-bin/"; 975 return "cgi-bin/";
976 if (!strcmp(type, "wallpaper")) 976 if (!strcmp(type, "wallpaper"))
977 return "share/wallpapers/"; 977 return "share/wallpapers/";
978 if (!strcmp(type, "templates")) 978 if (!strcmp(type, "templates"))
979 return "share/templates/"; 979 return "share/templates/";
980 if (!strcmp(type, "exe")) 980 if (!strcmp(type, "exe"))
981 return "bin/"; 981 return "bin/";
982 if (!strcmp(type, "lib")) 982 if (!strcmp(type, "lib"))
983 return "lib/"; 983 return "lib/";
984 if (!strcmp(type, "module")) 984 if (!strcmp(type, "module"))
985 return "lib/kde3/"; 985 return "lib/kde3/";
986 if (!strcmp(type, "qtplugins")) 986 if (!strcmp(type, "qtplugins"))
987 return "lib/kde3/plugins"; 987 return "lib/kde3/plugins";
988 if (!strcmp(type, "xdgdata-apps")) 988 if (!strcmp(type, "xdgdata-apps"))
989 return "applications/"; 989 return "applications/";
990 if (!strcmp(type, "xdgdata-dirs")) 990 if (!strcmp(type, "xdgdata-dirs"))
991 return "desktop-directories/"; 991 return "desktop-directories/";
992 if (!strcmp(type, "xdgconf-menu")) 992 if (!strcmp(type, "xdgconf-menu"))
993 return "menus/"; 993 return "menus/";
994 if (!strcmp(type, "tmp")) 994 if (!strcmp(type, "tmp"))
995 return "tmp/"; 995 return "tmp/";
996 996
997 qFatal("unknown resource type %s", type); 997 qFatal("unknown resource type %s", type);
998 return QString::null; 998 return QString::null;
999} 999}
1000 1000
1001QString KStandardDirs::saveLocation(const char *type, 1001QString KStandardDirs::saveLocation(const char *type,
1002 const QString& suffix, 1002 const QString& suffix,
1003 bool create) const 1003 bool create) const
1004{ 1004{
1005 //qDebug("KStandardDirs::saveLocation called %s %s", type,suffix.latin1() ); 1005 //qDebug("KStandardDirs::saveLocation called %s %s", type,suffix.latin1() );
1006 //return ""; 1006 //return "";
1007 checkConfig(); 1007 checkConfig();
1008 1008
1009 QString *pPath = savelocations.find(type); 1009 QString *pPath = savelocations.find(type);
1010 if (!pPath) 1010 if (!pPath)
1011 { 1011 {
1012 QStringList *dirs = relatives.find(type); 1012 QStringList *dirs = relatives.find(type);
1013 if (!dirs && ( 1013 if (!dirs && (
1014 (strcmp(type, "socket") == 0) || 1014 (strcmp(type, "socket") == 0) ||
1015 (strcmp(type, "tmp") == 0) || 1015 (strcmp(type, "tmp") == 0) ||
1016 (strcmp(type, "cache") == 0) )) 1016 (strcmp(type, "cache") == 0) ))
1017 { 1017 {
1018 (void) resourceDirs(type); // Generate socket|tmp|cache resource. 1018 (void) resourceDirs(type); // Generate socket|tmp|cache resource.
1019 dirs = relatives.find(type); // Search again. 1019 dirs = relatives.find(type); // Search again.
1020 } 1020 }
1021 if (dirs) 1021 if (dirs)
1022 { 1022 {
1023 // Check for existance of typed directory + suffix 1023 // Check for existance of typed directory + suffix
1024 if (strncmp(type, "xdgdata-", 8) == 0) 1024 if (strncmp(type, "xdgdata-", 8) == 0)
1025 pPath = new QString(realPath(localxdgdatadir() + dirs->last())); 1025 pPath = new QString(realPath(localxdgdatadir() + dirs->last()));
1026 else if (strncmp(type, "xdgconf-", 8) == 0) 1026 else if (strncmp(type, "xdgconf-", 8) == 0)
1027 pPath = new QString(realPath(localxdgconfdir() + dirs->last())); 1027 pPath = new QString(realPath(localxdgconfdir() + dirs->last()));
1028 else 1028 else
1029 pPath = new QString(realPath(localkdedir() + dirs->last())); 1029 pPath = new QString(realPath(localkdedir() + dirs->last()));
1030 } 1030 }
1031 else { 1031 else {
1032 dirs = absolutes.find(type); 1032 dirs = absolutes.find(type);
1033 if (!dirs) 1033 if (!dirs)
1034 qFatal("KStandardDirs: The resource type %s is not registered", type); 1034 qFatal("KStandardDirs: The resource type %s is not registered", type);
1035 pPath = new QString(realPath(dirs->last())); 1035 pPath = new QString(realPath(dirs->last()));
1036 } 1036 }
1037 1037
1038 savelocations.insert(type, pPath); 1038 savelocations.insert(type, pPath);
1039 } 1039 }
1040 1040
1041 QString fullPath = *pPath + suffix; 1041 QString fullPath = *pPath + suffix;
1042//US struct stat st; 1042//US struct stat st;
1043//US if (stat(QFile::encodeName(fullPath), &st) != 0 || !(S_ISDIR(st.st_mode))) 1043//US if (stat(QFile::encodeName(fullPath), &st) != 0 || !(S_ISDIR(st.st_mode)))
1044 QFileInfo fullPathInfo(QFile::encodeName(fullPath)); 1044 QFileInfo fullPathInfo(QFile::encodeName(fullPath));
1045 if (fullPathInfo.isReadable() || !fullPathInfo.isDir()) 1045 if (fullPathInfo.isReadable() || !fullPathInfo.isDir())
1046 1046
1047 1047
1048 { 1048 {
1049 if(!create) { 1049 if(!create) {
1050#ifndef NDEBUG 1050#ifndef NDEBUG
1051 qDebug("save location %s doesn't exist", fullPath.latin1()); 1051 qDebug("save location %s doesn't exist", fullPath.latin1());
1052#endif 1052#endif
1053 return fullPath; 1053 return fullPath;
1054 } 1054 }
1055 if(!makeDir(fullPath, 0700)) { 1055 if(!makeDir(fullPath, 0700)) {
1056 qWarning("failed to create %s", fullPath.latin1()); 1056 qWarning("failed to create %s", fullPath.latin1());
1057 return fullPath; 1057 return fullPath;
1058 } 1058 }
1059 dircache.remove(type); 1059 dircache.remove(type);
1060 } 1060 }
1061 return fullPath; 1061 return fullPath;
1062} 1062}
1063 1063
1064QString KStandardDirs::relativeLocation(const char *type, const QString &absPath) 1064QString KStandardDirs::relativeLocation(const char *type, const QString &absPath)
1065{ 1065{
1066 QString fullPath = absPath; 1066 QString fullPath = absPath;
1067 int i = absPath.findRev('/'); 1067 int i = absPath.findRev('/');
1068 if (i != -1) 1068 if (i != -1)
1069 { 1069 {
1070 fullPath = realPath(absPath.left(i+1))+absPath.mid(i+1); // Normalize 1070 fullPath = realPath(absPath.left(i+1))+absPath.mid(i+1); // Normalize
1071 } 1071 }
1072 1072
1073 QStringList candidates = resourceDirs(type); 1073 QStringList candidates = resourceDirs(type);
1074 1074
1075 for (QStringList::ConstIterator it = candidates.begin(); 1075 for (QStringList::ConstIterator it = candidates.begin();
1076 it != candidates.end(); it++) 1076 it != candidates.end(); it++)
1077 if (fullPath.startsWith(*it)) 1077 if (fullPath.startsWith(*it))
1078 { 1078 {
1079 return fullPath.mid((*it).length()); 1079 return fullPath.mid((*it).length());
1080 } 1080 }
1081 1081
1082 return absPath; 1082 return absPath;
1083} 1083}
1084 1084
1085 1085
1086bool KStandardDirs::makeDir(const QString& dir2, int mode) 1086bool KStandardDirs::makeDir(const QString& dir2, int mode)
1087{ 1087{
1088 QString dir = QDir::convertSeparators( dir2 ); 1088 QString dir = QDir::convertSeparators( dir2 );
1089#if 0 1089#if 0
1090 //LR 1090 //LR
1091 1091
1092 // we want an absolute path 1092 // we want an absolute path
1093 if (dir.at(0) != '/') 1093 if (dir.at(0) != '/')
1094 return false; 1094 return false;
1095 1095
1096 QString target = dir; 1096 QString target = dir;
1097 uint len = target.length(); 1097 uint len = target.length();
1098 1098
1099 // append trailing slash if missing 1099 // append trailing slash if missing
1100 if (dir.at(len - 1) != '/') 1100 if (dir.at(len - 1) != '/')
1101 target += '/'; 1101 target += '/';
1102 1102
1103 QString base(""); 1103 QString base("");
1104 uint i = 1; 1104 uint i = 1;
1105 1105
1106 while( i < len ) 1106 while( i < len )
1107 { 1107 {
1108//US struct stat st; 1108//US struct stat st;
1109 int pos = target.find('/', i); 1109 int pos = target.find('/', i);
1110 base += target.mid(i - 1, pos - i + 1); 1110 base += target.mid(i - 1, pos - i + 1);
1111 QCString baseEncoded = QFile::encodeName(base); 1111 QCString baseEncoded = QFile::encodeName(base);
1112 // bail out if we encountered a problem 1112 // bail out if we encountered a problem
1113//US if (stat(baseEncoded, &st) != 0) 1113//US if (stat(baseEncoded, &st) != 0)
1114 QFileInfo baseEncodedInfo(baseEncoded); 1114 QFileInfo baseEncodedInfo(baseEncoded);
1115 if (!baseEncodedInfo.exists()) 1115 if (!baseEncodedInfo.exists())
1116 { 1116 {
1117 // Directory does not exist.... 1117 // Directory does not exist....
1118 // Or maybe a dangling symlink ? 1118 // Or maybe a dangling symlink ?
1119//US if (lstat(baseEncoded, &st) == 0) 1119//US if (lstat(baseEncoded, &st) == 0)
1120 if (baseEncodedInfo.isSymLink()) { 1120 if (baseEncodedInfo.isSymLink()) {
1121//US (void)unlink(baseEncoded); // try removing 1121//US (void)unlink(baseEncoded); // try removing
1122 QFile(baseEncoded).remove(); 1122 QFile(baseEncoded).remove();
1123 } 1123 }
1124 1124
1125 //US if ( mkdir(baseEncoded, (mode_t) mode) != 0) 1125 //US if ( mkdir(baseEncoded, (mode_t) mode) != 0)
1126 QDir dirObj; 1126 QDir dirObj;
1127 if ( dirObj.mkdir(baseEncoded) != true ) 1127 if ( dirObj.mkdir(baseEncoded) != true )
1128 { 1128 {
1129 //US perror("trying to create local folder"); 1129 //US perror("trying to create local folder");
1130 return false; // Couldn't create it :-( 1130 return false; // Couldn't create it :-(
1131 } 1131 }
1132 } 1132 }
1133 i = pos + 1; 1133 i = pos + 1;
1134 } 1134 }
1135 return true; 1135 return true;
1136#endif 1136#endif
1137 1137
1138 // ******************************************** 1138 // ********************************************
1139 // new code for WIN32 1139 // new code for WIN32
1140 QDir dirObj; 1140 QDir dirObj;
1141 1141
1142 1142
1143 // we want an absolute path 1143 // we want an absolute path
1144#ifndef _WIN32_ 1144#ifndef _WIN32_
1145 if (dir.at(0) != '/') 1145 if (dir.at(0) != '/')
1146 return false; 1146 return false;
1147#endif 1147#endif
1148 1148
1149 QString target = dir; 1149 QString target = dir;
1150 uint len = target.length(); 1150 uint len = target.length();
1151#ifndef _WIN32_ 1151#ifndef _WIN32_
1152 // append trailing slash if missing 1152 // append trailing slash if missing
1153 if (dir.at(len - 1) != '/') 1153 if (dir.at(len - 1) != '/')
1154 target += '/'; 1154 target += '/';
1155#endif 1155#endif
1156 1156
1157 QString base(""); 1157 QString base("");
1158 uint i = 1; 1158 uint i = 1;
1159 1159
1160 while( i < len ) 1160 while( i < len )
1161 { 1161 {
1162//US struct stat st; 1162//US struct stat st;
1163#ifndef _WIN32_ 1163#ifndef _WIN32_
1164 int pos = target.find('/', i); 1164 int pos = target.find('/', i);
1165#else 1165#else
1166 int pos = target.find('\\', i); 1166 int pos = target.find('\\', i);
1167#endif 1167#endif
1168 if ( pos < 0 ) 1168 if ( pos < 0 )
1169 return true; 1169 return true;
1170 base += target.mid(i - 1, pos - i + 1); 1170 base += target.mid(i - 1, pos - i + 1);
1171 //QMessageBox::information( 0,"cap111", base, 1 ); 1171 //QMessageBox::information( 0,"cap111", base, 1 );
1172/*US 1172/*US
1173 QCString baseEncoded = QFile::encodeName(base); 1173 QCString baseEncoded = QFile::encodeName(base);
1174 // bail out if we encountered a problem 1174 // bail out if we encountered a problem
1175 if (stat(baseEncoded, &st) != 0) 1175 if (stat(baseEncoded, &st) != 0)
1176 { 1176 {
1177 // Directory does not exist.... 1177 // Directory does not exist....
1178 // Or maybe a dangling symlink ? 1178 // Or maybe a dangling symlink ?
1179 if (lstat(baseEncoded, &st) == 0) 1179 if (lstat(baseEncoded, &st) == 0)
1180 (void)unlink(baseEncoded); // try removing 1180 (void)unlink(baseEncoded); // try removing
1181 1181
1182 1182
1183 if ( mkdir(baseEncoded, (mode_t) mode) != 0) { 1183 if ( mkdir(baseEncoded, (mode_t) mode) != 0) {
1184 perror("trying to create local folder"); 1184 perror("trying to create local folder");
1185 return false; // Couldn't create it :-( 1185 return false; // Couldn't create it :-(
1186 } 1186 }
1187 } 1187 }
1188*/ 1188*/
1189 1189
1190 if (dirObj.exists(base) == false) 1190 if (dirObj.exists(base) == false)
1191 { 1191 {
1192 //qDebug("KStandardDirs::makeDir try to create : %s" , base.latin1()); 1192 //qDebug("KStandardDirs::makeDir try to create : %s" , base.latin1());
1193 if (dirObj.mkdir(base) != true) 1193 if (dirObj.mkdir(base) != true)
1194 { 1194 {
1195 qDebug("KStandardDirs::makeDir could not create: %s" , base.latin1()); 1195 qDebug("KStandardDirs::makeDir could not create: %s" , base.latin1());
1196 return false; 1196 return false;
1197 } 1197 }
1198 } 1198 }
1199 1199
1200 i = pos + 1; 1200 i = pos + 1;
1201 } 1201 }
1202 return true; 1202 return true;
1203 1203
1204} 1204}
1205 1205
1206static QString readEnvPath(const char *env) 1206static QString readEnvPath(const char *env)
1207{ 1207{
1208 //#ifdef _WIN32_ 1208 //#ifdef _WIN32_
1209 // return ""; 1209 // return "";
1210 //#else 1210 //#else
1211 QCString c_path; 1211 QCString c_path;
1212 if ( getenv(env) != NULL ) 1212 if ( getenv(env) != NULL )
1213 c_path = QString ( getenv(env) ); 1213 c_path = QString ( getenv(env) );
1214 if (c_path.isEmpty()) 1214 if (c_path.isEmpty())
1215 return QString::null; 1215 return QString::null;
1216 return QFile::decodeName(c_path); 1216 return QFile::decodeName(c_path);
1217 //#endif 1217 //#endif
1218 1218
1219} 1219}
1220 1220
1221void KStandardDirs::addKDEDefaults() 1221void KStandardDirs::addKDEDefaults()
1222{ 1222{
1223 1223
1224 //qDebug("ERROR: KStandardDirs::addKDEDefaults() called "); 1224 //qDebug("ERROR: KStandardDirs::addKDEDefaults() called ");
1225 //return; 1225 //return;
1226 QStringList kdedirList; 1226 QStringList kdedirList;
1227 1227
1228 // begin KDEDIRS 1228 // begin KDEDIRS
1229 QString kdedirs = readEnvPath("MICROKDEDIRS"); 1229 QString kdedirs = readEnvPath("MICROKDEDIRS");
1230 if (!kdedirs.isEmpty()) 1230 if (!kdedirs.isEmpty())
1231 { 1231 {
1232 tokenize(kdedirList, kdedirs, ":"); 1232 tokenize(kdedirList, kdedirs, ":");
1233 } 1233 }
1234 else 1234 else
1235 { 1235 {
1236 QString kdedir = readEnvPath("MICROKDEDIR"); 1236 QString kdedir = readEnvPath("MICROKDEDIR");
1237 if (!kdedir.isEmpty()) 1237 if (!kdedir.isEmpty())
1238 { 1238 {
1239 kdedir = KShell::tildeExpand(kdedir); 1239 kdedir = KShell::tildeExpand(kdedir);
1240 kdedirList.append(kdedir); 1240 kdedirList.append(kdedir);
1241 } 1241 }
1242 } 1242 }
1243//US kdedirList.append(KDEDIR); 1243//US kdedirList.append(KDEDIR);
1244//US for embedded, add qtopia dir as kdedir 1244//US for embedded, add qtopia dir as kdedir
1245 1245
1246#ifndef DESKTOP_VERSION 1246#ifndef DESKTOP_VERSION
1247 QString tmp = readEnvPath("QPEDIR"); 1247 QString tmp = readEnvPath("QPEDIR");
1248 if (!tmp.isEmpty()) 1248 if (!tmp.isEmpty())
1249 kdedirList.append(tmp); 1249 kdedirList.append(tmp);
1250 1250
1251 tmp = readEnvPath("QTDIR"); 1251 tmp = readEnvPath("QTDIR");
1252 if (!tmp.isEmpty()) 1252 if (!tmp.isEmpty())
1253 kdedirList.append(tmp); 1253 kdedirList.append(tmp);
1254 1254
1255 tmp = readEnvPath("OPIEDIR"); 1255 tmp = readEnvPath("OPIEDIR");
1256 if (!tmp.isEmpty()) 1256 if (!tmp.isEmpty())
1257 kdedirList.append(tmp); 1257 kdedirList.append(tmp);
1258 1258
1259#endif 1259#endif
1260 1260
1261#ifdef __KDE_EXECPREFIX 1261#ifdef __KDE_EXECPREFIX
1262 QString execPrefix(__KDE_EXECPREFIX); 1262 QString execPrefix(__KDE_EXECPREFIX);
1263 if (execPrefix!="NONE") 1263 if (execPrefix!="NONE")
1264 kdedirList.append(execPrefix); 1264 kdedirList.append(execPrefix);
1265#endif 1265#endif
1266 1266
1267 QString localKdeDir; 1267 QString localKdeDir;
1268 1268
1269//US if (getuid()) 1269//US if (getuid())
1270 if (true) 1270 if (true)
1271 { 1271 {
1272 localKdeDir = readEnvPath("MICROKDEHOME"); 1272 localKdeDir = readEnvPath("MICROKDEHOME");
1273 if (!localKdeDir.isEmpty()) 1273 if (!localKdeDir.isEmpty())
1274 { 1274 {
1275#ifdef _WIN32_ 1275#ifdef _WIN32_
1276 if (localKdeDir.at(localKdeDir.length()-1) != '\\') 1276 if (localKdeDir.at(localKdeDir.length()-1) != '\\')
1277 localKdeDir += '\\'; 1277 localKdeDir += '\\';
1278#else 1278#else
1279 if (localKdeDir.at(localKdeDir.length()-1) != '/') 1279 if (localKdeDir.at(localKdeDir.length()-1) != '/')
1280 localKdeDir += '/'; 1280 localKdeDir += '/';
1281#endif 1281#endif
1282 //QMessageBox::information( 0,"localKdeDir",localKdeDir, 1 ); 1282 //QMessageBox::information( 0,"localKdeDir",localKdeDir, 1 );
1283 } 1283 }
1284 else 1284 else
1285 { 1285 {
1286 localKdeDir = QDir::homeDirPath() + "/kdepim/"; 1286 KConfig cfg ( QDir::homeDirPath() + "/.microkdehome" );
1287 cfg.setGroup("Global");
1288 localKdeDir = cfg.readEntry( "MICROKDEHOME", QDir::homeDirPath() + "/kdepim/" );
1287 } 1289 }
1288 } 1290 }
1289 else 1291 else
1290 { 1292 {
1291 // We treat root different to prevent root messing up the 1293 // We treat root different to prevent root messing up the
1292 // file permissions in the users home directory. 1294 // file permissions in the users home directory.
1293 localKdeDir = readEnvPath("MICROKDEROOTHOME"); 1295 localKdeDir = readEnvPath("MICROKDEROOTHOME");
1294 if (!localKdeDir.isEmpty()) 1296 if (!localKdeDir.isEmpty())
1295 { 1297 {
1296 if (localKdeDir.at(localKdeDir.length()-1) != '/') 1298 if (localKdeDir.at(localKdeDir.length()-1) != '/')
1297 localKdeDir += '/'; 1299 localKdeDir += '/';
1298 } 1300 }
1299 else 1301 else
1300 { 1302 {
1301//US struct passwd *pw = getpwuid(0); 1303//US struct passwd *pw = getpwuid(0);
1302//US localKdeDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.microkde/"; 1304//US localKdeDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.microkde/";
1303 qDebug("KStandardDirs::addKDEDefaults: 1 has to be fixed"); 1305 qDebug("KStandardDirs::addKDEDefaults: 1 has to be fixed");
1304 } 1306 }
1305 1307
1306 } 1308 }
1307 1309
1308//US localKdeDir = appDir(); 1310//US localKdeDir = appDir();
1309 1311
1310//US 1312//US
1311// qDebug("KStandardDirs::addKDEDefaults: localKdeDir=%s", localKdeDir.latin1()); 1313// qDebug("KStandardDirs::addKDEDefaults: localKdeDir=%s", localKdeDir.latin1());
1312 if (localKdeDir != "-/") 1314 if (localKdeDir != "-/")
1313 { 1315 {
1314 localKdeDir = KShell::tildeExpand(localKdeDir); 1316 localKdeDir = KShell::tildeExpand(localKdeDir);
1315 addPrefix(localKdeDir); 1317 addPrefix(localKdeDir);
1316 } 1318 }
1317 1319
1318 for (QStringList::ConstIterator it = kdedirList.begin(); 1320 for (QStringList::ConstIterator it = kdedirList.begin();
1319 it != kdedirList.end(); it++) 1321 it != kdedirList.end(); it++)
1320 { 1322 {
1321 QString dir = KShell::tildeExpand(*it); 1323 QString dir = KShell::tildeExpand(*it);
1322 addPrefix(dir); 1324 addPrefix(dir);
1323 } 1325 }
1324 // end KDEDIRS 1326 // end KDEDIRS
1325 1327
1326 // begin XDG_CONFIG_XXX 1328 // begin XDG_CONFIG_XXX
1327 QStringList xdgdirList; 1329 QStringList xdgdirList;
1328 QString xdgdirs = readEnvPath("XDG_CONFIG_DIRS"); 1330 QString xdgdirs = readEnvPath("XDG_CONFIG_DIRS");
1329 if (!xdgdirs.isEmpty()) 1331 if (!xdgdirs.isEmpty())
1330 { 1332 {
1331 tokenize(xdgdirList, xdgdirs, ":"); 1333 tokenize(xdgdirList, xdgdirs, ":");
1332 } 1334 }
1333 else 1335 else
1334 { 1336 {
1335 xdgdirList.clear(); 1337 xdgdirList.clear();
1336 xdgdirList.append("/etc/xdg"); 1338 xdgdirList.append("/etc/xdg");
1337 } 1339 }
1338 1340
1339 QString localXdgDir = readEnvPath("XDG_CONFIG_HOME"); 1341 QString localXdgDir = readEnvPath("XDG_CONFIG_HOME");
1340 if (!localXdgDir.isEmpty()) 1342 if (!localXdgDir.isEmpty())
1341 { 1343 {
1342 if (localXdgDir.at(localXdgDir.length()-1) != '/') 1344 if (localXdgDir.at(localXdgDir.length()-1) != '/')
1343 localXdgDir += '/'; 1345 localXdgDir += '/';
1344 } 1346 }
1345 else 1347 else
1346 { 1348 {
1347//US if (getuid()) 1349//US if (getuid())
1348 if (true) 1350 if (true)
1349 { 1351 {
1350 localXdgDir = QDir::homeDirPath() + "/.config/"; 1352 localXdgDir = QDir::homeDirPath() + "/.config/";
1351 } 1353 }
1352 else 1354 else
1353 { 1355 {
1354//US struct passwd *pw = getpwuid(0); 1356//US struct passwd *pw = getpwuid(0);
1355//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.config/"; 1357//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.config/";
1356 qDebug("KStandardDirs::addKDEDefaults: 2 has to be fixed"); 1358 qDebug("KStandardDirs::addKDEDefaults: 2 has to be fixed");
1357 } 1359 }
1358 } 1360 }
1359 1361
1360 localXdgDir = KShell::tildeExpand(localXdgDir); 1362 localXdgDir = KShell::tildeExpand(localXdgDir);
1361 addXdgConfigPrefix(localXdgDir); 1363 addXdgConfigPrefix(localXdgDir);
1362 1364
1363 for (QStringList::ConstIterator it = xdgdirList.begin(); 1365 for (QStringList::ConstIterator it = xdgdirList.begin();
1364 it != xdgdirList.end(); it++) 1366 it != xdgdirList.end(); it++)
1365 { 1367 {
1366 QString dir = KShell::tildeExpand(*it); 1368 QString dir = KShell::tildeExpand(*it);
1367 addXdgConfigPrefix(dir); 1369 addXdgConfigPrefix(dir);
1368 } 1370 }
1369 // end XDG_CONFIG_XXX 1371 // end XDG_CONFIG_XXX
1370 1372
1371 // begin XDG_DATA_XXX 1373 // begin XDG_DATA_XXX
1372 xdgdirs = readEnvPath("XDG_DATA_DIRS"); 1374 xdgdirs = readEnvPath("XDG_DATA_DIRS");
1373 if (!xdgdirs.isEmpty()) 1375 if (!xdgdirs.isEmpty())
1374 { 1376 {
1375 tokenize(xdgdirList, xdgdirs, ":"); 1377 tokenize(xdgdirList, xdgdirs, ":");
1376 } 1378 }
1377 else 1379 else
1378 { 1380 {
1379 xdgdirList.clear(); 1381 xdgdirList.clear();
1380 for (QStringList::ConstIterator it = kdedirList.begin(); 1382 for (QStringList::ConstIterator it = kdedirList.begin();
1381 it != kdedirList.end(); it++) 1383 it != kdedirList.end(); it++)
1382 { 1384 {
1383 QString dir = *it; 1385 QString dir = *it;
1384 if (dir.at(dir.length()-1) != '/') 1386 if (dir.at(dir.length()-1) != '/')
1385 dir += '/'; 1387 dir += '/';
1386 xdgdirList.append(dir+"share/"); 1388 xdgdirList.append(dir+"share/");
1387 } 1389 }
1388 1390
1389 xdgdirList.append("/usr/local/share/"); 1391 xdgdirList.append("/usr/local/share/");
1390 xdgdirList.append("/usr/share/"); 1392 xdgdirList.append("/usr/share/");
1391 } 1393 }
1392 1394
1393 localXdgDir = readEnvPath("XDG_DATA_HOME"); 1395 localXdgDir = readEnvPath("XDG_DATA_HOME");
1394 if (!localXdgDir.isEmpty()) 1396 if (!localXdgDir.isEmpty())
1395 { 1397 {
1396 if (localXdgDir.at(localXdgDir.length()-1) != '/') 1398 if (localXdgDir.at(localXdgDir.length()-1) != '/')
1397 localXdgDir += '/'; 1399 localXdgDir += '/';
1398 } 1400 }
1399 else 1401 else
1400 { 1402 {
1401//US if (getuid()) 1403//US if (getuid())
1402 if (true) 1404 if (true)
1403 { 1405 {
1404 localXdgDir = QDir::homeDirPath() + "/.local/share/"; 1406 localXdgDir = QDir::homeDirPath() + "/.local/share/";
1405 } 1407 }
1406 else 1408 else
1407 { 1409 {
1408//US struct passwd *pw = getpwuid(0); 1410//US struct passwd *pw = getpwuid(0);
1409//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.local/share/"; 1411//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.local/share/";
1410 qDebug("KStandardDirs::addKDEDefaults: 3 has to be fixed"); 1412 qDebug("KStandardDirs::addKDEDefaults: 3 has to be fixed");
1411 } 1413 }
1412 } 1414 }
1413 1415
1414 localXdgDir = KShell::tildeExpand(localXdgDir); 1416 localXdgDir = KShell::tildeExpand(localXdgDir);
1415 addXdgDataPrefix(localXdgDir); 1417 addXdgDataPrefix(localXdgDir);
1416 1418
1417 for (QStringList::ConstIterator it = xdgdirList.begin(); 1419 for (QStringList::ConstIterator it = xdgdirList.begin();
1418 it != xdgdirList.end(); it++) 1420 it != xdgdirList.end(); it++)
1419 { 1421 {
1420 QString dir = KShell::tildeExpand(*it); 1422 QString dir = KShell::tildeExpand(*it);
1421 1423
1422 addXdgDataPrefix(dir); 1424 addXdgDataPrefix(dir);
1423 } 1425 }
1424 // end XDG_DATA_XXX 1426 // end XDG_DATA_XXX
1425 1427
1426 1428
1427 uint index = 0; 1429 uint index = 0;
1428 while (types[index] != 0) { 1430 while (types[index] != 0) {
1429 addResourceType(types[index], kde_default(types[index])); 1431 addResourceType(types[index], kde_default(types[index]));
1430 index++; 1432 index++;
1431 } 1433 }
1432 1434
1433 addResourceDir("home", QDir::homeDirPath()); 1435 addResourceDir("home", QDir::homeDirPath());
1434} 1436}
1435 1437
1436void KStandardDirs::checkConfig() const 1438void KStandardDirs::checkConfig() const
1437{ 1439{
1438/*US 1440/*US
1439 if (!addedCustoms && KGlobal::_instance && KGlobal::_instance->_config) 1441 if (!addedCustoms && KGlobal::_instance && KGlobal::_instance->_config)
1440 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::_instance->_config); 1442 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::_instance->_config);
1441*/ 1443*/
1442 if (!addedCustoms && KGlobal::config()) 1444 if (!addedCustoms && KGlobal::config())
1443 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::config()); 1445 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::config());
1444} 1446}
1445 1447
1446bool KStandardDirs::addCustomized(KConfig *config) 1448bool KStandardDirs::addCustomized(KConfig *config)
1447{ 1449{
1448 if (addedCustoms) // there are already customized entries 1450 if (addedCustoms) // there are already customized entries
1449 return false; // we just quite and hope they are the right ones 1451 return false; // we just quite and hope they are the right ones
1450 1452
1451 // save the numbers of config directories. If this changes, 1453 // save the numbers of config directories. If this changes,
1452 // we will return true to give KConfig a chance to reparse 1454 // we will return true to give KConfig a chance to reparse
1453 uint configdirs = resourceDirs("config").count(); 1455 uint configdirs = resourceDirs("config").count();
1454 1456
1455 // reading the prefixes in 1457 // reading the prefixes in
1456 QString oldGroup = config->group(); 1458 QString oldGroup = config->group();
1457 config->setGroup("Directories"); 1459 config->setGroup("Directories");
1458 1460
1459 QStringList list; 1461 QStringList list;
1460 QStringList::ConstIterator it; 1462 QStringList::ConstIterator it;
1461 list = config->readListEntry("prefixes"); 1463 list = config->readListEntry("prefixes");
1462 for (it = list.begin(); it != list.end(); it++) 1464 for (it = list.begin(); it != list.end(); it++)
1463 addPrefix(*it); 1465 addPrefix(*it);
1464 1466
1465 // iterating over all entries in the group Directories 1467 // iterating over all entries in the group Directories
1466 // to find entries that start with dir_$type 1468 // to find entries that start with dir_$type
1467/*US 1469/*US
1468 QMap<QString, QString> entries = config->entryMap("Directories"); 1470 QMap<QString, QString> entries = config->entryMap("Directories");
1469 1471
1470 QMap<QString, QString>::ConstIterator it2; 1472 QMap<QString, QString>::ConstIterator it2;
1471 for (it2 = entries.begin(); it2 != entries.end(); it2++) 1473 for (it2 = entries.begin(); it2 != entries.end(); it2++)
1472 { 1474 {
1473 QString key = it2.key(); 1475 QString key = it2.key();
1474 if (key.left(4) == "dir_") { 1476 if (key.left(4) == "dir_") {
1475 // generate directory list, there may be more than 1. 1477 // generate directory list, there may be more than 1.
1476 QStringList dirs = QStringList::split(',', *it2); 1478 QStringList dirs = QStringList::split(',', *it2);
1477 QStringList::Iterator sIt(dirs.begin()); 1479 QStringList::Iterator sIt(dirs.begin());
1478 QString resType = key.mid(4, key.length()); 1480 QString resType = key.mid(4, key.length());
1479 for (; sIt != dirs.end(); ++sIt) { 1481 for (; sIt != dirs.end(); ++sIt) {
1480 addResourceDir(resType.latin1(), *sIt); 1482 addResourceDir(resType.latin1(), *sIt);
1481 } 1483 }
1482 } 1484 }
1483 } 1485 }
1484 1486
1485 // Process KIOSK restrictions. 1487 // Process KIOSK restrictions.
1486 config->setGroup("KDE Resource Restrictions"); 1488 config->setGroup("KDE Resource Restrictions");
1487 entries = config->entryMap("KDE Resource Restrictions"); 1489 entries = config->entryMap("KDE Resource Restrictions");
1488 for (it2 = entries.begin(); it2 != entries.end(); it2++) 1490 for (it2 = entries.begin(); it2 != entries.end(); it2++)
1489 { 1491 {
1490 QString key = it2.key(); 1492 QString key = it2.key();
1491 if (!config->readBoolEntry(key, true)) 1493 if (!config->readBoolEntry(key, true))
1492 { 1494 {
1493 d->restrictionsActive = true; 1495 d->restrictionsActive = true;
1494 d->restrictions.insert(key.latin1(), &d->restrictionsActive); // Anything will do 1496 d->restrictions.insert(key.latin1(), &d->restrictionsActive); // Anything will do
1495 dircache.remove(key.latin1()); 1497 dircache.remove(key.latin1());
1496 } 1498 }
1497 } 1499 }
1498*/ 1500*/
1499 // save it for future calls - that will return 1501 // save it for future calls - that will return
1500 addedCustoms = true; 1502 addedCustoms = true;
1501 config->setGroup(oldGroup); 1503 config->setGroup(oldGroup);
1502 1504
1503 // return true if the number of config dirs changed 1505 // return true if the number of config dirs changed
1504 return (resourceDirs("config").count() != configdirs); 1506 return (resourceDirs("config").count() != configdirs);
1505} 1507}
1506 1508
1507QString KStandardDirs::localkdedir() const 1509QString KStandardDirs::localkdedir() const
1508{ 1510{
1509 // Return the prefix to use for saving 1511 // Return the prefix to use for saving
1510 return prefixes.first(); 1512 return prefixes.first();
1511} 1513}
1512 1514
1513QString KStandardDirs::localxdgdatadir() const 1515QString KStandardDirs::localxdgdatadir() const
1514{ 1516{
1515 // Return the prefix to use for saving 1517 // Return the prefix to use for saving
1516 return d->xdgdata_prefixes.first(); 1518 return d->xdgdata_prefixes.first();
1517} 1519}
1518 1520
1519QString KStandardDirs::localxdgconfdir() const 1521QString KStandardDirs::localxdgconfdir() const
1520{ 1522{
1521 // Return the prefix to use for saving 1523 // Return the prefix to use for saving
1522 return d->xdgconf_prefixes.first(); 1524 return d->xdgconf_prefixes.first();
1523} 1525}
1524 1526
1525void KStandardDirs::setAppDir( const QString &appDir ) 1527void KStandardDirs::setAppDir( const QString &appDir )
1526{ 1528{
1527 mAppDir = appDir; 1529 mAppDir = appDir;
1528 1530
1529 if ( mAppDir.right( 1 ) != "/" ) 1531 if ( mAppDir.right( 1 ) != "/" )
1530 mAppDir += "/"; 1532 mAppDir += "/";
1531} 1533}
1532 1534
1533QString KStandardDirs::appDir() 1535QString KStandardDirs::appDir()
1534{ 1536{
1535 return mAppDir; 1537 return mAppDir;
1536} 1538}
1537 1539
1538// just to make code more readable without macros 1540// just to make code more readable without macros
1539QString locate( const char *type, 1541QString locate( const char *type,
1540 const QString& filename/*US , const KInstance* inst*/ ) 1542 const QString& filename/*US , const KInstance* inst*/ )
1541{ 1543{
1542//US return inst->dirs()->findResource(type, filename); 1544//US return inst->dirs()->findResource(type, filename);
1543 return KGlobal::dirs()->findResource(type, filename); 1545 return KGlobal::dirs()->findResource(type, filename);
1544} 1546}
1545 1547
1546QString locateLocal( const char *type, 1548QString locateLocal( const char *type,
1547 const QString& filename/*US , const KInstance* inst*/ ) 1549 const QString& filename/*US , const KInstance* inst*/ )
1548{ 1550{
1549 1551
1550 QString path = locateLocal(type, filename, true /*US, inst*/); 1552 QString path = locateLocal(type, filename, true /*US, inst*/);
1551 1553
1552 1554
1553/* 1555/*
1554 static int ccc = 0; 1556 static int ccc = 0;
1555 ++ccc; 1557 ++ccc;
1556 if ( ccc > 13 ) 1558 if ( ccc > 13 )
1557 abort(); 1559 abort();
1558*/ 1560*/
1559 //qDebug("locatelocal: %s" , path.latin1()); 1561 //qDebug("locatelocal: %s" , path.latin1());
1560 return path; 1562 return path;
1561 1563
1562/*US why do we put all files into one directory. It is quit complicated. 1564/*US why do we put all files into one directory. It is quit complicated.
1563why not staying with the original directorystructure ? 1565why not staying with the original directorystructure ?
1564 1566
1565 1567
1566 QString escapedFilename = filename; 1568 QString escapedFilename = filename;
1567 escapedFilename.replace( QRegExp( "/" ), "_" ); 1569 escapedFilename.replace( QRegExp( "/" ), "_" );
1568 1570
1569 QString path = KStandardDirs::appDir() + type + "_" + escapedFilename; 1571 QString path = KStandardDirs::appDir() + type + "_" + escapedFilename;
1570 1572
1571 kdDebug() << "locate: '" << path << "'" << endl; 1573 kdDebug() << "locate: '" << path << "'" << endl;
1572 qDebug("locate: %s" , path.latin1()); 1574 qDebug("locate: %s" , path.latin1());
1573 return path; 1575 return path;
1574*/ 1576*/
1575//US so my proposal is this: 1577//US so my proposal is this:
1576 1578
1577// QString escapedFilename = filename; 1579// QString escapedFilename = filename;
1578// escapedFilename.replace( QRegExp( "/" ), "_" ); 1580// escapedFilename.replace( QRegExp( "/" ), "_" );
1579 1581
1580#if 0 1582#if 0
1581#ifdef _WIN32_ 1583#ifdef _WIN32_
1582 QString path = QDir::convertSeparators(KStandardDirs::appDir() + type + "/" + filename); 1584 QString path = QDir::convertSeparators(KStandardDirs::appDir() + type + "/" + filename);
1583#else 1585#else
1584 QString path = KStandardDirs::appDir() + type + "/" + filename; 1586 QString path = KStandardDirs::appDir() + type + "/" + filename;
1585#endif 1587#endif
1586 1588
1587 //US Create the containing dir if needed 1589 //US Create the containing dir if needed
1588 QFileInfo fi ( path ); 1590 QFileInfo fi ( path );
1589 1591
1590 // QString dir=pathurl.directory(); 1592 // QString dir=pathurl.directory();
1591 //QMessageBox::information( 0,"path", path, 1 ); 1593 //QMessageBox::information( 0,"path", path, 1 );
1592 1594
1593#ifdef _WIN32_ 1595#ifdef _WIN32_
1594 KStandardDirs::makeDir(path); 1596 KStandardDirs::makeDir(path);
1595#else 1597#else
1596 KStandardDirs::makeDir(fi.dirPath( true )); 1598 KStandardDirs::makeDir(fi.dirPath( true ));
1597#endif 1599#endif
1598 1600
1599 qDebug("locate22: %s" , path.latin1()); 1601 qDebug("locate22: %s" , path.latin1());
1600 return path; 1602 return path;
1601 1603
1602#endif 1604#endif
1603 1605
1604} 1606}
1605 1607
1606QString locateLocal( const char *type, 1608QString locateLocal( const char *type,
1607 const QString& filename, bool createDir/*US , const KInstance* inst*/ ) 1609 const QString& filename, bool createDir/*US , const KInstance* inst*/ )
1608{ 1610{
1609 // try to find slashes. If there are some, we have to 1611 // try to find slashes. If there are some, we have to
1610 // create the subdir first 1612 // create the subdir first
1611 int slash = filename.findRev('/')+1; 1613 int slash = filename.findRev('/')+1;
1612 if (!slash) // only one filename 1614 if (!slash) // only one filename
1613 //USreturn inst->dirs()->saveLocation(type, QString::null, createDir) + filename; 1615 //USreturn inst->dirs()->saveLocation(type, QString::null, createDir) + filename;
1614 return KGlobal::dirs()->saveLocation(type, QString::null, createDir) + filename; 1616 return KGlobal::dirs()->saveLocation(type, QString::null, createDir) + filename;
1615 1617
1616 // split path from filename 1618 // split path from filename
1617 QString dir = filename.left(slash); 1619 QString dir = filename.left(slash);
1618 QString file = filename.mid(slash); 1620 QString file = filename.mid(slash);
1619//US return inst->dirs()->saveLocation(type, dir, createDir) + file; 1621//US return inst->dirs()->saveLocation(type, dir, createDir) + file;
1620 return KGlobal::dirs()->saveLocation(type, dir, createDir) + file; 1622 return KGlobal::dirs()->saveLocation(type, dir, createDir) + file;
1621 1623
1622 // *************************************************************** 1624 // ***************************************************************
1623#if 0 1625#if 0
1624 1626
1625/*US why do we put all files into one directory. It is quit complicated. 1627/*US why do we put all files into one directory. It is quit complicated.
1626why not staying with the original directorystructure ? 1628why not staying with the original directorystructure ?
1627 1629
1628 1630
1629 QString escapedFilename = filename; 1631 QString escapedFilename = filename;
1630 escapedFilename.replace( QRegExp( "/" ), "_" ); 1632 escapedFilename.replace( QRegExp( "/" ), "_" );
1631 1633
1632 QString path = KStandardDirs::appDir() + type + "_" + escapedFilename; 1634 QString path = KStandardDirs::appDir() + type + "_" + escapedFilename;
1633 1635
1634 kdDebug() << "locate: '" << path << "'" << endl; 1636 kdDebug() << "locate: '" << path << "'" << endl;
1635 qDebug("locate: %s" , path.latin1()); 1637 qDebug("locate: %s" , path.latin1());
1636 return path; 1638 return path;
1637*/ 1639*/
1638//US so my proposal is this: 1640//US so my proposal is this:
1639 1641
1640// QString escapedFilename = filename; 1642// QString escapedFilename = filename;
1641// escapedFilename.replace( QRegExp( "/" ), "_" ); 1643// escapedFilename.replace( QRegExp( "/" ), "_" );
1642 1644
1643#ifdef _WIN32_ 1645#ifdef _WIN32_
1644 QString path = QDir::convertSeparators(KStandardDirs::appDir() + type + "/" + filename); 1646 QString path = QDir::convertSeparators(KStandardDirs::appDir() + type + "/" + filename);
1645#else 1647#else
1646 QString path = KStandardDirs::appDir() + type + "/" + filename; 1648 QString path = KStandardDirs::appDir() + type + "/" + filename;
1647#endif 1649#endif
1648 1650
1649 //US Create the containing dir if needed 1651 //US Create the containing dir if needed
1650 KURL pathurl; 1652 KURL pathurl;
1651 pathurl.setPath(path); 1653 pathurl.setPath(path);
1652 QString dir=pathurl.directory(); 1654 QString dir=pathurl.directory();
1653 //QMessageBox::information( 0,"path", path, 1 ); 1655 //QMessageBox::information( 0,"path", path, 1 );
1654#ifdef _WIN32_ 1656#ifdef _WIN32_
1655 KStandardDirs::makeDir(path); 1657 KStandardDirs::makeDir(path);
1656#else 1658#else
1657 KStandardDirs::makeDir(dir); 1659 KStandardDirs::makeDir(dir);
1658#endif 1660#endif
1659 1661
1660 return path; 1662 return path;
1661#endif 1663#endif
1662} 1664}
diff --git a/microkde/kdecore/kstandarddirs.h b/microkde/kdecore/kstandarddirs.h
index c4e1108..bee864e 100644
--- a/microkde/kdecore/kstandarddirs.h
+++ b/microkde/kdecore/kstandarddirs.h
@@ -59,623 +59,623 @@ class KStandardDirsPrivate;
59 * may be even more. Under these prefixes there are several well 59 * may be even more. Under these prefixes there are several well
60 * defined suffixes where specific resource types are to be found. 60 * defined suffixes where specific resource types are to be found.
61 * For example, for the resource type "html" the suffixes could be 61 * For example, for the resource type "html" the suffixes could be
62 * share/doc/HTML and share/doc/kde/HTML. 62 * share/doc/HTML and share/doc/kde/HTML.
63 * So the search algorithm basicly appends to each prefix each registered 63 * So the search algorithm basicly appends to each prefix each registered
64 * suffix and tries to locate the file there. 64 * suffix and tries to locate the file there.
65 * To make the thing even more complex, it's also possible to register 65 * To make the thing even more complex, it's also possible to register
66 * absolute paths that KStandardDirs looks up after not finding anything 66 * absolute paths that KStandardDirs looks up after not finding anything
67 * in the former steps. They can be useful if the user wants to provide 67 * in the former steps. They can be useful if the user wants to provide
68 * specific directories that aren't in his $HOME/.kde directory for, 68 * specific directories that aren't in his $HOME/.kde directory for,
69 * for example, icons. 69 * for example, icons.
70 * 70 *
71 * @sect Standard resources that kdelibs allocates are: 71 * @sect Standard resources that kdelibs allocates are:
72 * 72 *
73 * @li apps - Applications menu (.desktop files). 73 * @li apps - Applications menu (.desktop files).
74 * @li cache - Cached information (e.g. favicons, web-pages) 74 * @li cache - Cached information (e.g. favicons, web-pages)
75 * @li cgi - CGIs to run from kdehelp. 75 * @li cgi - CGIs to run from kdehelp.
76 * @li config - Configuration files. 76 * @li config - Configuration files.
77 * @li data - Where applications store data. 77 * @li data - Where applications store data.
78 * @li exe - Executables in $prefix/bin. @ref findExe() for a function that takes $PATH into account. 78 * @li exe - Executables in $prefix/bin. @ref findExe() for a function that takes $PATH into account.
79 * @li html - HTML documentation. 79 * @li html - HTML documentation.
80 * @li icon - Icons, see @ref KIconLoader. 80 * @li icon - Icons, see @ref KIconLoader.
81 * @li lib - Libraries. 81 * @li lib - Libraries.
82 * @li locale - Translation files for @ref KLocale. 82 * @li locale - Translation files for @ref KLocale.
83 * @li mime - Mime types. 83 * @li mime - Mime types.
84 * @li module - Module (dynamically loaded library). 84 * @li module - Module (dynamically loaded library).
85 * @li qtplugins - Qt plugins (dynamically loaded objects for Qt) 85 * @li qtplugins - Qt plugins (dynamically loaded objects for Qt)
86 * @li services - Services. 86 * @li services - Services.
87 * @li servicetypes - Service types. 87 * @li servicetypes - Service types.
88 * @li scripts - Application scripting additions. 88 * @li scripts - Application scripting additions.
89 * @li sound - Application sounds. 89 * @li sound - Application sounds.
90 * @li templates - Templates 90 * @li templates - Templates
91 * @li wallpaper - Wallpapers. 91 * @li wallpaper - Wallpapers.
92 * @li tmp - Temporary files (specfic for both current host and current user) 92 * @li tmp - Temporary files (specfic for both current host and current user)
93 * @li socket - UNIX Sockets (specific for both current host and current user) 93 * @li socket - UNIX Sockets (specific for both current host and current user)
94 * 94 *
95 * A type that is added by the class @ref KApplication if you use it, is 95 * A type that is added by the class @ref KApplication if you use it, is
96 * appdata. This one makes the use of the type data a bit easier as it 96 * appdata. This one makes the use of the type data a bit easier as it
97 * appends the name of the application. 97 * appends the name of the application.
98 * So while you had to ::locate("data", "appname/filename") so you can 98 * So while you had to ::locate("data", "appname/filename") so you can
99 * also write ::locate("appdata", "filename") if your KApplication instance 99 * also write ::locate("appdata", "filename") if your KApplication instance
100 * is called "appname" (as set via KApplication's constructor or KAboutData, if 100 * is called "appname" (as set via KApplication's constructor or KAboutData, if
101 * you use the global KStandardDirs object @ref KGlobal::dirs()). 101 * you use the global KStandardDirs object @ref KGlobal::dirs()).
102 * Please note though that you cannot use the "appdata" 102 * Please note though that you cannot use the "appdata"
103 * type if you intend to use it in an applet for Kicker because 'appname' would 103 * type if you intend to use it in an applet for Kicker because 'appname' would
104 * be "Kicker" instead of the applet's name. Therefore, for applets, you've got 104 * be "Kicker" instead of the applet's name. Therefore, for applets, you've got
105 * to work around this by using ::locate("data", "appletname/filename"). 105 * to work around this by using ::locate("data", "appletname/filename").
106 * 106 *
107 * @sect KStandardDirs supports the following environment variables: 107 * @sect KStandardDirs supports the following environment variables:
108 * 108 *
109 * @li KDEDIRS: This may set an additional number of directory prefixes to 109 * @li KDEDIRS: This may set an additional number of directory prefixes to
110 * search for resources. The directories should be seperated 110 * search for resources. The directories should be seperated
111 * by ':'. The directories are searched in the order they are 111 * by ':'. The directories are searched in the order they are
112 * specified. 112 * specified.
113 * @li KDEDIR: Used for backwards compatibility. As KDEDIRS but only a single 113 * @li KDEDIR: Used for backwards compatibility. As KDEDIRS but only a single
114 * directory may be specified. If KDEDIRS is set KDEDIR is 114 * directory may be specified. If KDEDIRS is set KDEDIR is
115 * ignored. 115 * ignored.
116 * @li KDEHOME: The directory where changes are saved to. This directory is 116 * @li KDEHOME: The directory where changes are saved to. This directory is
117 * used to search for resources first. If KDEHOME is not 117 * used to search for resources first. If KDEHOME is not
118 * specified it defaults to "$HOME/.kde" 118 * specified it defaults to "$HOME/.kde"
119 * @li KDEROOTHOME: Like KDEHOME, but used for the root user. 119 * @li KDEROOTHOME: Like KDEHOME, but used for the root user.
120 * If KDEROOTHOME is not set it defaults to the .kde directory in the 120 * If KDEROOTHOME is not set it defaults to the .kde directory in the
121 * home directory of root, usually "/root/.kde". 121 * home directory of root, usually "/root/.kde".
122 * Note that the setting of $HOME is ignored in this case. 122 * Note that the setting of $HOME is ignored in this case.
123 * 123 *
124 * @see KGlobalSettings 124 * @see KGlobalSettings
125 */ 125 */
126class KStandardDirs 126class KStandardDirs
127{ 127{
128public: 128public:
129 /** 129 /**
130 * KStandardDirs' constructor. It just initializes the caches. 130 * KStandardDirs' constructor. It just initializes the caches.
131 **/ 131 **/
132 KStandardDirs( ); 132 KStandardDirs( );
133 133
134 /** 134 /**
135 * KStandardDirs' destructor. 135 * KStandardDirs' destructor.
136 */ 136 */
137 virtual ~KStandardDirs(); 137 virtual ~KStandardDirs();
138 138
139 /** 139 /**
140 * Adds another search dir to front of the @p fsstnd list. 140 * Adds another search dir to front of the @p fsstnd list.
141 * 141 *
142 * @li When compiling kdelibs, the prefix is added to this. 142 * @li When compiling kdelibs, the prefix is added to this.
143 * @li KDEDIRS or KDEDIR is taking into account 143 * @li KDEDIRS or KDEDIR is taking into account
144 * @li Additional dirs may be loaded from kdeglobals. 144 * @li Additional dirs may be loaded from kdeglobals.
145 * 145 *
146 * @param dir The directory to append relative paths to. 146 * @param dir The directory to append relative paths to.
147 */ 147 */
148 void addPrefix( const QString& dir ); 148 void addPrefix( const QString& dir );
149 149
150 /** 150 /**
151 * Adds another search dir to front of the XDG_CONFIG_XXX list 151 * Adds another search dir to front of the XDG_CONFIG_XXX list
152 * of prefixes. 152 * of prefixes.
153 * This prefix is only used for resources that start with "xdgconf-" 153 * This prefix is only used for resources that start with "xdgconf-"
154 * 154 *
155 * @param dir The directory to append relative paths to. 155 * @param dir The directory to append relative paths to.
156 */ 156 */
157 void addXdgConfigPrefix( const QString& dir ); 157 void addXdgConfigPrefix( const QString& dir );
158 158
159 /** 159 /**
160 * Adds another search dir to front of the XDG_DATA_XXX list 160 * Adds another search dir to front of the XDG_DATA_XXX list
161 * of prefixes. 161 * of prefixes.
162 * This prefix is only used for resources that start with "xdgdata-" 162 * This prefix is only used for resources that start with "xdgdata-"
163 * 163 *
164 * @param dir The directory to append relative paths to. 164 * @param dir The directory to append relative paths to.
165 */ 165 */
166 void addXdgDataPrefix( const QString& dir ); 166 void addXdgDataPrefix( const QString& dir );
167 167
168 /** 168 /**
169 * Adds suffixes for types. 169 * Adds suffixes for types.
170 * 170 *
171 * You may add as many as you need, but it is advised that there 171 * You may add as many as you need, but it is advised that there
172 * is exactly one to make writing definite. 172 * is exactly one to make writing definite.
173 * All basic types (@ref kde_default) are added by @ref addKDEDefaults(), 173 * All basic types (@ref kde_default) are added by @ref addKDEDefaults(),
174 * but for those you can add more relative paths as well. 174 * but for those you can add more relative paths as well.
175 * 175 *
176 * The later a suffix is added, the higher its priority. Note, that the 176 * The later a suffix is added, the higher its priority. Note, that the
177 * suffix should end with / but doesn't have to start with one (as prefixes 177 * suffix should end with / but doesn't have to start with one (as prefixes
178 * should end with one). So adding a suffix for app_pics would look 178 * should end with one). So adding a suffix for app_pics would look
179 * like KGlobal::dirs()->addResourceType("app_pics", "share/app/pics"); 179 * like KGlobal::dirs()->addResourceType("app_pics", "share/app/pics");
180 * 180 *
181 * @param type Specifies a short descriptive string to access 181 * @param type Specifies a short descriptive string to access
182 * files of this type. 182 * files of this type.
183 * @param relativename Specifies a directory relative to the root 183 * @param relativename Specifies a directory relative to the root
184 * of the KFSSTND. 184 * of the KFSSTND.
185 * @return true if successful, false otherwise. 185 * @return true if successful, false otherwise.
186 */ 186 */
187 bool addResourceType( const char *type, 187 bool addResourceType( const char *type,
188 const QString& relativename ); 188 const QString& relativename );
189 189
190 /** 190 /**
191 * Adds absolute path at the end of the search path for 191 * Adds absolute path at the end of the search path for
192 * particular types (for example in case of icons where 192 * particular types (for example in case of icons where
193 * the user specifies extra paths). 193 * the user specifies extra paths).
194 * 194 *
195 * You shouldn't need this 195 * You shouldn't need this
196 * function in 99% of all cases besides adding user-given 196 * function in 99% of all cases besides adding user-given
197 * paths. 197 * paths.
198 * 198 *
199 * @param type Specifies a short descriptive string to access files 199 * @param type Specifies a short descriptive string to access files
200 * of this type. 200 * of this type.
201 * @param absdir Points to directory where to look for this specific 201 * @param absdir Points to directory where to look for this specific
202 * type. Non-existant directories may be saved but pruned. 202 * type. Non-existant directories may be saved but pruned.
203 * @return true if successful, false otherwise. 203 * @return true if successful, false otherwise.
204 */ 204 */
205 bool addResourceDir( const char *type, 205 bool addResourceDir( const char *type,
206 const QString& absdir); 206 const QString& absdir);
207 207
208 /** 208 /**
209 * Tries to find a resource in the following order: 209 * Tries to find a resource in the following order:
210 * @li All PREFIX/\<relativename> paths (most recent first). 210 * @li All PREFIX/\<relativename> paths (most recent first).
211 * @li All absolute paths (most recent first). 211 * @li All absolute paths (most recent first).
212 * 212 *
213 * The filename should be a filename relative to the base dir 213 * The filename should be a filename relative to the base dir
214 * for resources. So is a way to get the path to libkdecore.la 214 * for resources. So is a way to get the path to libkdecore.la
215 * to findResource("lib", "libkdecore.la"). KStandardDirs will 215 * to findResource("lib", "libkdecore.la"). KStandardDirs will
216 * then look into the subdir lib of all elements of all prefixes 216 * then look into the subdir lib of all elements of all prefixes
217 * ($KDEDIRS) for a file libkdecore.la and return the path to 217 * ($KDEDIRS) for a file libkdecore.la and return the path to
218 * the first one it finds (e.g. /opt/kde/lib/libkdecore.la) 218 * the first one it finds (e.g. /opt/kde/lib/libkdecore.la)
219 * 219 *
220 * @param type The type of the wanted resource 220 * @param type The type of the wanted resource
221 * @param filename A relative filename of the resource. 221 * @param filename A relative filename of the resource.
222 * 222 *
223 * @return A full path to the filename specified in the second 223 * @return A full path to the filename specified in the second
224 * argument, or QString::null if not found. 224 * argument, or QString::null if not found.
225 */ 225 */
226 QString findResource( const char *type, 226 QString findResource( const char *type,
227 const QString& filename ) const; 227 const QString& filename ) const;
228 228
229 /** 229 /**
230 * Checks whether a resource is restricted as part of the KIOSK 230 * Checks whether a resource is restricted as part of the KIOSK
231 * framework. When a resource is restricted it means that user- 231 * framework. When a resource is restricted it means that user-
232 * specific files in the resource are ignored. 232 * specific files in the resource are ignored.
233 * 233 *
234 * E.g. by restricting the "wallpaper" resource, only system-wide 234 * E.g. by restricting the "wallpaper" resource, only system-wide
235 * installed wallpapers will be found by this class. Wallpapers 235 * installed wallpapers will be found by this class. Wallpapers
236 * installed under the $KDEHOME directory will be ignored. 236 * installed under the $KDEHOME directory will be ignored.
237 * 237 *
238 * @param type The type of the resource to check 238 * @param type The type of the resource to check
239 * @param relPath A relative path in the resource. 239 * @param relPath A relative path in the resource.
240 * 240 *
241 * @return True if the resource is restricted. 241 * @return True if the resource is restricted.
242 * @since 3.1 242 * @since 3.1
243 */ 243 */
244 bool isRestrictedResource( const char *type, 244 bool isRestrictedResource( const char *type,
245 const QString& relPath=QString::null ) const; 245 const QString& relPath=QString::null ) const;
246 246
247 /** 247 /**
248 * Returns a number that identifies this version of the resource. 248 * Returns a number that identifies this version of the resource.
249 * When a change is made to the resource this number will change. 249 * When a change is made to the resource this number will change.
250 * 250 *
251 * @param type The type of the wanted resource 251 * @param type The type of the wanted resource
252 * @param filename A relative filename of the resource. 252 * @param filename A relative filename of the resource.
253 * @param deep If true, all resources are taken into account 253 * @param deep If true, all resources are taken into account
254 * otherwise only the one returned by findResource(). 254 * otherwise only the one returned by findResource().
255 * 255 *
256 * @return A number identifying the current version of the 256 * @return A number identifying the current version of the
257 * resource. 257 * resource.
258 */ 258 */
259/*US 259/*US
260 Q_UINT32 calcResourceHash( const char *type, 260 Q_UINT32 calcResourceHash( const char *type,
261 const QString& filename, bool deep) const; 261 const QString& filename, bool deep) const;
262*/ 262*/
263 /** 263 /**
264 * Tries to find all directories whose names consist of the 264 * Tries to find all directories whose names consist of the
265 * specified type and a relative path. So would 265 * specified type and a relative path. So would
266 * findDirs("apps", "Settings") return 266 * findDirs("apps", "Settings") return
267 * @li /opt/kde/share/applnk/Settings/ 267 * @li /opt/kde/share/applnk/Settings/
268 * @li /home/joe/.kde/share/applnk/Settings/ 268 * @li /home/joe/.kde/share/applnk/Settings/
269 * 269 *
270 * Note that it appends / to the end of the directories, 270 * Note that it appends / to the end of the directories,
271 * so you can use this right away as directory names. 271 * so you can use this right away as directory names.
272 * 272 *
273 * @param type The type of the base directory. 273 * @param type The type of the base directory.
274 * @param reldir Relative directory. 274 * @param reldir Relative directory.
275 * 275 *
276 * @return A list of matching directories, or an empty 276 * @return A list of matching directories, or an empty
277 * list if the resource specified is not found. 277 * list if the resource specified is not found.
278 */ 278 */
279 QStringList findDirs( const char *type, 279 QStringList findDirs( const char *type,
280 const QString& reldir ) const; 280 const QString& reldir ) const;
281 281
282 /** 282 /**
283 * Tries to find the directory the file is in. 283 * Tries to find the directory the file is in.
284 * It works the same as @ref findResource(), but it doesn't 284 * It works the same as @ref findResource(), but it doesn't
285 * return the filename but the name of the directory. 285 * return the filename but the name of the directory.
286 * 286 *
287 * This way the application can access a couple of files 287 * This way the application can access a couple of files
288 * that have been installed into the same directory without 288 * that have been installed into the same directory without
289 * having to look for each file. 289 * having to look for each file.
290 * 290 *
291 * findResourceDir("lib", "libkdecore.la") would return the 291 * findResourceDir("lib", "libkdecore.la") would return the
292 * path of the subdir libkdecore.la is found first in 292 * path of the subdir libkdecore.la is found first in
293 * (e.g. /opt/kde/lib/) 293 * (e.g. /opt/kde/lib/)
294 * 294 *
295 * @param type The type of the wanted resource 295 * @param type The type of the wanted resource
296 * @param filename A relative filename of the resource. 296 * @param filename A relative filename of the resource.
297 * @return The directory where the file specified in the second 297 * @return The directory where the file specified in the second
298 * argument is located, or QString::null if the type 298 * argument is located, or QString::null if the type
299 * of resource specified is unknown or the resource 299 * of resource specified is unknown or the resource
300 * cannot be found. 300 * cannot be found.
301 */ 301 */
302 QString findResourceDir( const char *type, 302 QString findResourceDir( const char *type,
303 const QString& filename) const; 303 const QString& filename) const;
304 304
305 305
306 /** 306 /**
307 * Tries to find all resources with the specified type. 307 * Tries to find all resources with the specified type.
308 * 308 *
309 * The function will look into all specified directories 309 * The function will look into all specified directories
310 * and return all filenames in these directories. 310 * and return all filenames in these directories.
311 * 311 *
312 * @param type The type of resource to locate directories for. 312 * @param type The type of resource to locate directories for.
313 * @param filter Only accept filenames that fit to filter. The filter 313 * @param filter Only accept filenames that fit to filter. The filter
314 * may consist of an optional directory and a @ref QRegExp 314 * may consist of an optional directory and a @ref QRegExp
315 * wildcard expression. E.g. "images\*.jpg". Use QString::null 315 * wildcard expression. E.g. "images\*.jpg". Use QString::null
316 * if you do not want a filter. 316 * if you do not want a filter.
317 * @param recursive Specifies if the function should decend 317 * @param recursive Specifies if the function should decend
318 * into subdirectories. 318 * into subdirectories.
319 * @param uniq If specified, only return items which have 319 * @param uniq If specified, only return items which have
320 * unique suffixes - suppressing duplicated filenames. 320 * unique suffixes - suppressing duplicated filenames.
321 * 321 *
322 * @return A list of directories matching the resource specified, 322 * @return A list of directories matching the resource specified,
323 * or an empty list if the resource type is unknown. 323 * or an empty list if the resource type is unknown.
324 */ 324 */
325 QStringList findAllResources( const char *type, 325 QStringList findAllResources( const char *type,
326 const QString& filter = QString::null, 326 const QString& filter = QString::null,
327 bool recursive = false, 327 bool recursive = false,
328 bool uniq = false) const; 328 bool uniq = false) const;
329 329
330 /** 330 /**
331 * Tries to find all resources with the specified type. 331 * Tries to find all resources with the specified type.
332 * 332 *
333 * The function will look into all specified directories 333 * The function will look into all specified directories
334 * and return all filenames (full and relative paths) in 334 * and return all filenames (full and relative paths) in
335 * these directories. 335 * these directories.
336 * 336 *
337 * @param type The type of resource to locate directories for. 337 * @param type The type of resource to locate directories for.
338 * @param filter Only accept filenames that fit to filter. The filter 338 * @param filter Only accept filenames that fit to filter. The filter
339 * may consist of an optional directory and a @ref QRegExp 339 * may consist of an optional directory and a @ref QRegExp
340 * wildcard expression. E.g. "images\*.jpg". Use QString::null 340 * wildcard expression. E.g. "images\*.jpg". Use QString::null
341 * if you do not want a filter. 341 * if you do not want a filter.
342 * @param recursive Specifies if the function should decend 342 * @param recursive Specifies if the function should decend
343 * into subdirectories. 343 * into subdirectories.
344 * @param uniq If specified, only return items which have 344 * @param uniq If specified, only return items which have
345 * unique suffixes. 345 * unique suffixes.
346 * @param list Of relative paths for the given type. 346 * @param list Of relative paths for the given type.
347 * @param relPaths The list to store the relative paths into 347 * @param relPaths The list to store the relative paths into
348 * These can be used later to ::locate() the file 348 * These can be used later to ::locate() the file
349 * 349 *
350 * @return A list of directories matching the resource specified, 350 * @return A list of directories matching the resource specified,
351 * or an empty list if the resource type is unknown. 351 * or an empty list if the resource type is unknown.
352 */ 352 */
353 QStringList findAllResources( const char *type, 353 QStringList findAllResources( const char *type,
354 const QString& filter, 354 const QString& filter,
355 bool recursive, 355 bool recursive,
356 bool uniq, 356 bool uniq,
357 QStringList &relPaths) const; 357 QStringList &relPaths) const;
358 358
359 /** 359 /**
360 * Finds the executable in the system path. 360 * Finds the executable in the system path.
361 * 361 *
362 * A valid executable must 362 * A valid executable must
363 * be a file and have its executable bit set. 363 * be a file and have its executable bit set.
364 * 364 *
365 * @param appname The name of the executable file for which to search. 365 * @param appname The name of the executable file for which to search.
366 * @param pathstr The path which will be searched. If this is 366 * @param pathstr The path which will be searched. If this is
367 * null (default), the $PATH environment variable will 367 * null (default), the $PATH environment variable will
368 * be searched. 368 * be searched.
369 * @param ignoreExecBitIf true, an existing file will be returned 369 * @param ignoreExecBitIf true, an existing file will be returned
370 * even if its executable bit is not set. 370 * even if its executable bit is not set.
371 * 371 *
372 * @return The path of the executable. If it was not found, 372 * @return The path of the executable. If it was not found,
373 * it will return QString::null. 373 * it will return QString::null.
374 * @see findAllExe() 374 * @see findAllExe()
375 */ 375 */
376/*US 376/*US
377 static QString findExe( const QString& appname, 377 static QString findExe( const QString& appname,
378 const QString& pathstr=QString::null, 378 const QString& pathstr=QString::null,
379 bool ignoreExecBit=false ); 379 bool ignoreExecBit=false );
380*/ 380*/
381 381
382 /** 382 /**
383 * Finds all occurences of an executable in the system path. 383 * Finds all occurences of an executable in the system path.
384 * 384 *
385 * @param listWill be filled with the pathnames of all the 385 * @param listWill be filled with the pathnames of all the
386 * executables found. Will be empty if the executable 386 * executables found. Will be empty if the executable
387 * was not found. 387 * was not found.
388 * @param appnameThe name of the executable for which to 388 * @param appnameThe name of the executable for which to
389 * search. 389 * search.
390 * @param pathstrThe path list which will be searched. If this 390 * @param pathstrThe path list which will be searched. If this
391 * is 0 (default), the $PATH environment variable will 391 * is 0 (default), the $PATH environment variable will
392 * be searched. 392 * be searched.
393 * @param ignoreExecBit If true, an existing file will be returned 393 * @param ignoreExecBit If true, an existing file will be returned
394 * even if its executable bit is not set. 394 * even if its executable bit is not set.
395 * 395 *
396 * @return The number of executables found, 0 if none were found. 396 * @return The number of executables found, 0 if none were found.
397 * 397 *
398 * @seefindExe() 398 * @seefindExe()
399 */ 399 */
400 static int findAllExe( QStringList& list, const QString& appname, 400 static int findAllExe( QStringList& list, const QString& appname,
401 const QString& pathstr=QString::null, 401 const QString& pathstr=QString::null,
402 bool ignoreExecBit=false ); 402 bool ignoreExecBit=false );
403 403
404 /** 404 /**
405 * This function adds the defaults that are used by the current 405 * This function adds the defaults that are used by the current
406 * KDE version. 406 * KDE version.
407 * 407 *
408 * It's a series of @ref addResourceTypes() 408 * It's a series of @ref addResourceTypes()
409 * and @ref addPrefix() calls. 409 * and @ref addPrefix() calls.
410 * You normally wouldn't call this function because it's called 410 * You normally wouldn't call this function because it's called
411 * for you from @ref KGlobal. 411 * for you from @ref KGlobal.
412 */ 412 */
413 void addKDEDefaults(); 413 void addKDEDefaults();
414 414
415 /** 415 /**
416 * Reads customized entries out of the given config object and add 416 * Reads customized entries out of the given config object and add
417 * them via @ref addResourceDirs(). 417 * them via @ref addResourceDirs().
418 * 418 *
419 * @param config The object the entries are read from. This should 419 * @param config The object the entries are read from. This should
420 * contain global config files 420 * contain global config files
421 * @return true if new config paths have been added 421 * @return true if new config paths have been added
422 * from @p config. 422 * from @p config.
423 **/ 423 **/
424 bool addCustomized(KConfig *config); 424 bool addCustomized(KConfig *config);
425 425
426 /** 426 /**
427 * This function is used internally by almost all other function as 427 * This function is used internally by almost all other function as
428 * it serves and fills the directories cache. 428 * it serves and fills the directories cache.
429 * 429 *
430 * @param type The type of resource 430 * @param type The type of resource
431 * @return The list of possible directories for the specified @p type. 431 * @return The list of possible directories for the specified @p type.
432 * The function updates the cache if possible. If the resource 432 * The function updates the cache if possible. If the resource
433 * type specified is unknown, it will return an empty list. 433 * type specified is unknown, it will return an empty list.
434 * Note, that the directories are assured to exist beside the save 434 * Note, that the directories are assured to exist beside the save
435 * location, which may not exist, but is returned anyway. 435 * location, which may not exist, but is returned anyway.
436 */ 436 */
437 QStringList resourceDirs(const char *type) const; 437 QStringList resourceDirs(const char *type) const;
438 438
439 /** 439 /**
440 * This function will return a list of all the types that KStandardDirs 440 * This function will return a list of all the types that KStandardDirs
441 * supports. 441 * supports.
442 * 442 *
443 * @return All types that KDE supports 443 * @return All types that KDE supports
444 */ 444 */
445 QStringList allTypes() const; 445 QStringList allTypes() const;
446 446
447 /** 447 /**
448 * Finds a location to save files into for the given type 448 * Finds a location to save files into for the given type
449 * in the user's home directory. 449 * in the user's home directory.
450 * 450 *
451 * @param type The type of location to return. 451 * @param type The type of location to return.
452 * @param suffix A subdirectory name. 452 * @param suffix A subdirectory name.
453 * Makes it easier for you to create subdirectories. 453 * Makes it easier for you to create subdirectories.
454 * You can't pass filenames here, you _have_ to pass 454 * You can't pass filenames here, you _have_ to pass
455 * directory names only and add possible filename in 455 * directory names only and add possible filename in
456 * that directory yourself. A directory name always has a 456 * that directory yourself. A directory name always has a
457 * trailing slash ('/'). 457 * trailing slash ('/').
458 * @param create If set, saveLocation() will create the directories 458 * @param create If set, saveLocation() will create the directories
459 * needed (including those given by @p suffix). 459 * needed (including those given by @p suffix).
460 * 460 *
461 * @return A path where resources of the specified type should be 461 * @return A path where resources of the specified type should be
462 * saved, or QString::null if the resource type is unknown. 462 * saved, or QString::null if the resource type is unknown.
463 */ 463 */
464 QString saveLocation(const char *type, 464 QString saveLocation(const char *type,
465 const QString& suffix = QString::null, 465 const QString& suffix = QString::null,
466 bool create = true) const; 466 bool create = true) const;
467 467
468 /** 468 /**
469 * Converts an absolute path to a path relative to a certain 469 * Converts an absolute path to a path relative to a certain
470 * resource. 470 * resource.
471 * 471 *
472 * If "abs = ::locate(resource, rel)" 472 * If "abs = ::locate(resource, rel)"
473 * then "rel = relativeLocation(resource, abs)" and vice versa. 473 * then "rel = relativeLocation(resource, abs)" and vice versa.
474 * 474 *
475 * @param type The type of resource. 475 * @param type The type of resource.
476 * 476 *
477 * @param absPath An absolute path to make relative. 477 * @param absPath An absolute path to make relative.
478 * 478 *
479 * @return A relative path relative to resource @p type that 479 * @return A relative path relative to resource @p type that
480 * will find @p absPath. If no such relative path exists, absPath 480 * will find @p absPath. If no such relative path exists, absPath
481 * will be returned unchanged. 481 * will be returned unchanged.
482 */ 482 */
483 QString relativeLocation(const char *type, const QString &absPath); 483 QString relativeLocation(const char *type, const QString &absPath);
484 484
485 /** 485 /**
486 * Recursively creates still-missing directories in the given path. 486 * Recursively creates still-missing directories in the given path.
487 * 487 *
488 * The resulting permissions will depend on the current umask setting. 488 * The resulting permissions will depend on the current umask setting.
489 * permission = mode & ~umask. 489 * permission = mode & ~umask.
490 * 490 *
491 * @param dir Absolute path of the directory to be made. 491 * @param dir Absolute path of the directory to be made.
492 * @param mode Directory permissions. 492 * @param mode Directory permissions.
493 * @return true if successful, false otherwise 493 * @return true if successful, false otherwise
494 */ 494 */
495 static bool makeDir(const QString& dir, int mode = 0755); 495 static bool makeDir(const QString& dir, int mode = 0755);
496 496
497 /** 497 /**
498 * This returns a default relative path for the standard KDE 498 * This returns a default relative path for the standard KDE
499 * resource types. Below is a list of them so you get an idea 499 * resource types. Below is a list of them so you get an idea
500 * of what this is all about. 500 * of what this is all about.
501 * 501 *
502 * @li data - share/apps 502 * @li data - share/apps
503 * @li html - share/doc/HTML 503 * @li html - share/doc/HTML
504 * @li icon - share/icon 504 * @li icon - share/icon
505 * @li config - share/config 505 * @li config - share/config
506 * @li pixmap - share/pixmaps 506 * @li pixmap - share/pixmaps
507 * @li apps - share/applnk 507 * @li apps - share/applnk
508 * @li sound - share/sounds 508 * @li sound - share/sounds
509 * @li locale - share/locale 509 * @li locale - share/locale
510 * @li services - share/services 510 * @li services - share/services
511 * @li servicetypes - share/servicetypes 511 * @li servicetypes - share/servicetypes
512 * @li mime - share/mimelnk 512 * @li mime - share/mimelnk
513 * @li wallpaper - share/wallpapers 513 * @li wallpaper - share/wallpapers
514 * @li templates - share/templates 514 * @li templates - share/templates
515 * @li exe - bin 515 * @li exe - bin
516 * @li lib - lib 516 * @li lib - lib
517 * 517 *
518 * @returns Static default for the specified resource. You 518 * @returns Static default for the specified resource. You
519 * should probably be using locate() or locateLocal() 519 * should probably be using locate() or locateLocal()
520 * instead. 520 * instead.
521 * @see locate() 521 * @see locate()
522 * @see locateLocal() 522 * @see locateLocal()
523 */ 523 */
524 static QString kde_default(const char *type); 524 static QString kde_default(const char *type);
525 525
526 /** 526 /**
527 * @internal (for use by sycoca only) 527 * @internal (for use by sycoca only)
528 */ 528 */
529 QString kfsstnd_prefixes(); 529 QString kfsstnd_prefixes();
530 530
531 /** 531 /**
532 * Returns the toplevel directory in which KStandardDirs 532 * Returns the toplevel directory in which KStandardDirs
533 * will store things. Most likely $HOME/.kde 533 * will store things. Most likely $HOME/.kde
534 * Don't use this function if you can use locateLocal 534 * Don't use this function if you can use locateLocal
535 * @return the toplevel directory 535 * @return the toplevel directory
536 */ 536 */
537 QString localkdedir() const; 537 QString localkdedir() const;
538 538
539 /** 539 /**
540 * @return $XDG_DATA_HOME 540 * @return $XDG_DATA_HOME
541 * See also http://www.freedesktop.org/standards/basedir/draft/basedir-spec/basedir-spec.html 541 * See also http://www.freedesktop.org/standards/basedir/draft/basedir-spec/basedir-spec.html
542 */ 542 */
543 QString localxdgdatadir() const; 543 QString localxdgdatadir() const;
544 544
545 /** 545 /**
546 * @return $XDG_CONFIG_HOME 546 * @return $XDG_CONFIG_HOME
547 * See also http://www.freedesktop.org/standards/basedir/draft/basedir-spec/basedir-spec.html 547 * See also http://www.freedesktop.org/standards/basedir/draft/basedir-spec/basedir-spec.html
548 */ 548 */
549 QString localxdgconfdir() const; 549 QString localxdgconfdir() const;
550 550
551 /** 551 /**
552 * Checks for existence and accessability. 552 * Checks for existence and accessability.
553 * Faster than creating a QFileInfo first. 553 * Faster than creating a QFileInfo first.
554 * @param fullPath the path to check 554 * @param fullPath the path to check
555 * @return true if the directory exists 555 * @return true if the directory exists
556 */ 556 */
557 static bool exists(const QString &fullPath); 557 static bool exists(const QString &fullPath);
558 558
559 /** 559 /**
560 * Expands all symbolic links and resolves references to 560 * Expands all symbolic links and resolves references to
561 * '/./', '/../' and extra '/' characters in @p dirname 561 * '/./', '/../' and extra '/' characters in @p dirname
562 * and returns the canonicalized absolute pathname. 562 * and returns the canonicalized absolute pathname.
563 * The resulting path will have no symbolic link, '/./' 563 * The resulting path will have no symbolic link, '/./'
564 * or '/../' components. 564 * or '/../' components.
565 * @since 3.1 565 * @since 3.1
566 */ 566 */
567 static QString realPath(const QString &dirname); 567 static QString realPath(const QString &dirname);
568 568
569 static void setAppDir( const QString & ); 569 static void setAppDir( const QString & );
570 static QString appDir(); 570 static QString appDir();
571 571
572 private: 572 private:
573 573
574 QStringList prefixes; 574 QStringList prefixes;
575 575
576 // Directory dictionaries 576 // Directory dictionaries
577 QDict<QStringList> absolutes; 577 QDict<QStringList> absolutes;
578 QDict<QStringList> relatives; 578 QDict<QStringList> relatives;
579 579
580 mutable QDict<QStringList> dircache; 580 mutable QDict<QStringList> dircache;
581 mutable QDict<QString> savelocations; 581 mutable QDict<QString> savelocations;
582 582
583 // Disallow assignment and copy-construction 583 // Disallow assignment and copy-construction
584 KStandardDirs( const KStandardDirs& ); 584 KStandardDirs( const KStandardDirs& );
585 KStandardDirs& operator= ( const KStandardDirs& ); 585 KStandardDirs& operator= ( const KStandardDirs& );
586 586
587 bool addedCustoms; 587 bool addedCustoms;
588 588
589 class KStandardDirsPrivate; 589 class KStandardDirsPrivate;
590 KStandardDirsPrivate *d; 590 KStandardDirsPrivate *d;
591//US 591//US
592 static QString mAppDir; 592 static QString mAppDir;
593 593
594 void checkConfig() const; 594 void checkConfig() const;
595 void applyDataRestrictions(const QString &) const; 595 void applyDataRestrictions(const QString &) const;
596 //US void createSpecialResource(const char*); 596 //US void createSpecialResource(const char*);
597}; 597};
598 598
599/** 599/**
600 * \addtogroup locates Locate Functions 600 * \addtogroup locates Locate Functions
601 * @{ 601 * @{
602 * On The Usage Of 'locate' and 'locateLocal' 602 * On The Usage Of 'locate' and 'locateLocal'
603 * 603 *
604 * Typical KDE applications use resource files in one out of 604 * Typical KDE applications use resource files in one out of
605 * three ways: 605 * three ways:
606 * 606 *
607 * 1) A resource file is read but is never written. A system 607 * 1) A resource file is read but is never written. A system
608 * default is supplied but the user can override this 608 * default is supplied but the user can override this
609 * default in his local .kde directory: 609 * default in his local .kde directory:
610 * 610 *
611 * \code 611 * \code
612 * // Code example 612 * // Code example
613 * myFile = locate("appdata", "groups.lst"); 613 * myFile = locate("appdata", "groups.lst");
614 * myData = myReadGroups(myFile); // myFile may be null 614 * myData = myReadGroups(myFile); // myFile may be null
615 * \endcode 615 * \endcode
616 * 616 *
617 * 2) A resource file is read and written. If the user has no 617 * 2) A resource file is read and written. If the user has no
618 * local version of the file the system default is used. 618 * local version of the file the system default is used.
619 * The resource file is always written to the users local 619 * The resource file is always written to the users local
620 * .kde directory. 620 * .kde directory.
621 * 621 *
622 * \code 622 * \code
623 * // Code example 623 * // Code example
624 * myFile = locate("appdata", "groups.lst") 624 * myFile = locate("appdata", "groups.lst")
625 * myData = myReadGroups(myFile); 625 * myData = myReadGroups(myFile);
626 * ... 626 * ...
627 * doSomething(myData); 627 * doSomething(myData);
628 * ... 628 * ...
629 * myFile = locateLocal("appdata", "groups.lst"); 629 * myFile = locateLocal("appdata", "groups.lst");
630 * myWriteGroups(myFile, myData); 630 * myWriteGroups(myFile, myData);
631 * \endcode 631 * \endcode
632 * 632 *
633 * 3) A resource file is read and written. No system default 633 * 3) A resource file is read and written. No system default
634 * is used if the user has no local version of the file. 634 * is used if the user has no local version of the file.
635 * The resource file is always written to the users local 635 * The resource file is always written to the users local
636 * .kde directory. 636 * .kde directory.
637 * 637 *
638 * \code 638 * \code
639 * // Code example 639 * // Code example
640 * myFile = locateLocal("appdata", "groups.lst"); 640 * myFile = locateLocal("appdata", "groups.lst");
641 * myData = myReadGroups(myFile); 641 * myData = myReadGroups(myFile);
642 * ... 642 * ...
643 * doSomething(myData); 643 * doSomething(myData);
644 * ... 644 * ...
645 * myFile = locateLocal("appdata", "groups.lst"); 645 * myFile = locateLocal("appdata", "groups.lst");
646 * myWriteGroups(myFile, myData); 646 * myWriteGroups(myFile, myData);
647 * \endcode 647 * \endcode
648 **/ 648 **/
649 649
650/*! 650/*!
651 * \relates KStandardDirs 651 * \relates KStandardDirs
652 * This function is just for convenience. It simply calls 652 * This function is just for convenience. It simply calls
653 *instance->dirs()->\link KStandardDirs::findResource() findResource\endlink(type, filename). 653 *instance->dirs()->\link KStandardDirs::findResource() findResource\endlink(type, filename).
654 **/ 654 **/
655QString locate( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance()*/ ); 655QString locate( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance()*/ );
656 656
657/*! 657/*!
658 * \relates KStandardDirs 658 * \relates KStandardDirs
659 * This function is much like locate. However it returns a 659 * This function is much like locate. However it returns a
660 * filename suitable for writing to. No check is made if the 660 * filename suitable for writing to. No check is made if the
661 * specified filename actually exists. Missing directories 661 * specified filename actually exists. Missing directories
662 * are created. If filename is only a directory, without a 662 * are created. If filename is only a directory, without a
663 * specific file, filename must have a trailing slash. 663 * specific file, filename must have a trailing slash.
664 * 664 *
665 **/ 665 **/
666QString locateLocal( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance() */ ); 666QString locateLocal( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance() */ );
667 667
668/*! 668/*!
669 * \relates KStandardDirs 669 * \relates KStandardDirs
670 * This function is much like locate. No check is made if the 670 * This function is much like locate. No check is made if the
671 * specified filename actually exists. Missing directories 671 * specified filename actually exists. Missing directories
672 * are created if @p createDir is true. If filename is only 672 * are created if @p createDir is true. If filename is only
673 * a directory, without a specific file, 673 * a directory, without a specific file,
674 * filename must have a trailing slash. 674 * filename must have a trailing slash.
675 * 675 *
676 **/ 676 **/
677QString locateLocal( const char *type, const QString& filename, bool createDir /*US , const KInstance* instance = KGlobal::instance() */); 677QString locateLocal( const char *type, const QString& filename, bool createDir /*US , const KInstance* instance = KGlobal::instance() */);
678 678
679/*! @} */ 679/*! @} */
680 680
681#endif // SSK_KSTDDIRS_H 681#endif // SSK_KSTDDIRS_H