Я на самом деле только что нашел хороший ответ на эту проблему. Очевидно, что причина cmd-H и cmd-W не вызывают события keyDown, потому что они перехватываются и останавливаются собственным меню приложения.
По умолчанию некоторые "нормальные" опции меню Mac OS добавляются в приложения AIR средой - они включают cmd-w для закрытия окна, cmd-h для скрытия и ярлыки для копирования / вырезания / вставки. Чтобы избежать поведения по умолчанию, я либо удалил эти пункты меню, либо изменил их ключевые эквиваленты (сочетание клавиш, которое их вызывает).
Код для добавления ярлыка настроек (cmd-,), переопределения cmd-w, изменения cmd-w на cmd-shift-w и переопределения функциональности cmd-h выглядит следующим образом:
if (NativeApplication.supportsMenu) {
var prefItem:NativeMenuItem = new NativeMenuItem("Preferences...");
prefItem.addEventListener(Event.SELECT, handlePreferencesMenuSelect);
prefItem.keyEquivalent = ",";
var closeItem:NativeMenuItem = new NativeMenuItem("Close Tab");
closeItem.addEventListener(Event.SELECT, handleCloseTabMenuSelect);
closeItem.keyEquivalent = "w";
// Add the preferences option under the first menu
// Also add a spacer line (like most other applications)
// Also change the hide command to our own handler
var baseMenu:NativeMenuItem = NativeMenuItem(NativeApplication.nativeApplication.menu.items[0]);
baseMenu.submenu.addItemAt(new NativeMenuItem("", true), 1);
baseMenu.submenu.addItemAt(prefItem, 2);
for (var idx:String in baseMenu.submenu.items) {
var menuItem:NativeMenuItem = baseMenu.submenu.items[idx];
if (menuItem && menuItem.keyEquivalent == 'h' && menuItem.keyEquivalentModifiers.length == 1) {
baseMenu.submenu.removeItemAt(int(idx));
var hideItem:NativeMenuItem = new NativeMenuItem("Hide Application");
hideItem.addEventListener(Event.SELECT, handleHideWindowSelect);
hideItem.keyEquivalent = "h";
baseMenu.submenu.addItemAt(hideItem, int(idx));
}
}
// Set the close window shortcut to cmd+shift+w, instead of cmd+w
var fileMenu:NativeMenuItem = NativeMenuItem(NativeApplication.nativeApplication.menu.items[1]);
NativeMenuItem(fileMenu.submenu.getItemAt(0)).keyEquivalent = 'W';
fileMenu.submenu.addItem(closeItem);
}
Спасибо за помощь в выяснении.