CGEventTapCreate se descompone misteriosamente con eventos "key down"

Estoy usandoCGEventTapCreate "robar" las teclas multimedia de iTunes cuando mi aplicación se está ejecutando. El código dentro de la devolución de llamada que paso aCGEventTapCreate examina el evento y, si encuentra que es una de las claves multimedia, publica una notificación apropiada en el centro de notificaciones predeterminado.

Ahora, esto funciona bien si publico una notificación para el evento "key up". Si hago eso para los eventos "key down", eventualmente mi aplicación deja de recibir eventos clave de medios e iTunes se hace cargo. ¿Alguna idea sobre qué puede estar causando esto? La parte relevante del código está debajo

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 ...

Respuestas a la pregunta(3)

Su respuesta a la pregunta