我正在开发一个使用多个窗口的AIR应用程序。当主应用程序窗口不可见时,我遇到了一个我想打开新窗口(例如烤面包机通知)的问题,但行为因窗口的关闭方式而异。
当用户使用CMD-H隐藏所有应用程序窗口时,打开一个新窗口会导致所有应用程序窗口返回到前台(而不是像我期望的那样只是那个新窗口)。但是,如果用户使用CMD-W关闭了窗口,则在打开新窗口时该窗口不会显示。
有没有办法要么1)告诉用户何时使用cmd-h隐藏所有窗口或2)使用cmd-h与封闭的cmd-w判断窗口是否隐藏?
由于
答案 0 :(得分:0)
我实际上只是找到了解决这个问题的好方法。显然,原因 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);
}
感谢帮助搞清楚。