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
6 // Author: Vadim Zeitlin
10 // Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
11 // Licence: wxWindows licence
12 ///////////////////////////////////////////////////////////////////////////////
14 #ifndef _WX_OSX_EVTLOOP_H_
15 #define _WX_OSX_EVTLOOP_H_
17 DECLARE_WXOSX_OPAQUE_CFREF( CFRunLoop
);
18 DECLARE_WXOSX_OPAQUE_CFREF( CFRunLoopObserver
);
20 class WXDLLIMPEXP_BASE wxCFEventLoopPauseIdleEvents
;
22 class WXDLLIMPEXP_BASE wxCFEventLoop
: public wxEventLoopBase
24 friend class wxCFEventLoopPauseIdleEvents
;
27 virtual ~wxCFEventLoop();
29 // enters a loop calling OnNextIteration(), Pending() and Dispatch() and
30 // terminating when Exit() is called
33 // sets the "should exit" flag and wakes up the loop so that it terminates
35 virtual void Exit(int rc
= 0);
37 // return true if any events are available
38 virtual bool Pending() const;
40 // dispatch a single event, return false if we should exit from the loop
41 virtual bool Dispatch();
43 // same as Dispatch() but doesn't wait for longer than the specified (in
44 // ms) timeout, return true if an event was processed, false if we should
45 // exit the loop or -1 if timeout expired
46 virtual int DispatchTimeout(unsigned long timeout
);
48 // implement this to wake up the loop: usually done by posting a dummy event
49 // to it (can be called from non main thread)
50 virtual void WakeUp();
52 virtual bool YieldFor(long eventsToProcess
);
54 #if wxUSE_EVENTLOOP_SOURCE
55 virtual wxEventLoopSource
*
56 AddSourceForFD(int fd
, wxEventLoopSourceHandler
*handler
, int flags
);
57 #endif // wxUSE_EVENTLOOP_SOURCE
60 void CommonModeObserverCallBack(CFRunLoopObserverRef observer
, int activity
);
61 void DefaultModeObserverCallBack(CFRunLoopObserverRef observer
, int activity
);
63 // set to false to avoid idling at unexpected moments - eg when having native message boxes
64 void SetProcessIdleEvents(bool process
) { m_processIdleEvents
= process
; }
66 static void OSXCommonModeObserverCallBack(CFRunLoopObserverRef observer
, int activity
, void *info
);
67 static void OSXDefaultModeObserverCallBack(CFRunLoopObserverRef observer
, int activity
, void *info
);
69 // get the currently executing CFRunLoop
70 virtual CFRunLoopRef
CFGetCurrentRunLoop() const;
72 virtual int DoDispatchTimeout(unsigned long timeout
);
76 virtual void DoStop();
78 // should we exit the loop?
85 CFRunLoopRef m_runLoop
;
87 // common modes runloop observer
88 CFRunLoopObserverRef m_commonModeRunLoopObserver
;
90 // default mode runloop observer
91 CFRunLoopObserverRef m_defaultModeRunLoopObserver
;
93 // set to false to avoid idling at unexpected moments - eg when having native message boxes
94 bool m_processIdleEvents
;
97 // process all already pending events and dispatch a new one (blocking
98 // until it appears in the event queue if necessary)
100 // returns the return value of DoDispatchTimeout()
101 int DoProcessEvents();
103 wxDECLARE_NO_COPY_CLASS(wxCFEventLoop
);
106 class WXDLLIMPEXP_BASE wxCFEventLoopPauseIdleEvents
: public wxObject
109 wxCFEventLoopPauseIdleEvents();
110 virtual ~wxCFEventLoopPauseIdleEvents();
115 #ifdef __WXOSX_COCOA__
116 #include "wx/osx/cocoa/evtloop.h"
118 #include "wx/osx/carbon/evtloop.h"
121 class WXDLLIMPEXP_FWD_CORE wxWindow
;
122 class WXDLLIMPEXP_FWD_CORE wxNonOwnedWindow
;
124 class WXDLLIMPEXP_CORE wxModalEventLoop
: public wxGUIEventLoop
127 wxModalEventLoop(wxWindow
*modalWindow
);
128 wxModalEventLoop(WXWindow modalNativeWindow
);
131 virtual void DoRun();
133 virtual void DoStop();
135 // (in case) the modal window for this event loop
136 wxNonOwnedWindow
* m_modalWindow
;
137 WXWindow m_modalNativeWindow
;
142 #endif // _WX_OSX_EVTLOOP_H_