]> git.saurik.com Git - wxWidgets.git/blob - include/wx/osx/evtloop.h
35768078ad0241d273a2d3244bc7dda24c264665
[wxWidgets.git] / include / wx / osx / evtloop.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/osx/evtloop.h
3 // Purpose: simply forwards to wx/osx/carbon/evtloop.h or
4 // wx/osx/cocoa/evtloop.h for consistency with the other Mac
5 // headers
6 // Author: Vadim Zeitlin
7 // Modified by:
8 // Created: 2006-01-12
9 // RCS-ID: $Id$
10 // Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
11 // Licence: wxWindows licence
12 ///////////////////////////////////////////////////////////////////////////////
13
14 #ifndef _WX_OSX_EVTLOOP_H_
15 #define _WX_OSX_EVTLOOP_H_
16
17 DECLARE_WXOSX_OPAQUE_CFREF( CFRunLoop );
18 DECLARE_WXOSX_OPAQUE_CFREF( CFRunLoopObserver );
19
20 class WXDLLIMPEXP_BASE wxCFEventLoop : public wxEventLoopBase
21 {
22 public:
23 wxCFEventLoop();
24 virtual ~wxCFEventLoop();
25
26 // enters a loop calling OnNextIteration(), Pending() and Dispatch() and
27 // terminating when Exit() is called
28 virtual int Run();
29
30 // sets the "should exit" flag and wakes up the loop so that it terminates
31 // soon
32 virtual void Exit(int rc = 0);
33
34 // return true if any events are available
35 virtual bool Pending() const;
36
37 // dispatch a single event, return false if we should exit from the loop
38 virtual bool Dispatch();
39
40 // same as Dispatch() but doesn't wait for longer than the specified (in
41 // ms) timeout, return true if an event was processed, false if we should
42 // exit the loop or -1 if timeout expired
43 virtual int DispatchTimeout(unsigned long timeout);
44
45 // implement this to wake up the loop: usually done by posting a dummy event
46 // to it (can be called from non main thread)
47 virtual void WakeUp();
48
49 virtual bool YieldFor(long eventsToProcess);
50
51 #if wxUSE_EVENTLOOP_SOURCE
52 virtual wxEventLoopSource *
53 AddSourceForFD(int fd, wxEventLoopSourceHandler *handler, int flags);
54 #endif // wxUSE_EVENTLOOP_SOURCE
55
56 void ObserverCallBack(CFRunLoopObserverRef observer, int activity);
57
58 protected:
59 // get the currently executing CFRunLoop
60 virtual CFRunLoopRef CFGetCurrentRunLoop() const;
61
62 virtual int DoDispatchTimeout(unsigned long timeout);
63
64 virtual void DoRun();
65
66 virtual void DoStop();
67
68 // should we exit the loop?
69 bool m_shouldExit;
70
71 // the loop exit code
72 int m_exitcode;
73
74 // cfrunloop
75 CFRunLoopRef m_runLoop;
76
77 // runloop observer
78 CFRunLoopObserverRef m_runLoopObserver;
79
80 private:
81 // process all already pending events and dispatch a new one (blocking
82 // until it appears in the event queue if necessary)
83 //
84 // returns the return value of DoDispatchTimeout()
85 int DoProcessEvents();
86 };
87
88 #if wxUSE_GUI
89
90 #ifdef __WXOSX_COCOA__
91 #include "wx/osx/cocoa/evtloop.h"
92 #else
93 #include "wx/osx/carbon/evtloop.h"
94 #endif
95
96 class WXDLLIMPEXP_FWD_CORE wxWindow;
97 class WXDLLIMPEXP_FWD_CORE wxNonOwnedWindow;
98
99 class WXDLLIMPEXP_CORE wxModalEventLoop : public wxGUIEventLoop
100 {
101 public:
102 wxModalEventLoop(wxWindow *modalWindow);
103 wxModalEventLoop(WXWindow modalNativeWindow);
104
105 protected:
106 virtual void DoRun();
107
108 virtual void DoStop();
109
110 // (in case) the modal window for this event loop
111 wxNonOwnedWindow* m_modalWindow;
112 WXWindow m_modalNativeWindow;
113 };
114
115 #endif // wxUSE_GUI
116
117 #endif // _WX_OSX_EVTLOOP_H_