在我们的RCP应用程序中,我们需要使用全局键事件处理程序(通过Display.addFilter())来进行更高级的键事件处理/路由,而不管当前的焦点。我们需要能够确定某个路由逻辑当前是否打开了一个对话框。
似乎是一个相当微不足道的问题,但我仍然在Widget层次结构,Shells,WindowManagers中遇到死胡同。
我正在寻找一个强大的解决方案,不需要对使用标准框架对话框的Dialog实现者或客户端代码进行任何额外的工作。
答案 0 :(得分:2)
在下面的示例中,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();
}
}
}
});
在Mac上按下shell
+ ⌘
时,此示例代码将关闭W
。