Create an autorelease pool to catch objects created during several special situations, like customized initialization, so that we don't leak there.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62557 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -22,6 +22,7 @@ class WXDLLIMPEXP_FWD_CORE wxWindowMac;
|
|||||||
class WXDLLIMPEXP_FWD_CORE wxApp ;
|
class WXDLLIMPEXP_FWD_CORE wxApp ;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxKeyEvent;
|
class WXDLLIMPEXP_FWD_CORE wxKeyEvent;
|
||||||
class WXDLLIMPEXP_FWD_BASE wxLog;
|
class WXDLLIMPEXP_FWD_BASE wxLog;
|
||||||
|
class WXDLLIMPEXP_FWD_CORE wxMacAutoreleasePool;
|
||||||
|
|
||||||
// Force an exit from main loop
|
// Force an exit from main loop
|
||||||
void WXDLLIMPEXP_CORE wxExit();
|
void WXDLLIMPEXP_CORE wxExit();
|
||||||
@@ -36,7 +37,7 @@ class WXDLLIMPEXP_CORE wxApp: public wxAppBase
|
|||||||
DECLARE_DYNAMIC_CLASS(wxApp)
|
DECLARE_DYNAMIC_CLASS(wxApp)
|
||||||
|
|
||||||
wxApp();
|
wxApp();
|
||||||
virtual ~wxApp() {}
|
virtual ~wxApp();
|
||||||
|
|
||||||
virtual void WakeUpIdle();
|
virtual void WakeUpIdle();
|
||||||
|
|
||||||
@@ -61,6 +62,7 @@ class WXDLLIMPEXP_CORE wxApp: public wxAppBase
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
|
int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
|
||||||
|
wxMacAutoreleasePool* m_macPool;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@@ -80,6 +82,7 @@ public:
|
|||||||
// we want to delete and cannot do it immediately
|
// we want to delete and cannot do it immediately
|
||||||
// TODO change semantics to be in line with cocoa (make autrelease NOT increase the count)
|
// TODO change semantics to be in line with cocoa (make autrelease NOT increase the count)
|
||||||
void MacAddToAutorelease( void* cfrefobj );
|
void MacAddToAutorelease( void* cfrefobj );
|
||||||
|
void MacReleaseAutoreleasePool();
|
||||||
public:
|
public:
|
||||||
static wxWindow* s_captureWindow ;
|
static wxWindow* s_captureWindow ;
|
||||||
static long s_lastModifiers ;
|
static long s_lastModifiers ;
|
||||||
|
@@ -1072,6 +1072,13 @@ wxApp::wxApp()
|
|||||||
m_macCurrentEvent = NULL ;
|
m_macCurrentEvent = NULL ;
|
||||||
m_macCurrentEventHandlerCallRef = NULL ;
|
m_macCurrentEventHandlerCallRef = NULL ;
|
||||||
m_macEventPosted = NULL ;
|
m_macEventPosted = NULL ;
|
||||||
|
m_macPool = new wxMacAutoreleasePool();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxApp::~wxApp()
|
||||||
|
{
|
||||||
|
if (m_macPool)
|
||||||
|
delete m_macPool;
|
||||||
}
|
}
|
||||||
|
|
||||||
CFMutableArrayRef GetAutoReleaseArray()
|
CFMutableArrayRef GetAutoReleaseArray()
|
||||||
@@ -1087,6 +1094,13 @@ void wxApp::MacAddToAutorelease( void* cfrefobj )
|
|||||||
CFArrayAppendValue( GetAutoReleaseArray(), cfrefobj );
|
CFArrayAppendValue( GetAutoReleaseArray(), cfrefobj );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxApp::MacReleaseAutoreleasePool()
|
||||||
|
{
|
||||||
|
if (m_macPool)
|
||||||
|
delete m_macPool;
|
||||||
|
m_macPool = new wxMacAutoreleasePool();
|
||||||
|
}
|
||||||
|
|
||||||
void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event))
|
void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
// If they are pending events, we must process them: pending events are
|
// If they are pending events, we must process them: pending events are
|
||||||
|
Reference in New Issue
Block a user