#include "wx/app.h"
#endif // WX_PRECOMP
+#include "wx/log.h"
+
#include "wx/osx/private.h"
// ============================================================================
// wxEventLoop implementation
// ============================================================================
+/*
+static int CalculateNSEventMaskFromEventCategory(wxEventCategory cat)
+{
+ NSLeftMouseDownMask |
+ NSLeftMouseUpMask |
+ NSRightMouseDownMask |
+ NSRightMouseUpMask = 1 << NSRightMouseUp,
+ NSMouseMovedMask = 1 << NSMouseMoved,
+ NSLeftMouseDraggedMask = 1 << NSLeftMouseDragged,
+ NSRightMouseDraggedMask = 1 << NSRightMouseDragged,
+ NSMouseEnteredMask = 1 << NSMouseEntered,
+ NSMouseExitedMask = 1 << NSMouseExited,
+ NSScrollWheelMask = 1 << NSScrollWheel,
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
+ NSTabletPointMask = 1 << NSTabletPoint,
+ NSTabletProximityMask = 1 << NSTabletProximity,
+#endif
+ NSOtherMouseDownMask = 1 << NSOtherMouseDown,
+ NSOtherMouseUpMask = 1 << NSOtherMouseUp,
+ NSOtherMouseDraggedMask = 1 << NSOtherMouseDragged,
+
+
+
+ NSKeyDownMask = 1 << NSKeyDown,
+ NSKeyUpMask = 1 << NSKeyUp,
+ NSFlagsChangedMask = 1 << NSFlagsChanged,
+
+ NSAppKitDefinedMask = 1 << NSAppKitDefined,
+ NSSystemDefinedMask = 1 << NSSystemDefined,
+ NSApplicationDefinedMask = 1 << NSApplicationDefined,
+ NSPeriodicMask = 1 << NSPeriodic,
+ NSCursorUpdateMask = 1 << NSCursorUpdate,
+
+ NSAnyEventMask = 0xffffffffU
+}
+*/
+
wxGUIEventLoop::wxGUIEventLoop()
{
m_sleepTime = 0.0;
wxMacWakeUp();
}
+CFRunLoopRef wxGUIEventLoop::CFGetCurrentRunLoop() const
+{
+ NSRunLoop* nsloop = [NSRunLoop currentRunLoop];
+ return [nsloop getCFRunLoop];
+}
+
+//-----------------------------------------------------------------------------
+// events dispatch and loop handling
+//-----------------------------------------------------------------------------
+
bool wxGUIEventLoop::Pending() const
{
wxMacAutoreleasePool autoreleasepool;
}
else
{
+ if (wxTheApp)
+ wxTheApp->ProcessPendingEvents();
+
if ( wxTheApp->ProcessIdle() )
m_sleepTime = 0.0 ;
else
return true;
}
+bool wxGUIEventLoop::YieldFor(long eventsToProcess)
+{
+#if wxUSE_THREADS
+ // Yielding from a non-gui thread needs to bail out, otherwise we end up
+ // possibly sending events in the thread too.
+ if ( !wxThread::IsMain() )
+ {
+ return true;
+ }
+#endif // wxUSE_THREADS
+
+ m_isInsideYield = true;
+ m_eventsToProcessInsideYield = eventsToProcess;
+
+#if wxUSE_LOG
+ // disable log flushing from here because a call to wxYield() shouldn't
+ // normally result in message boxes popping up &c
+ wxLog::Suspend();
+#endif // wxUSE_LOG
+
+ // process all pending events:
+ while ( Pending() )
+ Dispatch();
+
+ // it's necessary to call ProcessIdle() to update the frames sizes which
+ // might have been changed (it also will update other things set from
+ // OnUpdateUI() which is a nice (and desired) side effect)
+ while ( ProcessIdle() ) {}
+
+ // if there are pending events, we must process them.
+ if (wxTheApp)
+ wxTheApp->ProcessPendingEvents();
+
+#if wxUSE_LOG
+ wxLog::Resume();
+#endif // wxUSE_LOG
+ m_isInsideYield = false;
+
+ return true;
+}
+
int wxGUIEventLoop::DispatchTimeout(unsigned long timeout)
{
wxMacAutoreleasePool autoreleasepool;