Обнаружение отмены NSDraggingSession

Вопрос простой - может ли NSDraggingSource обнаружить отмену сеанса перетаскивания? Это должно происходить при нажатии клавиши Esc во время перетаскивания. Согласно моим исследованиям, нет никакой разницы между перетаскиванием элемента на целевой объект без перетаскивания (или объект, возвращающий false performDragOperation(_:)) и отменой. И мне нужно различать эти два и выполнять разные действия с объектом NSDraggingSource.

Любое предложение более чем приветствуется, как обычно ;-)


person Ivaylo Nikolov    schedule 05.12.2018    source источник
comment
Это немного хакерски, но, возможно, вы можете использовать текущее событие.   -  person Willeke    schedule 06.12.2018
comment
На самом деле при перетаскивании RunLoop находится в режиме EventTracking. Таким образом, все события сохраняются. Невозможно получить событие keyDown, если только не создать событие IOHIDManager и не запланировать его в RunLoop. К сожалению, фреймворк IOKit практически не используется Swift....   -  person Ivaylo Nikolov    schedule 06.12.2018
comment
Попробуйте currentEvent из NSApplication, в draggingSession(_:endedAt:operation:) его type равно LMouseUp или KeyDown.   -  person Willeke    schedule 06.12.2018
comment
Это очень... ОЧЕНЬ умное предложение. Сначала я не понял, что вы имеете в виду. Это вовсе не хакерство. Это логичный подход. И да - это сработало. Разумеется, что currentEvent будет событием keyDown в случае отмены с помощью Esc - это единственное событие keyDown, потребляемое при перетаскивании ;-). Пожалуйста, опишите это как ответ, чтобы я мог принять его.   -  person Ivaylo Nikolov    schedule 06.12.2018