Как определить, что диалог JFace или SWT в настоящее время открыт? - PullRequest
4 голосов
/ 16 августа 2010

В нашем приложении RCP нам нужно прибегнуть к использованию обработчика события глобального ключа (через Display.addFilter ()) для более сложной обработки / маршрутизации события ключа независимо от текущего фокуса. Нам необходимо определить, открыто ли в данный момент диалоговое окно для некоторой логики маршрутизации.

Похоже на довольно тривиальный вопрос, но я продолжаю заглядывать в тупики, уходя от иерархии виджетов, Оболочек, WindowManagers.

Я ищу надежное решение, которое не требовало бы дополнительной работы со стороны разработчиков Dialog или клиентского кода, использующего стандартные диалоговые окна платформы.

1 Ответ

2 голосов
/ 17 августа 2010

В приведенном ниже примере shell - это определенная оболочка в области.Вы можете изменить код для сравнения activeShell со списком оболочек.

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.

...