-start experimental use of RunApplicationEventLoop,

-storing current event for menu handling, because otherwise we get a redraw problem in wxWindow::Update which is called from the menu tracking code


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27400 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2004-05-23 10:59:23 +00:00
parent 7866e9c949
commit 3fbf8e7f3b

View File

@@ -69,6 +69,16 @@
extern wxList wxPendingDelete; extern wxList wxPendingDelete;
// set wxMAC_USE_RAEL to 1 if RunApplicationEventLoop should be used
// if 0 the lower level CarbonEventLoop will be used
// on the long run RAEL should replace the low level event loop
// we will have to clean up event handling to make sure we don't
// miss handling of things like pending events etc
// perhaps we will also have to pipe events through an ueber-event-handler
// to make sure we have one place to do all these house-keeping functions
#define wxMAC_USE_RAEL 0
#if wxUSE_THREADS #if wxUSE_THREADS
extern size_t g_numberOfThreads; extern size_t g_numberOfThreads;
#endif // wxUSE_THREADS #endif // wxUSE_THREADS
@@ -334,6 +344,9 @@ wxMacAppMenuEventHandler( EventHandlerCallRef handler , EventRef event , void *d
wxFrame* win = mbar->GetFrame(); wxFrame* win = mbar->GetFrame();
if ( win ) if ( win )
{ {
EventRef formerEvent = (EventRef) wxTheApp->MacGetCurrentEvent() ;
EventHandlerCallRef formerEventHandlerCallRef = (EventHandlerCallRef) wxTheApp->MacGetCurrentEventHandlerCallRef() ;
wxTheApp->MacSetCurrentEvent( event , handler ) ;
// VZ: we could find the menu from its handle here by examining all // VZ: we could find the menu from its handle here by examining all
// the menus in the menu bar recursively but knowing that neither // the menus in the menu bar recursively but knowing that neither
@@ -374,6 +387,8 @@ wxMacAppMenuEventHandler( EventHandlerCallRef handler , EventRef event , void *d
wxevent.SetEventObject(win); wxevent.SetEventObject(win);
(void)win->GetEventHandler()->ProcessEvent(wxevent); (void)win->GetEventHandler()->ProcessEvent(wxevent);
wxTheApp->MacSetCurrentEvent( formerEvent, formerEventHandlerCallRef ) ;
} }
} }
@@ -934,18 +949,23 @@ wxApp::wxApp()
int wxApp::MainLoop() int wxApp::MainLoop()
{ {
m_keepGoing = TRUE; m_keepGoing = TRUE;
#if wxMAC_USE_RAEL
RunApplicationEventLoop() ;
#else
while (m_keepGoing) while (m_keepGoing)
{ {
MacDoOneEvent() ; MacDoOneEvent() ;
} }
#endif
return 0; return 0;
} }
void wxApp::ExitMainLoop() void wxApp::ExitMainLoop()
{ {
m_keepGoing = FALSE; m_keepGoing = FALSE;
#if wxMAC_USE_RAEL
QuitApplicationEventLoop() ;
#endif
} }
// Is a message/event pending? // Is a message/event pending?