OSX adaptions

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74603 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2013-07-27 19:00:25 +00:00
parent 3f66f6a5b3
commit a8123c1359
3 changed files with 32 additions and 2 deletions

View File

@@ -203,9 +203,9 @@ protected:
bool m_isInsideYield; bool m_isInsideYield;
long m_eventsToProcessInsideYield; long m_eventsToProcessInsideYield;
private:
// this flag is set on entry into Run() and reset before leaving it // this flag is set on entry into Run() and reset before leaving it
bool m_isInsideRun; bool m_isInsideRun;
private:
wxDECLARE_NO_COPY_CLASS(wxEventLoopBase); wxDECLARE_NO_COPY_CLASS(wxEventLoopBase);
}; };

View File

@@ -16,6 +16,8 @@ public:
wxGUIEventLoop(); wxGUIEventLoop();
~wxGUIEventLoop(); ~wxGUIEventLoop();
int Run();
void BeginModalSession( wxWindow* modalWindow ); void BeginModalSession( wxWindow* modalWindow );
void EndModalSession(); void EndModalSession();
@@ -25,6 +27,8 @@ public:
void OSXUseLowLevelWakeup(bool useIt) void OSXUseLowLevelWakeup(bool useIt)
{ m_osxLowLevelWakeUp = useIt ; } { m_osxLowLevelWakeUp = useIt ; }
void OSXOnWillTerminate();
protected: protected:
virtual int DoDispatchTimeout(unsigned long timeout); virtual int DoDispatchTimeout(unsigned long timeout);

View File

@@ -242,6 +242,26 @@ int wxGUIEventLoop::DoDispatchTimeout(unsigned long timeout)
static int gs_loopNestingLevel = 0; static int gs_loopNestingLevel = 0;
int wxGUIEventLoop::Run()
{
// because we are using native callbacks for notifying about entering and exiting
// the main event loop, we must this leave out here
// event loops are not recursive, you need to create another loop!
wxCHECK_MSG( !IsInsideRun(), -1, wxT("can't reenter a message loop") );
// We might be called again, after a previous call to ScheduleExit(), so
// reset this flag.
m_shouldExit = false;
// Set this variable to true for the duration of this method.
m_isInsideRun = true;
wxON_BLOCK_EXIT_SET(m_isInsideRun, false);
// Finally really run the loop.
return DoRun();
}
void wxGUIEventLoop::OSXDoRun() void wxGUIEventLoop::OSXDoRun()
{ {
/* /*
@@ -340,7 +360,8 @@ void wxGUIEventLoop::OSXDoStop()
// We should only stop the top level event loop. // We should only stop the top level event loop.
if ( gs_loopNestingLevel <= 1 ) if ( gs_loopNestingLevel <= 1 )
{ {
[NSApp stop:0]; // using terminate support all native notifications
[NSApp terminate:0];
} }
// For the top level loop only calling stop: is not enough when called from // For the top level loop only calling stop: is not enough when called from
@@ -350,6 +371,11 @@ void wxGUIEventLoop::OSXDoStop()
WakeUp(); WakeUp();
} }
void wxGUIEventLoop::OSXOnWillTerminate()
{
OnExit();
}
void wxGUIEventLoop::WakeUp() void wxGUIEventLoop::WakeUp()
{ {
// NSEvent* cevent = [NSApp currentEvent]; // NSEvent* cevent = [NSApp currentEvent];