]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/filesys.cpp
make sure mac pref files remain visible and named as before
[wxWidgets.git] / src / common / filesys.cpp
index 038e55407fb989b4b18b83a29f7c535414c3bdaf..d0f4901ebb41f9e835226d20fc69e9a7f6235eb6 100644 (file)
@@ -23,6 +23,7 @@
     #include "wx/module.h"
 #endif
 
+#include "wx/sysopt.h"
 #include "wx/wfstream.h"
 #include "wx/mimetype.h"
 #include "wx/filename.h"
@@ -77,64 +78,77 @@ wxString wxFileSystemHandler::GetMimeTypeFromExt(const wxString& location)
 
 #if wxUSE_MIMETYPE
     static bool s_MinimalMimeEnsured = false;
-    if (!s_MinimalMimeEnsured)
+
+    // Don't use mime types manager if the application doesn't need it and it would be
+    // cause an unacceptable delay, especially on startup.
+    bool useMimeTypesManager = true;
+#if wxUSE_SYSTEM_OPTIONS
+    useMimeTypesManager = (wxSystemOptions::GetOptionInt(wxT("filesys.no-mimetypesmanager")) == 0);
+#endif
+
+    if (useMimeTypesManager)
     {
-        static const wxFileTypeInfo fallbacks[] =
+        if (!s_MinimalMimeEnsured)
         {
-            wxFileTypeInfo(_T("image/jpeg"),
-                           wxEmptyString,
-                           wxEmptyString,
-                           _T("JPEG image (from fallback)"),
-                           _T("jpg"), _T("jpeg"), _T("JPG"), _T("JPEG"), wxNullPtr),
-            wxFileTypeInfo(_T("image/gif"),
-                           wxEmptyString,
-                           wxEmptyString,
-                           _T("GIF image (from fallback)"),
-                           _T("gif"), _T("GIF"), wxNullPtr),
-            wxFileTypeInfo(_T("image/png"),
-                           wxEmptyString,
-                           wxEmptyString,
-                           _T("PNG image (from fallback)"),
-                           _T("png"), _T("PNG"), wxNullPtr),
-            wxFileTypeInfo(_T("image/bmp"),
-                           wxEmptyString,
-                           wxEmptyString,
-                           _T("windows bitmap image (from fallback)"),
-                           _T("bmp"), _T("BMP"), wxNullPtr),
-            wxFileTypeInfo(_T("text/html"),
-                           wxEmptyString,
-                           wxEmptyString,
-                           _T("HTML document (from fallback)"),
-                           _T("htm"), _T("html"), _T("HTM"), _T("HTML"), wxNullPtr),
-            // must terminate the table with this!
-            wxFileTypeInfo()
-        };
-        wxTheMimeTypesManager->AddFallbacks(fallbacks);
-        s_MinimalMimeEnsured = true;
+            static const wxFileTypeInfo fallbacks[] =
+            {
+                wxFileTypeInfo(_T("image/jpeg"),
+                    wxEmptyString,
+                    wxEmptyString,
+                    _T("JPEG image (from fallback)"),
+                    _T("jpg"), _T("jpeg"), _T("JPG"), _T("JPEG"), wxNullPtr),
+                    wxFileTypeInfo(_T("image/gif"),
+                    wxEmptyString,
+                    wxEmptyString,
+                    _T("GIF image (from fallback)"),
+                    _T("gif"), _T("GIF"), wxNullPtr),
+                    wxFileTypeInfo(_T("image/png"),
+                    wxEmptyString,
+                    wxEmptyString,
+                    _T("PNG image (from fallback)"),
+                    _T("png"), _T("PNG"), wxNullPtr),
+                    wxFileTypeInfo(_T("image/bmp"),
+                    wxEmptyString,
+                    wxEmptyString,
+                    _T("windows bitmap image (from fallback)"),
+                    _T("bmp"), _T("BMP"), wxNullPtr),
+                    wxFileTypeInfo(_T("text/html"),
+                    wxEmptyString,
+                    wxEmptyString,
+                    _T("HTML document (from fallback)"),
+                    _T("htm"), _T("html"), _T("HTM"), _T("HTML"), wxNullPtr),
+                    // must terminate the table with this!
+                    wxFileTypeInfo()
+            };
+            wxTheMimeTypesManager->AddFallbacks(fallbacks);
+            s_MinimalMimeEnsured = true;
+        }
+        
+        wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension(ext);
+        if ( !ft || !ft -> GetMimeType(&mime) )
+        {
+            mime = wxEmptyString;
+        }
+        
+        delete ft;
+        
+        return mime;
     }
-
-    wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension(ext);
-    if ( !ft || !ft -> GetMimeType(&mime) )
+    else
+#endif
     {
-        mime = wxEmptyString;
+        if ( ext.IsSameAs(wxT("htm"), false) || ext.IsSameAs(_T("html"), false) )
+            return wxT("text/html");
+        if ( ext.IsSameAs(wxT("jpg"), false) || ext.IsSameAs(_T("jpeg"), false) )
+            return wxT("image/jpeg");
+        if ( ext.IsSameAs(wxT("gif"), false) )
+            return wxT("image/gif");
+        if ( ext.IsSameAs(wxT("png"), false) )
+            return wxT("image/png");
+        if ( ext.IsSameAs(wxT("bmp"), false) )
+            return wxT("image/bmp");
+        return wxEmptyString;
     }
-
-    delete ft;
-
-    return mime;
-#else
-    if ( ext.IsSameAs(wxT("htm"), false) || ext.IsSameAs(_T("html"), false) )
-        return wxT("text/html");
-    if ( ext.IsSameAs(wxT("jpg"), false) || ext.IsSameAs(_T("jpeg"), false) )
-        return wxT("image/jpeg");
-    if ( ext.IsSameAs(wxT("gif"), false) )
-        return wxT("image/gif");
-    if ( ext.IsSameAs(wxT("png"), false) )
-        return wxT("image/png");
-    if ( ext.IsSameAs(wxT("bmp"), false) )
-        return wxT("image/bmp");
-    return wxEmptyString;
-#endif
 }
 
 
@@ -193,8 +207,10 @@ wxString wxFileSystemHandler::GetAnchor(const wxString& location)
 
     for (int i = l-1; i >= 0; i--) {
         c = location[i];
-        if (c == wxT('#')) return location.Right(l-i-1);
-        else if ((c == wxT('.')) || (c == wxT('/')) || (c == wxT('\\')) || (c == wxT(':'))) return wxEmptyString;
+        if (c == wxT('#'))
+            return location.Right(l-i-1);
+        else if ((c == wxT('/')) || (c == wxT('\\')) || (c == wxT(':')))
+            return wxEmptyString;
     }
     return wxEmptyString;
 }
@@ -663,6 +679,16 @@ wxString wxFileSystem::FileNameToURL(const wxFileName& filename)
     url.Replace(g_nativePathString, g_unixPathString);
     url.Replace(wxT("%"), wxT("%25")); // '%'s must be replaced first!
     url.Replace(wxT("#"), wxT("%23"));
+
+    // notice that all colons *must* be encoded in the paths used by
+    // wxFileSystem even though this makes URLs produced by this method
+    // unusable with IE under Windows as it requires "file:///c:/foo.bar" and
+    // doesn't accept "file:///c%3a/foo.bar" -- but then we never made any
+    // guarantees about general suitability of the strings returned by this
+    // method, they must work with wxFileSystem only and not encoding the colon
+    // breaks handling of "http://wherever/whatever.zip#zip:filename.ext" URLs
+    // so we really can't do this without heavy changes to the parsing code
+    // here, in particular in GetRightLocation()
     url.Replace(wxT(":"), wxT("%3A"));
     url = wxT("file:") + url;
     return url;