CGEventTapCreate divide-se misteriosamente com eventos "key down"

estou a usarCGEventTapCreate "roubar" chaves de mídia do iTunes quando meu aplicativo estiver em execução. O código dentro do retorno de chamada que eu transmito paraCGEventTapCreate examina o evento e, se achar que é uma das chaves de mídia, publica uma notificação apropriada no centro de notificações padrão.

Agora, isso funciona bem se eu postar uma notificação para o evento "key up". Se eu fizer isso para eventos de "pressionamento de tecla", eventualmente, meu aplicativo deixará de receber eventos de mídia e o iTunes assumirá o controle. Alguma idéia do que pode estar causando isso? A parte relevante do código está abaixo

enum { 
...
  PlayPauseKeyDown = 0x100A00,
  PlayPauseKeyUp = 0x100B00,
...
};

static CGEventRef event_tap_callback(CGEventTapProxy proxy,
                                     CGEventType type,
                                     CGEventRef event,
                                     void *refcon)
{
  if (!(type == NX_SYSDEFINED) || (type == NX_KEYUP) || (type == NX_KEYDOWN))
      return event;

  NSEvent* keyEvent = [NSEvent eventWithCGEvent: event];
  if (keyEvent.type != NSSystemDefined) return event;

  switch(keyEvent.data1)
  {
    case PlayPauseKeyUp:  // <--- this works reliably
    //case PlayPauseKeyDown:  // <--- this will break eventually
      post_notification(@"PlayPauseMediaKeyPressed", nil, nil);
      return NULL;

    ... and so on ...

questionAnswers(3)

yourAnswerToTheQuestion