]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed mem leak when using non default theme; change the art provider automatically...
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 6 Dec 2002 21:07:24 +0000 (21:07 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 6 Dec 2002 21:07:24 +0000 (21:07 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18070 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/appcmn.cpp
src/univ/theme.cpp

index 32c2fe5e00f4b8026d7726a49faef94cc0336d96..8090d33ea5fb443b2d8c58d9714eb5a4823601d6 100644 (file)
@@ -121,9 +121,6 @@ bool wxAppBase::OnInitGui()
 #ifdef __WXUNIVERSAL__
     if ( !wxTheme::Get() && !wxTheme::CreateDefault() )
         return FALSE;
-    wxArtProvider *art = wxTheme::Get()->GetArtProvider();
-    if ( art )
-        wxArtProvider::PushProvider(art);
 #endif // __WXUNIVERSAL__
 
     return TRUE;
@@ -385,6 +382,8 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser)
             return FALSE;
         }
 
+        // Delete the defaultly created theme and set the new theme.
+        delete wxTheme::Get();
         wxTheme::Set(theme);
     }
 #endif // __WXUNIVERSAL__
index d110c5bf0bdf4ef91e4c38f8ebbe44ddff5c8b00..35c540df58ebb89aa4f21db455bec19ef86aff6a 100644 (file)
@@ -33,6 +33,8 @@
     #include "wx/log.h"
 #endif // WX_PRECOMP
 
+#include "wx/artprov.h"
+
 #include "wx/univ/renderer.h"
 #include "wx/univ/inphand.h"
 #include "wx/univ/theme.h"
@@ -106,22 +108,25 @@ wxThemeInfo::wxThemeInfo(Constructor c,
         #endif
     }
 
-    ms_theme = Create(nameDefTheme);
+    wxTheme *theme = Create(nameDefTheme);
 
     // fallback to the first one in the list
-    if ( !ms_theme && ms_allThemes )
+    if ( !theme && ms_allThemes )
     {
-        ms_theme = ms_allThemes->ctor();
+        theme = ms_allThemes->ctor();
     }
 
     // abort if still nothing
-    if ( !ms_theme )
+    if ( !theme )
     {
         wxLogError(_("Failed to initialize GUI: no built-in themes found."));
 
         return FALSE;
     }
 
+    // Set the theme as current.
+    wxTheme::Set(theme);
+
     return TRUE;
 }
 
@@ -129,6 +134,16 @@ wxThemeInfo::wxThemeInfo(Constructor c,
 {
     wxTheme *themeOld = ms_theme;
     ms_theme = theme;
+
+    if ( ms_theme )
+    {
+        // automatically start using the art provider of the new theme if it
+        // has one
+        wxArtProvider *art = ms_theme->GetArtProvider();
+        if ( art )
+            wxArtProvider::PushProvider(art);
+    }
+
     return themeOld;
 }