При нажатии на события 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
это событие "жест".