implement DispatchTimeout() for wxOSX/Cocoa

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57621 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-12-28 14:32:49 +00:00
parent 1df4b19481
commit 9140731891
5 changed files with 52 additions and 2 deletions

View File

@@ -3070,6 +3070,7 @@ COND_TOOLKIT_OSX_COCOA_GUI_HDR = \
wx/osx/uma.h \
wx/osx/window.h \
wx/osx/cocoa/chkconf.h \
wx/osx/cocoa/evtloop.h \
wx/osx/cocoa/private.h \
wx/osx/core/colour.h \
wx/osx/carbon/accel.h \

View File

@@ -2522,6 +2522,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
</set>
<set var="OSX_COCOA_HDR" hints="files">
wx/osx/cocoa/chkconf.h
wx/osx/cocoa/evtloop.h
wx/osx/cocoa/private.h
$(OSX_CARBON_HDR) <!-- FIXME: these headers need moved somewhere shared... -->
wx/generic/region.h

View File

@@ -0,0 +1,31 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/cocoa/evtloop.h
// Purpose: declaration of wxGUIEventLoop for wxOSX/Cocoa
// Author: Vadim Zeitlin
// Created: 2008-12-28
// RCS-ID: $Id$
// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_OSX_COCOA_EVTLOOP_H_
#define _WX_OSX_COCOA_EVTLOOP_H_
class WXDLLIMPEXP_CORE wxGUIEventLoop : public wxEventLoopManual
{
public:
wxGUIEventLoop();
// implement/override base class pure virtual
virtual bool Pending() const;
virtual bool Dispatch();
virtual int DispatchTimeout(unsigned long timeout);
virtual void WakeUp();
private:
double m_sleepTime;
};
#endif // _WX_OSX_COCOA_EVTLOOP_H_

View File

@@ -10,8 +10,8 @@
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifdef __WXMAC_CLASSIC__
#error "wxEventLoop is not implemented for Classic build."
#ifdef __WXOSX_COCOA__
#include "wx/osx/cocoa/evtloop.h"
#else
#include "wx/osx/carbon/evtloop.h"
#endif

View File

@@ -92,3 +92,20 @@ bool wxGUIEventLoop::Dispatch()
return true;
}
int wxGUIEventLoop::DispatchTimeout(unsigned long timeout)
{
wxMacAutoreleasePool autoreleasepool;
NSEvent *event = [NSApp
nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate dateWithTimeIntervalSinceNow: timeout/1000]
inMode:NSDefaultRunLoopMode
dequeue: YES];
if ( !event )
return -1;
[NSApp sendEvent: event];
return true;
}