summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tdeio/tdeio/global.cpp39
-rw-r--r--tdeio/tdeio/global.h6
-rw-r--r--tdeioslave/file/file.cc3
3 files changed, 34 insertions, 14 deletions
diff --git a/tdeio/tdeio/global.cpp b/tdeio/tdeio/global.cpp
index 8dce8a5f4..e45297ef6 100644
--- a/tdeio/tdeio/global.cpp
+++ b/tdeio/tdeio/global.cpp
@@ -165,41 +165,60 @@ TDEIO_EXPORT TQString TDEIO::itemsSummaryString(uint items, uint files, uint dir
TDEIO_EXPORT TQString TDEIO::encodeFileName( const TQString & _str )
{
TQString str( _str );
+ bool unicode_supported = (TQString::fromLocal8Bit(TQString(TQChar((uint)0x2215)).local8Bit())[0].unicode() != 0x3f);
int i = 0;
- while ( ( i = str.find( "%", i ) ) != -1 )
- {
+ while ( ( i = str.find( "%", i ) ) != -1 ) {
str.replace( i, 1, "%%");
i += 2;
}
- while ( ( i = str.find( "/" ) ) != -1 )
- str.replace( i, 1, "%2f");
+ while ( ( i = str.find( "/" ) ) != -1 ) {
+ if (unicode_supported) {
+ // Use U+2215 (DIVISION SLASH) to represent the forward slash
+ // While U+2044 (FRACTION SLASH) is a tempting replacement, it can indicate to
+ // rendering engines that a combined fraction character should be displayed
+ str.replace( i, 1, TQChar((uint)0x2215));
+ }
+ else {
+ // Unicode does not appear to be supported on this system!
+ // Fall back to older encoding method...
+ str.replace( i, 1, "%2f");
+ }
+
+ str.replace( i, 1, TQChar((uint)0x2215));
+ }
return str;
}
TDEIO_EXPORT TQString TDEIO::decodeFileName( const TQString & _str )
{
TQString str;
+ bool unicode_supported = (TQString::fromLocal8Bit(TQString(TQChar((uint)0x2215)).local8Bit())[0].unicode() != 0x3f);
unsigned int i = 0;
- for ( ; i < _str.length() ; ++i )
- {
- if ( _str[i]=='%' )
- {
+ for ( ; i < _str.length() ; ++i ) {
+ if ( _str[i]=='%' ) {
if ( _str[i+1]=='%' ) // %% -> %
{
str.append('%');
++i;
}
- else if ( _str[i+1]=='2' && (i+2<_str.length()) && _str[i+2].lower()=='f' ) // %2f -> /
+ else if ((!unicode_supported) && ( _str[i+1]=='2' && (i+2<_str.length()) && _str[i+2].lower()=='f' )) // %2f -> /
{
str.append('/');
i += 2;
}
else
+ {
str.append('%');
- } else
+ }
+ }
+ else if ( _str[i] == TQChar((uint)0x2215) ) {
+ str.append('/');
+ }
+ else {
str.append(_str[i]);
+ }
}
return str;
diff --git a/tdeio/tdeio/global.h b/tdeio/tdeio/global.h
index 1cec378e3..e10e5b4a8 100644
--- a/tdeio/tdeio/global.h
+++ b/tdeio/tdeio/global.h
@@ -118,7 +118,7 @@ namespace TDEIO
/**
* Encodes (from the text displayed to the real filename)
- * This translates % into %% and / into %2f
+ * This translates % into %% and / into ∕ (U+2215, DIVISION SLASH)
* Used by TDEIO::link, for instance.
* @param str the file name to encode
* @return the encoded file name
@@ -126,7 +126,7 @@ namespace TDEIO
TDEIO_EXPORT TQString encodeFileName( const TQString & str );
/**
* Decodes (from the filename to the text displayed)
- * This translates %2[fF] into / and %% into %
+ * This translates %2[fF] into /, %% into %, and ∕ (U+2215, DIVISION SLASH) into /
* @param str the file name to decode
* @return the decoded file name
*/
@@ -502,7 +502,7 @@ public:
};
/**
- * An entry is the list of atoms containing all the informations for a file or URL
+ * An entry is the list of atoms containing all the information for a file or URL
*/
typedef TQValueList<UDSAtom> UDSEntry;
typedef TQValueList<UDSEntry> UDSEntryList;
diff --git a/tdeioslave/file/file.cc b/tdeioslave/file/file.cc
index 1caeaef3e..75b3b17a1 100644
--- a/tdeioslave/file/file.cc
+++ b/tdeioslave/file/file.cc
@@ -1222,8 +1222,9 @@ void FileProtocol::listDir( const KURL& url)
// files where TQFile::encodeName(TQFile::decodeName(a)) != a.
TQStrList entryNames;
- while ( ( ep = KDE_readdir( dp ) ) != 0L )
+ while ( ( ep = KDE_readdir( dp ) ) != 0L ) {
entryNames.append( ep->d_name );
+ }
closedir( dp );
totalSize( entryNames.count() );