X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c0b301f4e599f2d89820e87d057ae5aa2233ab43..8626e0b73de21463908bf855700c31e41c661b30:/src/osx/core/evtloop_cf.cpp?ds=sidebyside diff --git a/src/osx/core/evtloop_cf.cpp b/src/osx/core/evtloop_cf.cpp index 57fa767aba..20f01f8fd6 100644 --- a/src/osx/core/evtloop_cf.cpp +++ b/src/osx/core/evtloop_cf.cpp @@ -25,8 +25,6 @@ #include "wx/evtloop.h" -#if wxUSE_EVENTLOOP_SOURCE - #ifndef WX_PRECOMP #include "wx/log.h" #include "wx/app.h" @@ -48,6 +46,8 @@ // wxCFEventLoopSource and wxCFEventLoop implementation // ============================================================================ +#if wxUSE_EVENTLOOP_SOURCE + namespace { @@ -169,7 +169,7 @@ void wxCFEventLoop::CommonModeObserverCallBack(CFRunLoopObserverRef WXUNUSED(obs if ( activity & kCFRunLoopBeforeWaiting ) { - if ( ProcessIdle() ) + if ( m_processIdleEvents && ProcessIdle() ) { WakeUp(); } @@ -201,6 +201,7 @@ wxCFEventLoop::DefaultModeObserverCallBack(CFRunLoopObserverRef WXUNUSED(observe wxCFEventLoop::wxCFEventLoop() { m_shouldExit = false; + m_processIdleEvents = true; m_runLoop = CFGetCurrentRunLoop(); @@ -210,18 +211,19 @@ wxCFEventLoop::wxCFEventLoop() m_commonModeRunLoopObserver = CFRunLoopObserverCreate( kCFAllocatorDefault, kCFRunLoopBeforeTimers | kCFRunLoopBeforeWaiting , true /* repeats */, 0, (CFRunLoopObserverCallBack) wxCFEventLoop::OSXCommonModeObserverCallBack, &ctxt ); CFRunLoopAddObserver(m_runLoop, m_commonModeRunLoopObserver, kCFRunLoopCommonModes); - CFRelease(m_commonModeRunLoopObserver); m_defaultModeRunLoopObserver = CFRunLoopObserverCreate( kCFAllocatorDefault, kCFRunLoopBeforeTimers | kCFRunLoopBeforeWaiting , true /* repeats */, 0, (CFRunLoopObserverCallBack) wxCFEventLoop::OSXDefaultModeObserverCallBack, &ctxt ); CFRunLoopAddObserver(m_runLoop, m_defaultModeRunLoopObserver, kCFRunLoopDefaultMode); - CFRelease(m_defaultModeRunLoopObserver); } wxCFEventLoop::~wxCFEventLoop() { CFRunLoopRemoveObserver(m_runLoop, m_commonModeRunLoopObserver, kCFRunLoopCommonModes); CFRunLoopRemoveObserver(m_runLoop, m_defaultModeRunLoopObserver, kCFRunLoopDefaultMode); + + CFRelease(m_defaultModeRunLoopObserver); + CFRelease(m_commonModeRunLoopObserver); } @@ -439,6 +441,20 @@ void wxCFEventLoop::Exit(int rc) DoStop(); } +wxCFEventLoopPauseIdleEvents::wxCFEventLoopPauseIdleEvents() +{ + wxCFEventLoop* cfl = dynamic_cast(wxEventLoopBase::GetActive()); + if ( cfl ) + cfl->SetProcessIdleEvents(false); +} + +wxCFEventLoopPauseIdleEvents::~wxCFEventLoopPauseIdleEvents() +{ + wxCFEventLoop* cfl = dynamic_cast(wxEventLoopBase::GetActive()); + if ( cfl ) + cfl->SetProcessIdleEvents(true); +} + // TODO Move to thread_osx.cpp #if wxUSE_THREADS