我有两个窗口的Eclipse RCP应用程序。 每个窗口都包含一些视图/编辑器。 一旦视图/编辑器从一个窗口移动到另一个窗口,我需要执行一些操作。因此,我需要以某种方式检测到该部件停靠在另一个窗口中。
目前我找到的唯一解决方案是在每个partActivated
事件上比较部件的工作台窗口和E4模型窗口:
IEditorPart editor = ...
MPart editorPart = (MPart) editor.getSite().getService(MPart.class);
EModelService modelService = editorPart.getContext().get(EModelService.class);
MWindow window = modelService.getTopLevelWindowFor(editorPart);
IWorkbenchWindow workbenchWindow = window.getContext().get(IWorkbenchWindow.class);
if (workbenchWindow != editor.getSite().getWorkbenchWindow()) {
// Editor was docked to another window
...
}
这种方法有效,因为一旦将部件移动到另一个窗口,其editor.getSite().getWorkbenchWindow()
窗口指向从E4模型点到窗口的旧窗口和窗口,其中部分当前抵抗。
但这看起来很难看,应该有更好的解决方案。