DECLARE_WXOSX_OPAQUE_CFREF( CFRunLoop );
DECLARE_WXOSX_OPAQUE_CFREF( CFRunLoopObserver );
+class WXDLLIMPEXP_BASE wxCFEventLoopPauseIdleEvents;
+
class WXDLLIMPEXP_BASE wxCFEventLoop : public wxEventLoopBase
{
+ friend class wxCFEventLoopPauseIdleEvents;
public:
wxCFEventLoop();
virtual ~wxCFEventLoop();
AddSourceForFD(int fd, wxEventLoopSourceHandler *handler, int flags);
#endif // wxUSE_EVENTLOOP_SOURCE
- void ObserverCallBack(CFRunLoopObserverRef observer, int activity);
-
protected:
+ void CommonModeObserverCallBack(CFRunLoopObserverRef observer, int activity);
+ void DefaultModeObserverCallBack(CFRunLoopObserverRef observer, int activity);
+
+ // set to false to avoid idling at unexpected moments - eg when having native message boxes
+ void SetProcessIdleEvents(bool process) { m_processIdleEvents = process; }
+
+ static void OSXCommonModeObserverCallBack(CFRunLoopObserverRef observer, int activity, void *info);
+ static void OSXDefaultModeObserverCallBack(CFRunLoopObserverRef observer, int activity, void *info);
+
// get the currently executing CFRunLoop
virtual CFRunLoopRef CFGetCurrentRunLoop() const;
// cfrunloop
CFRunLoopRef m_runLoop;
- // runloop observer
- CFRunLoopObserverRef m_runLoopObserver;
+ // common modes runloop observer
+ CFRunLoopObserverRef m_commonModeRunLoopObserver;
+
+ // default mode runloop observer
+ CFRunLoopObserverRef m_defaultModeRunLoopObserver;
+
+ // set to false to avoid idling at unexpected moments - eg when having native message boxes
+ bool m_processIdleEvents;
private:
// process all already pending events and dispatch a new one (blocking
//
// returns the return value of DoDispatchTimeout()
int DoProcessEvents();
+
+ wxDECLARE_NO_COPY_CLASS(wxCFEventLoop);
+};
+
+class WXDLLIMPEXP_BASE wxCFEventLoopPauseIdleEvents : public wxObject
+{
+public:
+ wxCFEventLoopPauseIdleEvents();
+ virtual ~wxCFEventLoopPauseIdleEvents();
};
#if wxUSE_GUI