From 0fd2ecfed35280a776ebef0a45ef6eb868e9bd68 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 21 Sep 2009 08:44:42 +0000 Subject: [PATCH] Initialize wxMDIParentFrame::m_accelWindowMenu in default ctor. If wxMDIParentFrame object was created without its Create() ever being called, it crashed in its dtor trying to delete an uninitialized pointer, so do initialize it to NULL in all ctors (via a helper Init() method, as usual). Closes #11216. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61986 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/mdi.h | 7 ++++++- src/msw/mdi.cpp | 13 ++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/include/wx/msw/mdi.h b/include/wx/msw/mdi.h index eb85ec402c..caf235fd56 100644 --- a/include/wx/msw/mdi.h +++ b/include/wx/msw/mdi.h @@ -24,7 +24,7 @@ class WXDLLIMPEXP_FWD_CORE wxAcceleratorTable; class WXDLLIMPEXP_CORE wxMDIParentFrame : public wxMDIParentFrameBase { public: - wxMDIParentFrame() { } + wxMDIParentFrame() { Init(); } wxMDIParentFrame(wxWindow *parent, wxWindowID id, const wxString& title, @@ -33,6 +33,8 @@ public: long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, const wxString& name = wxFrameNameStr) { + Init(); + Create(parent, id, title, pos, size, style, name); } @@ -121,6 +123,9 @@ protected: void UpdateClientSize(); private: + // common part of all ctors + void Init(); + #if wxUSE_MENUS // "Window" menu commands event handlers void OnMDICommand(wxCommandEvent& event); diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index 104ea7a9d8..ad76a20f54 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -138,6 +138,14 @@ END_EVENT_TABLE() // the children // =========================================================================== +void wxMDIParentFrame::Init() +{ +#if wxUSE_MENUS && wxUSE_ACCEL + // the default menu doesn't have any accelerators (even if we have it) + m_accelWindowMenu = NULL; +#endif // wxUSE_MENUS && wxUSE_ACCEL +} + bool wxMDIParentFrame::Create(wxWindow *parent, wxWindowID id, const wxString& title, @@ -162,11 +170,6 @@ bool wxMDIParentFrame::Create(wxWindow *parent, m_windowMenu->Append(wxID_MDI_WINDOW_PREV, _("&Previous")); } -#if wxUSE_MENUS && wxUSE_ACCEL - // the default menu doesn't have any accelerators (even if we have it) - m_accelWindowMenu = NULL; -#endif // wxUSE_MENUS && wxUSE_ACCEL - if (!parent) wxTopLevelWindows.Append(this); -- 2.49.0