From: Vadim Zeitlin Date: Fri, 6 Dec 2002 21:07:24 +0000 (+0000) Subject: fixed mem leak when using non default theme; change the art provider automatically... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/815b393a5aa2d84cf27562dbf2103180f0c95d4e fixed mem leak when using non default theme; change the art provider automatically when the theme is changed (patch 646463) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18070 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index 32c2fe5e00..8090d33ea5 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -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__ diff --git a/src/univ/theme.cpp b/src/univ/theme.cpp index d110c5bf0b..35c540df58 100644 --- a/src/univ/theme.cpp +++ b/src/univ/theme.cpp @@ -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; }