]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/macnotfy.cpp
test wxExecute() in the sample
[wxWidgets.git] / src / mac / carbon / macnotfy.cpp
index 9d0a2a834674c5ecb499d02139d42504687b1774..507605510db7d7c126d65b0a07ea3f64a8b47969 100644 (file)
@@ -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 ;
 }