X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2c724d25359c0d0d8d8c6592c7493c8c4dad54c8..9d5507f7a2701395e1d5c121bd877bb9066ee6ea:/src/mac/carbon/macnotfy.cpp?ds=inline diff --git a/src/mac/carbon/macnotfy.cpp b/src/mac/carbon/macnotfy.cpp index 507605510d..35516a1860 100644 --- a/src/mac/carbon/macnotfy.cpp +++ b/src/mac/carbon/macnotfy.cpp @@ -1,151 +1 @@ -/* ------------------------------------------------------------------------- - * Project: Mac Notifier Support - * Name: macnotfy.c - * Author: Stefan CSomor - * Purpose: Mac Notifier main file - * CVSID: $Id$ - * ------------------------------------------------------------------------- - */ - -#include "wx/wx.h" - -#include "wx/mac/private.h" - -#include "wx/mac/macnotfy.h" - -const short kMaxEvents = 1000 ; - -struct wxMacNotificationEvents -{ - short top ; - short bottom ; - - wxMacNotificationProcPtr proc[kMaxEvents] ; - unsigned long events[kMaxEvents] ; - void* data[kMaxEvents] ; -} ; - -typedef struct wxMacNotificationEvents wxMacNotificationEvents ; -wxMacNotificationEvents gMacNotificationEvents ; - -ProcessSerialNumber gAppProcess ; - -void wxMacWakeUp() -{ - ProcessSerialNumber psn ; - Boolean isSame ; - psn.highLongOfPSN = 0 ; - psn.lowLongOfPSN = kCurrentProcess ; - SameProcess( &gAppProcess , &psn , &isSame ) ; - if ( isSame ) - { - PostEvent( nullEvent , 0 ) ; - } - else - { - WakeUpProcess( &gAppProcess ) ; - } -} - -void wxMacCreateNotifierTable() -{ - GetCurrentProcess(&gAppProcess); - gMacNotificationEvents.top = 0 ; - gMacNotificationEvents.bottom = 0 ; - for ( int i = 0 ; i < kMaxEvents ; ++i ) - { - gMacNotificationEvents.proc[i] = NULL ; - gMacNotificationEvents.events[i] = NULL ; - gMacNotificationEvents.data[i] = NULL ; - } -} - -void wxMacDestroyNotifierTable() -{ -} - -wxMacNotifierTableRef wxMacGetNotifierTable() -{ - return (wxMacNotifierTableRef) &gMacNotificationEvents ; -} - -void wxMacAddEvent( - wxMacNotifierTableRef table , - wxMacNotificationProcPtr handler , - unsigned long event , - void* data , - short wakeUp ) -{ - wxMacNotificationEvents *e = (wxMacNotificationEvents *) table ; - wxASSERT_MSG( handler != NULL , "illegal notification proc ptr" ) ; - /* this should be protected eventually */ - short index = e->top++ ; - - if ( e->top == kMaxEvents ) - e->top = 0 ; - - e->proc[index] = handler ; - e->events[index] = event ; - e->data[index] = data ; - if ( wakeUp ) - wxMacWakeUp() ; -} - -bool gInProcessing = false ; - -void wxMacRemoveAllNotifiersForData( wxMacNotifierTableRef table , void* data ) -{ - wxMacNotificationEvents *e = (wxMacNotificationEvents *) table ; - /* this should be protected eventually */ - short index = e->bottom ; - - while ( e->top != index ) - { - if ( index == kMaxEvents ) - index = 0 ; - if ( e->data[index] == data ) - e->data[index] = NULL ; - index++ ; - } -} - -void wxMacProcessNotifierEvents() -{ -// if ( gInProcessing ) -// return ; - - gInProcessing = true ; - if ( gMacNotificationEvents.top != gMacNotificationEvents.bottom ) - { - // 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 ; -} - -void wxMacProcessNotifierAndPendingEvents() -{ - wxMacProcessNotifierEvents() ; - wxTheApp->ProcessPendingEvents() ; -} +// TODO REMOVE \ No newline at end of file