]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/osx/evtloop.h
adding bestsize for osx_cocoa combobox
[wxWidgets.git] / include / wx / osx / evtloop.h
index 86509da3112f1f3de83c2b97d5dda77c43812aa6..45b411e9031084ff919f70840f7131bfd6160faf 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        include/wx/mac/evtloop.h
+// Name:        include/wx/osx/evtloop.h
 // Purpose:     simply forwards to wx/mac/carbon/evtloop.h for consistency with
 //              the other Mac headers
 // Author:      Vadim Zeitlin
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifdef __WXMAC_CLASSIC__
-    #error "wxEventLoop is not implemented for Classic build."
+#ifndef _WX_OSX_EVTLOOP_H_
+#define _WX_OSX_EVTLOOP_H_
+
+DECLARE_WXOSX_OPAQUE_CFREF( CFRunLoop );
+DECLARE_WXOSX_OPAQUE_CFREF( CFRunLoopObserver );
+
+class WXDLLIMPEXP_BASE wxCFEventLoop : public wxEventLoopBase
+{
+public:
+    wxCFEventLoop();
+    virtual ~wxCFEventLoop();
+
+    // enters a loop calling OnNextIteration(), Pending() and Dispatch() and
+    // terminating when Exit() is called
+    virtual int Run();
+    
+    // sets the "should exit" flag and wakes up the loop so that it terminates
+    // soon
+    virtual void Exit(int rc = 0);
+    
+    // return true if any events are available
+    virtual bool Pending() const;
+    
+    // dispatch a single event, return false if we should exit from the loop
+    virtual bool Dispatch();
+    
+    // same as Dispatch() but doesn't wait for longer than the specified (in
+    // ms) timeout, return true if an event was processed, false if we should
+    // exit the loop or -1 if timeout expired
+    virtual int DispatchTimeout(unsigned long timeout);
+
+    // implement this to wake up the loop: usually done by posting a dummy event
+    // to it (can be called from non main thread)
+    virtual void WakeUp();
+    
+    virtual bool YieldFor(long eventsToProcess);
+
+#if wxUSE_EVENTLOOP_SOURCE
+    virtual wxEventLoopSource *
+      AddSourceForFD(int fd, wxEventLoopSourceHandler *handler, int flags);
+#endif // wxUSE_EVENTLOOP_SOURCE
+
+    void ObserverCallBack(CFRunLoopObserverRef observer, int activity);
+
+protected:
+    // get the currently executing CFRunLoop
+    virtual CFRunLoopRef CFGetCurrentRunLoop() const;
+
+    virtual int DoDispatchTimeout(unsigned long timeout);
+    
+    virtual void DoRun();
+
+    virtual void DoStop();
+    
+    // should we exit the loop?
+    bool m_shouldExit;
+
+    // the loop exit code
+    int m_exitcode;
+    
+    // cfrunloop
+    CFRunLoopRef m_runLoop;
+    
+    // runloop observer
+    CFRunLoopObserverRef m_runLoopObserver;
+    
+private:
+    // process all already pending events and dispatch a new one (blocking
+    // until it appears in the event queue if necessary)
+    //
+    // returns the return value of DoDispatchTimeout()
+    int DoProcessEvents();
+};
+
+#if wxUSE_GUI
+
+#ifdef __WXOSX_COCOA__
+    #include "wx/osx/cocoa/evtloop.h"
 #else
-    #include "wx/mac/carbon/evtloop.h"
+    #include "wx/osx/carbon/evtloop.h"
 #endif
 
+class WXDLLIMPEXP_FWD_CORE wxWindow;
+class WXDLLIMPEXP_FWD_CORE wxNonOwnedWindow;
+
+class WXDLLIMPEXP_CORE wxModalEventLoop : public wxGUIEventLoop
+{
+public:
+    wxModalEventLoop(wxWindow *modalWindow);
+    wxModalEventLoop(WXWindow modalNativeWindow);
+    
+protected:
+    virtual void DoRun();
+    
+    virtual void DoStop();
+    
+    // (in case) the modal window for this event loop
+    wxNonOwnedWindow* m_modalWindow;
+    WXWindow m_modalNativeWindow;
+};
+
+#endif // wxUSE_GUI
+
+#endif // _WX_OSX_EVTLOOP_H_