fix memory leak; allocate the DC before SetFont() is called on the status bar

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58788 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi
2009-02-09 00:53:58 +00:00
parent 71b37ee6e4
commit 80255b7eaf
2 changed files with 10 additions and 4 deletions

View File

@@ -26,6 +26,7 @@ public:
long style = wxST_SIZEGRIP, long style = wxST_SIZEGRIP,
const wxString& name = wxStatusBarNameStr) const wxString& name = wxStatusBarNameStr)
{ {
m_pDC = NULL;
(void)Create(parent, id, style, name); (void)Create(parent, id, style, name);
} }

View File

@@ -123,6 +123,12 @@ bool wxStatusBar::Create(wxWindow *parent,
SetFieldsCount(1); SetFieldsCount(1);
SubclassWin(m_hWnd); SubclassWin(m_hWnd);
// cache the DC instance used by UpdateFieldText:
// NOTE: create the DC before calling InheritAttributes() since
// it may result in a call to our SetFont()
m_pDC = new wxClientDC(this);
InheritAttributes(); InheritAttributes();
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR)); SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR));
@@ -135,9 +141,6 @@ bool wxStatusBar::Create(wxWindow *parent,
// work correctly, we need to wait until we return to the main loop // work correctly, we need to wait until we return to the main loop
PostSizeEventToParent(); PostSizeEventToParent();
// cache the DC instance used by UpdateFieldText
m_pDC = new wxClientDC(this);
return true; return true;
} }
@@ -147,6 +150,8 @@ wxStatusBar::~wxStatusBar()
// frame is not - otherwise statusbar leaves a hole in the place it used to // frame is not - otherwise statusbar leaves a hole in the place it used to
// occupy // occupy
PostSizeEventToParent(); PostSizeEventToParent();
wxDELETE(m_pDC);
} }
bool wxStatusBar::SetFont(const wxFont& font) bool wxStatusBar::SetFont(const wxFont& font)
@@ -154,7 +159,7 @@ bool wxStatusBar::SetFont(const wxFont& font)
if (!wxWindow::SetFont(font)) if (!wxWindow::SetFont(font))
return false; return false;
m_pDC->SetFont(font); if (m_pDC) m_pDC->SetFont(font);
return true; return true;
} }