我正在使用3.x-4.x兼容性层,我正在尝试打开并使用编辑器。我们现有的代码在实现IPartListener2
的类中看起来像这样:
public void partOpened(IWorkbenchPartReference partRef) {
if (partRef instanceof IEditorReference) {
//force editor area visible
partRef.getPage().setEditorAreaVisible(true);
// if the editors are currently minimimized and we try to maximize them, then we'll cause a bug.
if (partRef.getPage().getPartState(partRef) == IWorkbenchPage.STATE_MINIMIZED) {
return; // so exit here
}
//check preferences
final boolean maximized = EnterpriseManager.isMaximized();
if (maximized) {
partRef.getPage().setPartState(partRef, 1);
}
}
}
现在的问题是,只要在Mars中打开一个编辑器,它就不像以前那样在页面布局上打开最大化,但是窗口大小要小得多。
此外,在打开的编辑器规则栏上选择“还原”图标会导致编辑器的位置不稳定,编辑器的一部分位于布局的一部分中,而其他部分则显示在页面布局的其他区域中。
如何使用兼容层实现正确,可预测的编辑器使用?
答案 0 :(得分:0)
猜测但可能是Eclipse 4不喜欢在处理setEditorAreaActive
时调用setPartState
和partOpened
方法。在Display.asyncExec
代码完成之后,您可以尝试使用partOpened
来延迟调用这些代码。
类似的东西:
public void partOpened(final IWorkbenchPartReference partRef) {
Display.getDefault().asyncExec(new Runnable()
{
@Override
public void run()
{
if (partRef instanceof IEditorReference) {
//force editor area visible
partRef.getPage().setEditorAreaVisible(true);
// if the editors are currently minimimized and we try to maximize them, then we'll cause a bug.
if (partRef.getPage().getPartState(partRef) == IWorkbenchPage.STATE_MINIMIZED) {
return; // so exit here
}
//check preferences
final boolean maximized = EnterpriseManager.isMaximized();
if (maximized) {
partRef.getPage().setPartState(partRef, IWorkbenchPage.STATE_MAXIMIZED);
}
}
}
});
}