implement DispatchTimeout() for wxCocoa
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57620 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -2489,6 +2489,7 @@ COND_TOOLKIT_COCOA_GUI_HDR = \
|
||||
wx/cocoa/dialog.h \
|
||||
wx/cocoa/dirdlg.h \
|
||||
wx/cocoa/drawer.h \
|
||||
wx/cocoa/evtloop.h \
|
||||
wx/cocoa/filedlg.h \
|
||||
wx/cocoa/font.h \
|
||||
wx/cocoa/fontdlg.h \
|
||||
|
@@ -2682,6 +2682,7 @@ src/osx/iphone/window.mm
|
||||
wx/cocoa/dialog.h
|
||||
wx/cocoa/dirdlg.h
|
||||
wx/cocoa/drawer.h
|
||||
wx/cocoa/evtloop.h
|
||||
wx/cocoa/filedlg.h
|
||||
wx/cocoa/font.h
|
||||
wx/cocoa/fontdlg.h
|
||||
|
37
include/wx/cocoa/evtloop.h
Normal file
37
include/wx/cocoa/evtloop.h
Normal file
@@ -0,0 +1,37 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/cocoa/evtloop.h
|
||||
// Purpose: declaration of wxGUIEventLoop for wxCocoa
|
||||
// Author: Vadim Zeitlin
|
||||
// Created: 2008-12-28
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_COCOA_EVTLOOP_H_
|
||||
#define _WX_COCOA_EVTLOOP_H_
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGUIEventLoop for wxCocoa
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_CORE wxGUIEventLoop : public wxEventLoopBase
|
||||
{
|
||||
public:
|
||||
wxGUIEventLoop() { m_exitcode = 0; }
|
||||
|
||||
virtual int Run();
|
||||
virtual void Exit(int rc = 0);
|
||||
virtual bool Pending() const;
|
||||
virtual bool Dispatch();
|
||||
virtual int DispatchTimeout(unsigned long timeout);
|
||||
virtual void WakeUp() { }
|
||||
|
||||
protected:
|
||||
int m_exitcode;
|
||||
|
||||
DECLARE_NO_COPY_CLASS(wxGUIEventLoop)
|
||||
};
|
||||
|
||||
#endif // _WX_COCOA_EVTLOOP_H_
|
||||
|
@@ -124,6 +124,8 @@ protected:
|
||||
#include "wx/msw/evtloop.h"
|
||||
#elif defined(__WXMAC__)
|
||||
#include "wx/osx/evtloop.h"
|
||||
#elif defined(__WXCOCOA__)
|
||||
#include "wx/cocoa/evtloop.h"
|
||||
#elif defined(__WXDFB__)
|
||||
#include "wx/dfb/evtloop.h"
|
||||
#elif defined(__WXGTK20__)
|
||||
|
@@ -10,6 +10,7 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/log.h"
|
||||
#include "wx/app.h"
|
||||
@@ -21,25 +22,6 @@
|
||||
#import <AppKit/NSEvent.h>
|
||||
#import <Foundation/NSRunLoop.h>
|
||||
|
||||
// ========================================================================
|
||||
// wxEventLoopImpl
|
||||
// ========================================================================
|
||||
|
||||
class WXDLLEXPORT wxEventLoopImpl
|
||||
{
|
||||
public:
|
||||
// ctor
|
||||
wxEventLoopImpl() { SetExitCode(0); }
|
||||
|
||||
// set/get the exit code
|
||||
void SetExitCode(int exitcode) { m_exitcode = exitcode; }
|
||||
int GetExitCode() const { return m_exitcode; }
|
||||
|
||||
private:
|
||||
// the exit code of the event loop
|
||||
int m_exitcode;
|
||||
};
|
||||
|
||||
// ========================================================================
|
||||
// wxGUIEventLoop
|
||||
// ========================================================================
|
||||
@@ -48,11 +30,6 @@ private:
|
||||
// wxGUIEventLoop running and exiting
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxGUIEventLoop::~wxGUIEventLoop()
|
||||
{
|
||||
wxASSERT_MSG( !m_impl, _T("should have been deleted in Run()") );
|
||||
}
|
||||
|
||||
int wxGUIEventLoop::Run()
|
||||
{
|
||||
// event loops are not recursive, you need to create another loop!
|
||||
@@ -60,24 +37,18 @@ int wxGUIEventLoop::Run()
|
||||
|
||||
wxEventLoopActivator activate(this);
|
||||
|
||||
m_impl = new wxEventLoopImpl;
|
||||
|
||||
[[NSApplication sharedApplication] run];
|
||||
|
||||
OnExit();
|
||||
|
||||
int exitcode = m_impl->GetExitCode();
|
||||
delete m_impl;
|
||||
m_impl = NULL;
|
||||
|
||||
return exitcode;
|
||||
return m_exitcode;
|
||||
}
|
||||
|
||||
void wxGUIEventLoop::Exit(int rc)
|
||||
{
|
||||
wxCHECK_RET( IsRunning(), _T("can't call Exit() if not running") );
|
||||
|
||||
m_impl->SetExitCode(rc);
|
||||
m_exitcode = rc;
|
||||
|
||||
NSApplication *cocoaApp = [NSApplication sharedApplication];
|
||||
wxLogTrace(wxTRACE_COCOA,wxT("wxEventLoop::Exit isRunning=%d"), (int)[cocoaApp isRunning]);
|
||||
@@ -125,8 +96,24 @@ bool wxGUIEventLoop::Dispatch()
|
||||
dequeue: YES])
|
||||
{
|
||||
[cocoaApp sendEvent: event];
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int wxGUIEventLoop::DispatchTimeout(unsigned long timeout)
|
||||
{
|
||||
NSApplication *cocoaApp = [NSApplication sharedApplication];
|
||||
NSEvent *event = [cocoaApp
|
||||
nextEventMatchingMask:NSAnyEventMask
|
||||
untilDate:[[NSDate alloc] initWithTimeIntervalSinceNow:timeout/1000]
|
||||
inMode:NSDefaultRunLoopMode
|
||||
dequeue: YES];
|
||||
if ( !event )
|
||||
return -1;
|
||||
|
||||
[cocoaApp sendEvent: event];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user