在我们的 RCP 应用程序中,无论当前焦点如何,我们都需要使用全局键事件处理程序(通过 Display.addFilter())来进行更高级的键事件处理/路由。我们需要能够确定当前是否为某些路由逻辑打开了一个对话框。
似乎是一个相当微不足道的问题,但我一直在解决 Widget 层次结构、Shell、WindowManagers 的死胡同。
我正在寻找一个强大的解决方案,它不需要 Dialog 实现者或使用标准框架对话框的客户端代码的任何额外工作。
最佳答案
在下面的示例中,shell
是范围内已定义的 Shell。您可以修改代码进行比较 activeShell
带有 Shell 列表。
shell.getDisplay().addFilter(SWT.KeyDown, new Listener() {
public void handleEvent(final Event event) {
if (shell.isDisposed()) {
return;
}
final Shell activeShell = shell.getDisplay().getActiveShell();
if (activeShell != null && activeShell.equals(shell)) {
if (event.stateMask == SWT.MOD1 && event.character == 'w') {
shell.dispose();
}
}
}
});
此示例代码将关闭
shell
当⌘
+ W
在 Mac 上按下。
关于dialog - 如何确定 JFace 或 SWT 对话框当前处于打开状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3490988/