]> git.saurik.com Git - wxWidgets.git/commitdiff
Create an autorelease pool to catch objects created during several special situations...
authorKevin Ollivier <kevino@theolliviers.com>
Thu, 5 Nov 2009 00:31:36 +0000 (00:31 +0000)
committerKevin Ollivier <kevino@theolliviers.com>
Thu, 5 Nov 2009 00:31:36 +0000 (00:31 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62557 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/osx/app.h
src/osx/carbon/app.cpp

index 2dc67c2566c8713e34b76cdc17a3823113a1fefa..24b2504b1886fa54bc493f1463b551c78f458b27 100644 (file)
@@ -22,6 +22,7 @@ class WXDLLIMPEXP_FWD_CORE wxWindowMac;
 class WXDLLIMPEXP_FWD_CORE wxApp ;
 class WXDLLIMPEXP_FWD_CORE wxKeyEvent;
 class WXDLLIMPEXP_FWD_BASE wxLog;
 class WXDLLIMPEXP_FWD_CORE wxApp ;
 class WXDLLIMPEXP_FWD_CORE wxKeyEvent;
 class WXDLLIMPEXP_FWD_BASE wxLog;
+class WXDLLIMPEXP_FWD_CORE wxMacAutoreleasePool;
 
 // Force an exit from main loop
 void WXDLLIMPEXP_CORE wxExit();
 
 // Force an exit from main loop
 void WXDLLIMPEXP_CORE wxExit();
@@ -36,7 +37,7 @@ class WXDLLIMPEXP_CORE wxApp: public wxAppBase
     DECLARE_DYNAMIC_CLASS(wxApp)
 
     wxApp();
     DECLARE_DYNAMIC_CLASS(wxApp)
 
     wxApp();
-    virtual ~wxApp() {}
+    virtual ~wxApp();
 
     virtual void WakeUpIdle();
 
 
     virtual void WakeUpIdle();
 
@@ -61,6 +62,7 @@ class WXDLLIMPEXP_CORE wxApp: public wxAppBase
 
 protected:
     int                   m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
 
 protected:
     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
     // TODO change semantics to be in line with cocoa (make autrelease NOT increase the count)
     void                  MacAddToAutorelease( void* cfrefobj );
     // we want to delete and cannot do it immediately
     // TODO change semantics to be in line with cocoa (make autrelease NOT increase the count)
     void                  MacAddToAutorelease( void* cfrefobj );
+    void                  MacReleaseAutoreleasePool();
 public:
     static wxWindow*      s_captureWindow ;
     static long           s_lastModifiers ;
 public:
     static wxWindow*      s_captureWindow ;
     static long           s_lastModifiers ;
index 22dfa62eddb3ca83ca48d6e7e68ec0b3b74e851d..8e316a5621578666e596e7ddcb49158553ba9708 100644 (file)
@@ -1072,6 +1072,13 @@ wxApp::wxApp()
     m_macCurrentEvent = NULL ;
     m_macCurrentEventHandlerCallRef = NULL ;
     m_macEventPosted = NULL ;
     m_macCurrentEvent = NULL ;
     m_macCurrentEventHandlerCallRef = 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))
 {
     // If they are pending events, we must process them: pending events are
 void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event))
 {
     // If they are pending events, we must process them: pending events are