]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/sysopt.cpp
fix memory leak in wxScreenDC, fixes #13249
[wxWidgets.git] / src / common / sysopt.cpp
index a5967226a8b6108baf176dde454c0c02d3f6d5ce..8b117011d243d5f1748f2dfc64ea07abe8d5619a 100644 (file)
 #include "wx/sysopt.h"
 
 #ifndef WX_PRECOMP
 #include "wx/sysopt.h"
 
 #ifndef WX_PRECOMP
+    #include "wx/app.h"
     #include "wx/list.h"
     #include "wx/string.h"
     #include "wx/list.h"
     #include "wx/string.h"
+    #include "wx/arrstr.h"
 #endif
 
 #endif
 
-#include "wx/arrstr.h"
-
 // ----------------------------------------------------------------------------
 // private globals
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // private globals
 // ----------------------------------------------------------------------------
@@ -69,21 +69,49 @@ void wxSystemOptions::SetOption(const wxString& name, int value)
 
 wxString wxSystemOptions::GetOption(const wxString& name)
 {
 
 wxString wxSystemOptions::GetOption(const wxString& name)
 {
+    wxString val;
+
     int idx = gs_optionNames.Index(name, false);
     int idx = gs_optionNames.Index(name, false);
-    if (idx == wxNOT_FOUND)
-        return wxEmptyString;
-    else
-        return gs_optionValues[idx];
+    if ( idx != wxNOT_FOUND )
+    {
+        val = gs_optionValues[idx];
+    }
+    else // not set explicitly
+    {
+        // look in the environment: first for a variable named "wx_appname_name"
+        // which can be set to affect the behaviour or just this application
+        // and then for "wx_name" which can be set to change the option globally
+        wxString var(name);
+        var.Replace(wxT("."), wxT("_"));  // '.'s not allowed in env var names
+        var.Replace(wxT("-"), wxT("_"));  // and neither are '-'s
+
+        wxString appname;
+        if ( wxTheApp )
+            appname = wxTheApp->GetAppName();
+
+        if ( !appname.empty() )
+            val = wxGetenv(wxT("wx_") + appname + wxT('_') + var);
+
+        if ( val.empty() )
+            val = wxGetenv(wxT("wx_") + var);
+    }
+
+    return val;
 }
 
 int wxSystemOptions::GetOptionInt(const wxString& name)
 {
 }
 
 int wxSystemOptions::GetOptionInt(const wxString& name)
 {
-    return wxAtoi(GetOption(name));
+#ifdef _PACC_VER
+    // work around the PalmOS pacc compiler bug
+    return wxAtoi (GetOption(name).data());
+#else
+    return wxAtoi (GetOption(name));
+#endif
 }
 
 bool wxSystemOptions::HasOption(const wxString& name)
 {
 }
 
 bool wxSystemOptions::HasOption(const wxString& name)
 {
-    return gs_optionNames.Index(name, false) != wxNOT_FOUND;
+    return !GetOption(name).empty();
 }
 
 #endif // wxUSE_SYSTEM_OPTIONS
 }
 
 #endif // wxUSE_SYSTEM_OPTIONS