如何检测工作台部件是否已停靠在Eclipse RCP中的另一个窗口中

时间:2015-02-19 18:24:58

标签: eclipse eclipse-rcp

我有两个窗口的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模型点到窗口的旧窗口和窗口,其中部分当前抵抗。

但这看起来很难看,应该有更好的解决方案。

0 个答案:

没有答案