]> git.saurik.com Git - wxWidgets.git/commitdiff
adding proper removal of observer for stacked event loops, using cfrunloop for consol...
authorStefan Csomor <csomor@advancedconcepts.ch>
Wed, 17 Mar 2010 08:05:04 +0000 (08:05 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Wed, 17 Mar 2010 08:05:04 +0000 (08:05 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63698 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/evtloop.h
include/wx/osx/evtloop.h
include/wx/unix/evtloop.h
src/osx/core/evtloop_cf.cpp

index 642cc128f0a2d6621a8acd01ab74a2021b3c91e4..3ba5c71aed05abe30a9371b88b0ca071851932cb 100644 (file)
@@ -228,11 +228,6 @@ private:
 
 #endif // platforms using "manual" loop
 
 
 #endif // platforms using "manual" loop
 
-// include the header defining wxConsoleEventLoop for Unix systems
-#if defined(__UNIX__)
-    #include "wx/unix/evtloop.h"
-#endif
-
 // we're moving away from old m_impl wxEventLoop model as otherwise the user
 // code doesn't have access to platform-specific wxEventLoop methods and this
 // can sometimes be very useful (e.g. under MSW this is necessary for
 // we're moving away from old m_impl wxEventLoop model as otherwise the user
 // code doesn't have access to platform-specific wxEventLoop methods and this
 // can sometimes be very useful (e.g. under MSW this is necessary for
@@ -302,6 +297,11 @@ protected:
 
 #endif // wxUSE_GUI
 
 
 #endif // wxUSE_GUI
 
+// include the header defining wxConsoleEventLoop for Unix systems
+#if defined(__UNIX__)
+#include "wx/unix/evtloop.h"
+#endif
+
 #if wxUSE_GUI
     // we use a class rather than a typedef because wxEventLoop is
     // forward-declared in many places
 #if wxUSE_GUI
     // we use a class rather than a typedef because wxEventLoop is
     // forward-declared in many places
index bc6b5fddfe9a51502c3d9db9eb2f6defb10c5f04..b86cfeecf3c74c8aa4f179aa24804ea08367d8f1 100644 (file)
@@ -70,6 +70,9 @@ protected:
     // the loop exit code
     int m_exitcode;
     
     // the loop exit code
     int m_exitcode;
     
+    // cfrunloop
+    CFRunLoopRef m_runLoop;
+    
     // runloop observer
     CFRunLoopObserverRef m_runLoopObserver;
     
     // runloop observer
     CFRunLoopObserverRef m_runLoopObserver;
     
index 1c47c5cd55c6b033c3e8dc98da61d5f679cd8270..4c57136f3ac50dc1c6469742f29bfc16d7f8bb0a 100644 (file)
@@ -27,7 +27,7 @@ namespace wxPrivate
 
 class WXDLLIMPEXP_BASE wxConsoleEventLoop 
 #ifdef __WXOSX__
 
 class WXDLLIMPEXP_BASE wxConsoleEventLoop 
 #ifdef __WXOSX__
-: public wxEventLoopBase
+: public wxCFEventLoop
 #else
 : public wxEventLoopManual
 #endif
 #else
 : public wxEventLoopManual
 #endif
index 429312ac8871b2c570a716bfb6808859e0047ed4..fae9a5dc5d56b8d08b0dcf10b7d71fb9c8a67e4b 100644 (file)
@@ -186,16 +186,19 @@ wxCFEventLoop::wxCFEventLoop()
 {
     m_shouldExit = false;
     
 {
     m_shouldExit = false;
     
+    m_runLoop = CFGetCurrentRunLoop();
+    
     CFRunLoopObserverContext ctxt;
     bzero( &ctxt, sizeof(ctxt) );
     ctxt.info = this;
     m_runLoopObserver = CFRunLoopObserverCreate( kCFAllocatorDefault, kCFRunLoopBeforeTimers | kCFRunLoopBeforeWaiting , true /* repeats */, 0, 
                                                 wxObserverCallBack, &ctxt );
     CFRunLoopObserverContext ctxt;
     bzero( &ctxt, sizeof(ctxt) );
     ctxt.info = this;
     m_runLoopObserver = CFRunLoopObserverCreate( kCFAllocatorDefault, kCFRunLoopBeforeTimers | kCFRunLoopBeforeWaiting , true /* repeats */, 0, 
                                                 wxObserverCallBack, &ctxt );
-    CFRunLoopAddObserver(CFGetCurrentRunLoop(), m_runLoopObserver, kCFRunLoopDefaultMode);
+    CFRunLoopAddObserver(m_runLoop, m_runLoopObserver, kCFRunLoopDefaultMode);
 }
 
 wxCFEventLoop::~wxCFEventLoop()
 {
 }
 
 wxCFEventLoop::~wxCFEventLoop()
 {
+    CFRunLoopRemoveObserver(m_runLoop, m_runLoopObserver, kCFRunLoopDefaultMode);
 }
                         
 
 }