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
This commit is contained in:
Vadim Zeitlin
2002-12-06 21:07:24 +00:00
parent 61ecf6d34f
commit 815b393a5a
2 changed files with 21 additions and 7 deletions

View 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__

View 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;
}