From 80255b7eaf9427daf6fa21a3f27e4475dcc54cf8 Mon Sep 17 00:00:00 2001 From: Francesco Montorsi Date: Mon, 9 Feb 2009 00:53:58 +0000 Subject: [PATCH] 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 --- include/wx/msw/statusbar.h | 1 + src/msw/statusbar.cpp | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/wx/msw/statusbar.h b/include/wx/msw/statusbar.h index 55a1f16c83..070e1db817 100644 --- a/include/wx/msw/statusbar.h +++ b/include/wx/msw/statusbar.h @@ -26,6 +26,7 @@ public: long style = wxST_SIZEGRIP, const wxString& name = wxStatusBarNameStr) { + m_pDC = NULL; (void)Create(parent, id, style, name); } diff --git a/src/msw/statusbar.cpp b/src/msw/statusbar.cpp index 0dcc35899c..b5207576f5 100644 --- a/src/msw/statusbar.cpp +++ b/src/msw/statusbar.cpp @@ -123,6 +123,12 @@ bool wxStatusBar::Create(wxWindow *parent, SetFieldsCount(1); 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(); 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 PostSizeEventToParent(); - // cache the DC instance used by UpdateFieldText - m_pDC = new wxClientDC(this); - return true; } @@ -147,6 +150,8 @@ wxStatusBar::~wxStatusBar() // frame is not - otherwise statusbar leaves a hole in the place it used to // occupy PostSizeEventToParent(); + + wxDELETE(m_pDC); } bool wxStatusBar::SetFont(const wxFont& font) @@ -154,7 +159,7 @@ bool wxStatusBar::SetFont(const wxFont& font) if (!wxWindow::SetFont(font)) return false; - m_pDC->SetFont(font); + if (m_pDC) m_pDC->SetFont(font); return true; } -- 2.45.2