При нажатии на события Quartz, что такое CGEventType 0x1D (29)?

При работе с событиями Quartz я не могу найти какую-либо документацию о том, что такое событие 0x1D, 29 и как с ним бороться.

Я посмотрел здесь и ассортимент заголовочных файлов... https://developer.apple.com/documentation/coregraphics/cgeventtype?language=objc

Данное событие создается при использовании сенсорной панели и трекпада.

Моя конкретная проблема заключается в том, чтобы нажимать программные клавиши с тап-баром, как escape. Когда пользователь касается escape, происходит событие 0x1D. Если это событие не возвращается из обратного вызова, то события kCGEventKeyDown и kCGEventKeyUp никогда не запускаются. Если это событие возвращается, последующие события запускаются, как кнопка на традиционной клавиатуре.

eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, 0, kCGEventMaskForAllEvents, myCGEventCallback, NULL);

//No touch bar soft key events will ever fire
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type,  CGEventRef event, void *refcon) {
     if(type == 0x1D) {
          return NULL;
     }
}

Ясно, что я мог бы просто всегда слепо возвращать события этого типа, но я бы предпочел понять, что представляет собой это событие и какая информация доступна внутри его CGEventRef.

1 ответ

Решение

Иногда такие вещи скрыты в заголовочных файлах. Если вы посмотрите на NSEvent.h (CGEventType а также NSEventType карту на те же значения), вы найдете свое значение:

// snip...
/* The following event types are available on some hardware on 10.5.2 and later */
NSEventTypeGesture NS_ENUM_AVAILABLE_MAC(10_5)       = 29,
NSEventTypeMagnify NS_ENUM_AVAILABLE_MAC(10_5)       = 30,
NSEventTypeSwipe   NS_ENUM_AVAILABLE_MAC(10_5)       = 31,
// snip...

Так 29 это событие "жест".

Другие вопросы по тегам