]> git.saurik.com Git - wxWidgets.git/commitdiff
Forbid creation of wxStandardPaths object directly.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 6 Jul 2013 23:14:21 +0000 (23:14 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 6 Jul 2013 23:14:21 +0000 (23:14 +0000)
This happens to work under MSW and Unix where there is only one
wxStandardPaths class for both the console and the GUI applications but
doesn't return the correct result under OS X where the Core Foundation
version, returned by wxStandardPaths::Get(), has to be used for the GUI
programs. And historically this confused a lot of people, so just ensure that
they can't accidentally create an object of the wrong type any more.

Closes #13537.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74428 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/msw/stdpaths.h
include/wx/os2/stdpaths.h
include/wx/osx/core/stdpaths.h
include/wx/stdpaths.h
include/wx/unix/stdpaths.h
interface/wx/stdpaths.h
src/common/stdpbase.cpp
src/osx/core/utilsexc_cf.cpp

index c6f93d88487c076ceadeec11148dd83dcd69a575..bae06e44426a2ed38ed6d7ec14f04f0cf5970c51 100644 (file)
@@ -408,6 +408,10 @@ Changes in behaviour which may result in compilation errors
   any more. Use wxBookCtrlEvent in your code if you need to forward-declare
   it or just include the appropriate header instead of forward declaration.
 
+- wxStandardPaths class can't be created now. This was never the right thing
+  to do, wxStandardPaths::Get() always had to be used to access the global
+  object of the correct type but now doing it results in a compilation error.
+
 
 Deprecated methods and their replacements
 -----------------------------------------
index a9d53f38a6b641a9e8ab9b85ce5a5a631c47f14a..eb18bd2b837a8f5a2b6eeaa3b38c44eebd95606e 100644 (file)
 class WXDLLIMPEXP_BASE wxStandardPaths : public wxStandardPathsBase
 {
 public:
-    // ctor calls IgnoreAppBuildSubDirs() and also sets up the object to use
-    // both vendor and application name by default
-    wxStandardPaths();
-
     // implement base class pure virtuals
     virtual wxString GetExecutablePath() const;
     virtual wxString GetConfigDir() const;
@@ -67,6 +63,13 @@ public:
     static wxString MSWGetShellDir(int csidl);
 
 protected:
+    // Ctor is protected, use wxStandardPaths::Get() instead of instantiating
+    // objects of this class directly.
+    //
+    // It calls IgnoreAppBuildSubDirs() and also sets up the object to use
+    // both vendor and application name by default.
+    wxStandardPaths();
+
     // get the path corresponding to the given standard CSIDL_XXX constant
     static wxString DoGetDirectory(int csidl);
 
index 72ae2ea183d8248040b7ecc4747c8c7f8c7380c9..571ca38b99f286e569912db889d6cb6f22a86491 100644 (file)
@@ -40,6 +40,11 @@ public:
     virtual wxString GetUserDataDir() const;
     virtual wxString GetPluginsDir() const;
 
+protected:
+    // Ctor is protected, use wxStandardPaths::Get() instead of instantiating
+    // objects of this class directly.
+    wxStandardPaths() { }
+
 private:
     static wxString m_prefix;
 };
index 4c48407f7befb7b88ce157625542a30809951a5b..aed2c10a2105c3fec4e8597105867d61eb585aa6 100644 (file)
@@ -35,7 +35,6 @@ typedef __CFBundle * wxCFBundleRef;
 class WXDLLIMPEXP_BASE wxStandardPathsCF : public wxStandardPathsCFBase
 {
 public:
-    wxStandardPathsCF();
     virtual ~wxStandardPathsCF();
 
     // wxMac specific: allow user to specify a different bundle
@@ -57,6 +56,10 @@ public:
     virtual wxString GetDocumentsDir() const;
 
 protected:
+    // Ctor is protected, use wxStandardPaths::Get() instead of instantiating
+    // objects of this class directly.
+    wxStandardPathsCF();
+
     // this function can be called with any of CFBundleCopyXXXURL function
     // pointer as parameter
     wxString GetFromFunc(wxCFURLRef (*func)(wxCFBundleRef)) const;
index 1bf5af08315716e5b1004b7092fef940d818938f..55c0b785f8da46579b0d26b9f2fbeb1ea4f1ecfe 100644 (file)
@@ -142,9 +142,6 @@ public:
     virtual wxString GetTempDir() const;
 
 
-    // ctor for the base class
-    wxStandardPathsBase();
-
     // virtual dtor for the base class
     virtual ~wxStandardPathsBase();
 
@@ -158,6 +155,10 @@ public:
 
 
 protected:
+    // Ctor is protected as this is a base class which should never be created
+    // directly.
+    wxStandardPathsBase();
+
     // append the path component, with a leading path separator if a
     // path separator or dot (.) is not already at the end of dir
     static wxString AppendPathComponent(const wxString& dir, const wxString& component);
@@ -210,6 +211,12 @@ public:
     virtual wxString GetPluginsDir() const { return m_prefix; }
     virtual wxString GetDocumentsDir() const { return m_prefix; }
 
+protected:
+    // Ctor is protected because wxStandardPaths::Get() should always be used
+    // to access the global wxStandardPaths object of the correct type instead
+    // of creating one of a possibly wrong type yourself.
+    wxStandardPaths() { }
+
 private:
     wxString m_prefix;
 };
index 0692bfaec17809a4cc678c3d8a9d3730a1235701..0d63f1a4ce903e2b7882cd7ab3a89fb78c82a298 100644 (file)
@@ -51,6 +51,11 @@ public:
     virtual wxString GetDocumentsDir() const;
 #endif
 
+protected:
+    // Ctor is protected, use wxStandardPaths::Get() instead of instantiating
+    // objects of this class directly.
+    wxStandardPaths() { }
+
 private:
     wxString m_prefix;
 };
index 29d9c849e3928d50c5f02573c141d44e42838a93..829de479ae4fded373be5cce76eef25f1b448fc0 100644 (file)
@@ -363,5 +363,15 @@ public:
         @since 2.9.0
     */
     void UseAppInfo(int info);
+
+protected:
+    /**
+        Protected default constructor.
+
+        This constructor is protected in order to prevent creation of objects
+        of this class as Get() should be used instead to access the unique
+        global wxStandardPaths object of the correct type.
+     */
+    wxStandardPaths();
 };
 
index e421f3b26a3da97aa27dba1a1ece6f34b12f6aee..1d831afed36c9e46e696df61350668bf0443dc9d 100644 (file)
 // module globals
 // ----------------------------------------------------------------------------
 
-static wxStandardPaths gs_stdPaths;
+namespace
+{
+
+// Derive a class just to be able to create it: wxStandardPaths ctor is
+// protected to prevent its misuse, but it also means we can't create an object
+// of this class directly.
+class wxStandardPathsDefault : public wxStandardPaths
+{
+public:
+    wxStandardPathsDefault() { }
+};
+
+static wxStandardPathsDefault gs_stdPaths;
+
+} // anonymous namespace
 
 // ============================================================================
 // implementation
index f00cb5e38fff670c8819ce364a0e599803fbebbe..b9fae2e446c9d42fb598399425b67a33b6614dee 100644 (file)
@@ -156,9 +156,19 @@ wxEventLoopSourcesManagerBase* wxGUIAppTraits::GetEventLoopSourcesManager()
 // NOTE: This doesn't really belong here but this was a handy file to
 // put it in because it's already compiled for wxCocoa and wxMac GUI lib.
 #if wxUSE_STDPATHS
-static wxStandardPathsCF gs_stdPaths;
 wxStandardPaths& wxGUIAppTraits::GetStandardPaths()
 {
+    // Derive a class just to be able to create it: wxStandardPaths ctor is
+    // protected to prevent its misuse, but it also means we can't create an
+    // object of this class directly.
+    class wxStandardPathsDefault : public wxStandardPathsCF
+    {
+    public:
+        wxStandardPathsDefault() { }
+    };
+
+    static wxStandardPathsDefault gs_stdPaths;
+
     return gs_stdPaths;
 }
 #endif