监听新的 shell

Listen for New Shells

我们应用程序的首选项是共享的(即办公室中的所有用户都有相同的首选项)。为此,我们实现了一个自定义 IPreferenceStore,用于将数据保存和(重新)加载到数据库或从数据库加载数据。

当然,当首选项 window 处于打开状态时,我们不能让 IPreferenceStore 重新加载 - 至少在这种情况下我们应该传递某种信息或其他信息。所以我需要有一种方法来收听 PreferenceDialog 开场。

由于我们正在实施 Eclipse 应用程序,如果无法直接对首选项对话框做出反应,则监听 Shells 打开并检查其标题可能就足够了。

我尝试了什么:

// this only reacts to the main window changing
PlatformUI.getWorkbench().addWindowListener(new IWindowListener() { ... });

// shells (and composites in general) are missing listeners for
// adding child controls
Shell currentShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
currentShell.addListener(SWT.???, e-> System.out.println(e));

// what listeners do display even have?
Display.getDefault().addListener(SWT.???, e-> System.out.println(e));

有什么想法吗?

Display.addFilter for SWT.Activate 确实会在 shell 被激活时给出一个事件(以及许多其他事情)。出于某种原因 addListener 在我的测试中不起作用。

Display.getDefault().addFilter(SWT.Activate, listener);

Eventwidget 字段包含正在激活的控件。