changed processing of events to only process the events that were logged when entering wxMacProcessNotifierEvents, ignoring eventually added new ones during notifier processing
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13577 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
4f5a32506a
commit
2c724d2535
@ -115,22 +115,31 @@ void wxMacProcessNotifierEvents()
|
||||
// return ;
|
||||
|
||||
gInProcessing = true ;
|
||||
while ( gMacNotificationEvents.top != gMacNotificationEvents.bottom )
|
||||
if ( gMacNotificationEvents.top != gMacNotificationEvents.bottom )
|
||||
{
|
||||
// consume event at bottom
|
||||
short index = gMacNotificationEvents.bottom++ ;
|
||||
if ( gMacNotificationEvents.bottom == kMaxEvents )
|
||||
gMacNotificationEvents.bottom = 0 ;
|
||||
void* data = gMacNotificationEvents.data[index] ;
|
||||
unsigned long event = gMacNotificationEvents.events[index] ;
|
||||
wxMacNotificationProcPtr handler = gMacNotificationEvents.proc[index] ;
|
||||
|
||||
gMacNotificationEvents.data[index] = NULL ;
|
||||
gMacNotificationEvents.events[index] = NULL ;
|
||||
gMacNotificationEvents.proc[index] = NULL ;
|
||||
|
||||
if ( handler )
|
||||
handler( event , data ) ;
|
||||
// we only should process the notifiers that were here when we entered it
|
||||
// otherwise we might never get out...
|
||||
short count = gMacNotificationEvents.top - gMacNotificationEvents.bottom ;
|
||||
if ( count < 0 )
|
||||
count += kMaxEvents ;
|
||||
|
||||
while ( count-- )
|
||||
{
|
||||
// consume event at bottom
|
||||
short index = gMacNotificationEvents.bottom++ ;
|
||||
if ( gMacNotificationEvents.bottom == kMaxEvents )
|
||||
gMacNotificationEvents.bottom = 0 ;
|
||||
void* data = gMacNotificationEvents.data[index] ;
|
||||
unsigned long event = gMacNotificationEvents.events[index] ;
|
||||
wxMacNotificationProcPtr handler = gMacNotificationEvents.proc[index] ;
|
||||
|
||||
gMacNotificationEvents.data[index] = NULL ;
|
||||
gMacNotificationEvents.events[index] = NULL ;
|
||||
gMacNotificationEvents.proc[index] = NULL ;
|
||||
|
||||
if ( handler )
|
||||
handler( event , data ) ;
|
||||
}
|
||||
}
|
||||
gInProcessing = false ;
|
||||
}
|
||||
|
@ -115,22 +115,31 @@ void wxMacProcessNotifierEvents()
|
||||
// return ;
|
||||
|
||||
gInProcessing = true ;
|
||||
while ( gMacNotificationEvents.top != gMacNotificationEvents.bottom )
|
||||
if ( gMacNotificationEvents.top != gMacNotificationEvents.bottom )
|
||||
{
|
||||
// consume event at bottom
|
||||
short index = gMacNotificationEvents.bottom++ ;
|
||||
if ( gMacNotificationEvents.bottom == kMaxEvents )
|
||||
gMacNotificationEvents.bottom = 0 ;
|
||||
void* data = gMacNotificationEvents.data[index] ;
|
||||
unsigned long event = gMacNotificationEvents.events[index] ;
|
||||
wxMacNotificationProcPtr handler = gMacNotificationEvents.proc[index] ;
|
||||
|
||||
gMacNotificationEvents.data[index] = NULL ;
|
||||
gMacNotificationEvents.events[index] = NULL ;
|
||||
gMacNotificationEvents.proc[index] = NULL ;
|
||||
|
||||
if ( handler )
|
||||
handler( event , data ) ;
|
||||
// we only should process the notifiers that were here when we entered it
|
||||
// otherwise we might never get out...
|
||||
short count = gMacNotificationEvents.top - gMacNotificationEvents.bottom ;
|
||||
if ( count < 0 )
|
||||
count += kMaxEvents ;
|
||||
|
||||
while ( count-- )
|
||||
{
|
||||
// consume event at bottom
|
||||
short index = gMacNotificationEvents.bottom++ ;
|
||||
if ( gMacNotificationEvents.bottom == kMaxEvents )
|
||||
gMacNotificationEvents.bottom = 0 ;
|
||||
void* data = gMacNotificationEvents.data[index] ;
|
||||
unsigned long event = gMacNotificationEvents.events[index] ;
|
||||
wxMacNotificationProcPtr handler = gMacNotificationEvents.proc[index] ;
|
||||
|
||||
gMacNotificationEvents.data[index] = NULL ;
|
||||
gMacNotificationEvents.events[index] = NULL ;
|
||||
gMacNotificationEvents.proc[index] = NULL ;
|
||||
|
||||
if ( handler )
|
||||
handler( event , data ) ;
|
||||
}
|
||||
}
|
||||
gInProcessing = false ;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user