X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fb743cab53102c1d2d636acd173112233835f3f7..3d7a1b394baa3255d084c877b5caae4b29720a12:/src/mac/carbon/app.cpp?ds=sidebyside diff --git a/src/mac/carbon/app.cpp b/src/mac/carbon/app.cpp index 2128892511..8c52e9f221 100644 --- a/src/mac/carbon/app.cpp +++ b/src/mac/carbon/app.cpp @@ -850,6 +850,8 @@ bool wxApp::Initialize(int& argc, wxChar **argv) event_posted_context.perform = macPostedEventCallback; m_macEventPosted = CFRunLoopSourceCreate(NULL,0,&event_posted_context); CFRunLoopAddSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes); + // run loop takes ownership + CFRelease(m_macEventPosted); #endif UMAShowArrowCursor() ; @@ -908,8 +910,10 @@ void wxApp::CleanUp() #ifdef __WXMAC_OSX__ if (m_macEventPosted) - CFRelease(m_macEventPosted); - m_macEventPosted = NULL; + { + CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes); + m_macEventPosted = NULL; + } #endif // One last chance for pending objects to be cleaned up @@ -1227,6 +1231,14 @@ void wxApp::MacHandleUnhandledEvent( WXEVENTREF evr ) // Override to process unhandled events as you please } +CFMutableArrayRef GetAutoReleaseArray() +{ + static CFMutableArrayRef array = 0; + if ( array == 0) + array= CFArrayCreateMutable(kCFAllocatorDefault,0,&kCFTypeArrayCallBacks); + return array; +} + void wxApp::MacHandleOneEvent( WXEVENTREF evr ) { EventTargetRef theTarget; @@ -1242,6 +1254,13 @@ void wxApp::MacHandleOneEvent( WXEVENTREF evr ) #if wxUSE_THREADS wxMutexGuiLeaveOrEnter(); #endif // wxUSE_THREADS + + CFArrayRemoveAllValues( GetAutoReleaseArray() ); +} + +void wxApp::MacAddToAutorelease( void* cfrefobj ) +{ + CFArrayAppendValue( GetAutoReleaseArray(), cfrefobj ); } long wxMacTranslateKey(unsigned char key, unsigned char code)