如何确定JFace或SWT对话框当前是否已打开?

时间:2010-08-16 06:17:38

标签: dialog swt eclipse-rcp jface

在我们的RCP应用程序中,我们需要使用全局键事件处理程序(通过Display.addFilter())来进行更高级的键事件处理/路由,而不管当前的焦点。我们需要能够确定某个路由逻辑当前是否打开了一个对话框。

似乎是一个相当微不足道的问题,但我仍然在Widget层次结构,Shells,WindowManagers中遇到死胡同。

我正在寻找一个强大的解决方案,不需要对使用标准框架对话框的Dialog实现者或客户端代码进行任何额外的工作。

1 个答案:

答案 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