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/dialog.h \
|
||||||
wx/cocoa/dirdlg.h \
|
wx/cocoa/dirdlg.h \
|
||||||
wx/cocoa/drawer.h \
|
wx/cocoa/drawer.h \
|
||||||
|
wx/cocoa/evtloop.h \
|
||||||
wx/cocoa/filedlg.h \
|
wx/cocoa/filedlg.h \
|
||||||
wx/cocoa/font.h \
|
wx/cocoa/font.h \
|
||||||
wx/cocoa/fontdlg.h \
|
wx/cocoa/fontdlg.h \
|
||||||
|
@@ -2682,6 +2682,7 @@ src/osx/iphone/window.mm
|
|||||||
wx/cocoa/dialog.h
|
wx/cocoa/dialog.h
|
||||||
wx/cocoa/dirdlg.h
|
wx/cocoa/dirdlg.h
|
||||||
wx/cocoa/drawer.h
|
wx/cocoa/drawer.h
|
||||||
|
wx/cocoa/evtloop.h
|
||||||
wx/cocoa/filedlg.h
|
wx/cocoa/filedlg.h
|
||||||
wx/cocoa/font.h
|
wx/cocoa/font.h
|
||||||
wx/cocoa/fontdlg.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"
|
#include "wx/msw/evtloop.h"
|
||||||
#elif defined(__WXMAC__)
|
#elif defined(__WXMAC__)
|
||||||
#include "wx/osx/evtloop.h"
|
#include "wx/osx/evtloop.h"
|
||||||
|
#elif defined(__WXCOCOA__)
|
||||||
|
#include "wx/cocoa/evtloop.h"
|
||||||
#elif defined(__WXDFB__)
|
#elif defined(__WXDFB__)
|
||||||
#include "wx/dfb/evtloop.h"
|
#include "wx/dfb/evtloop.h"
|
||||||
#elif defined(__WXGTK20__)
|
#elif defined(__WXGTK20__)
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "wx/wxprec.h"
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/app.h"
|
#include "wx/app.h"
|
||||||
@@ -21,25 +22,6 @@
|
|||||||
#import <AppKit/NSEvent.h>
|
#import <AppKit/NSEvent.h>
|
||||||
#import <Foundation/NSRunLoop.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
|
// wxGUIEventLoop
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
@@ -48,11 +30,6 @@ private:
|
|||||||
// wxGUIEventLoop running and exiting
|
// wxGUIEventLoop running and exiting
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxGUIEventLoop::~wxGUIEventLoop()
|
|
||||||
{
|
|
||||||
wxASSERT_MSG( !m_impl, _T("should have been deleted in Run()") );
|
|
||||||
}
|
|
||||||
|
|
||||||
int wxGUIEventLoop::Run()
|
int wxGUIEventLoop::Run()
|
||||||
{
|
{
|
||||||
// event loops are not recursive, you need to create another loop!
|
// event loops are not recursive, you need to create another loop!
|
||||||
@@ -60,24 +37,18 @@ int wxGUIEventLoop::Run()
|
|||||||
|
|
||||||
wxEventLoopActivator activate(this);
|
wxEventLoopActivator activate(this);
|
||||||
|
|
||||||
m_impl = new wxEventLoopImpl;
|
|
||||||
|
|
||||||
[[NSApplication sharedApplication] run];
|
[[NSApplication sharedApplication] run];
|
||||||
|
|
||||||
OnExit();
|
OnExit();
|
||||||
|
|
||||||
int exitcode = m_impl->GetExitCode();
|
return m_exitcode;
|
||||||
delete m_impl;
|
|
||||||
m_impl = NULL;
|
|
||||||
|
|
||||||
return exitcode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxGUIEventLoop::Exit(int rc)
|
void wxGUIEventLoop::Exit(int rc)
|
||||||
{
|
{
|
||||||
wxCHECK_RET( IsRunning(), _T("can't call Exit() if not running") );
|
wxCHECK_RET( IsRunning(), _T("can't call Exit() if not running") );
|
||||||
|
|
||||||
m_impl->SetExitCode(rc);
|
m_exitcode = rc;
|
||||||
|
|
||||||
NSApplication *cocoaApp = [NSApplication sharedApplication];
|
NSApplication *cocoaApp = [NSApplication sharedApplication];
|
||||||
wxLogTrace(wxTRACE_COCOA,wxT("wxEventLoop::Exit isRunning=%d"), (int)[cocoaApp isRunning]);
|
wxLogTrace(wxTRACE_COCOA,wxT("wxEventLoop::Exit isRunning=%d"), (int)[cocoaApp isRunning]);
|
||||||
@@ -125,8 +96,24 @@ bool wxGUIEventLoop::Dispatch()
|
|||||||
dequeue: YES])
|
dequeue: YES])
|
||||||
{
|
{
|
||||||
[cocoaApp sendEvent: event];
|
[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