X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.ui%2Fsrc%2Forg%2Fsimantics%2Fui%2Fworkbench%2FResourceEditorPart.java;h=ca06a5d7b5d538c9091fb8b71d7f45d26ad906d3;hp=5689cfa4b7dee2b8a655ad59e6cbe2746f868c27;hb=20c2fa2629081d808fe313e387951f69111236b6;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07 diff --git a/bundles/org.simantics.ui/src/org/simantics/ui/workbench/ResourceEditorPart.java b/bundles/org.simantics.ui/src/org/simantics/ui/workbench/ResourceEditorPart.java index 5689cfa4b..ca06a5d7b 100644 --- a/bundles/org.simantics.ui/src/org/simantics/ui/workbench/ResourceEditorPart.java +++ b/bundles/org.simantics.ui/src/org/simantics/ui/workbench/ResourceEditorPart.java @@ -9,6 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation * Semantum Oy - issue #4384 + * Semantum Oy - issue #7737 *******************************************************************************/ package org.simantics.ui.workbench; @@ -19,14 +20,16 @@ import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.PartInitException; +import org.eclipse.ui.internal.PartSite; +import org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor; import org.eclipse.ui.part.EditorPart; +import org.simantics.Simantics; import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.common.request.ParametrizedRead; -import org.simantics.db.event.ChangeListener; import org.simantics.db.management.ISessionContext; -import org.simantics.ui.SimanticsUI; /** * ResourceEditorPart is a base implementation for editors that support @@ -41,6 +44,7 @@ import org.simantics.ui.SimanticsUI; *

* * @author Tuukka Lehtonen + * @author Jani Simomaa */ public abstract class ResourceEditorPart extends EditorPart implements IResourceEditorPart { @@ -78,15 +82,53 @@ public abstract class ResourceEditorPart extends EditorPart implements IResource // Set initial part name according to the name given by IEditorInput setPartName(getEditorInput().getName()); - Session session = SimanticsUI.peekSession(); + Session session = Simantics.peekSession(); if (session != null) { Supplier disposedCallback = () -> disposed; session.asyncRequest( new TitleRequest(site.getId(), getResourceInput()), - new TitleUpdater(site.getShell().getDisplay(), this::setPartName, disposedCallback)); + new TitleUpdater(site.getShell().getDisplay(), this::safeSetPartName, disposedCallback)); session.asyncRequest( new ToolTipRequest(site.getId(), getResourceInput()), - new TitleUpdater(site.getShell().getDisplay(), this::setTitleToolTip, disposedCallback)); + new TitleUpdater(site.getShell().getDisplay(), this::safeSetTitleToolTip, disposedCallback)); + } + } + + /** + * Safely sets part name for parts whose IEditorInput is not yet disposed (e.g. + * removed from database) + * + * @param partName + */ + protected void safeSetPartName(String partName) { + if (!disposed && checkCompatibilityPartNotBeingDisposed()) { // this is to fix bug https://gitlab.simantics.org/simantics/platform/issues/117 + setPartName(partName); + } + } + + @SuppressWarnings("restriction") + private boolean checkCompatibilityPartNotBeingDisposed() { + IWorkbenchPartSite site = getSite(); + if (site instanceof PartSite) { + PartSite partSite = (PartSite) getSite(); + Object object = partSite.getModel().getObject(); + if (object instanceof CompatibilityEditor) { + CompatibilityEditor editor = (CompatibilityEditor) object; + return !editor.isBeingDisposed(); + } + } + return true; + } + + /** + * Safely sets title tooltip for parts whose IEditorInput is not yet disposed (e.g. + * removed from database) + * + * @param toolTip + */ + protected void safeSetTitleToolTip(String toolTip) { + if (!disposed) { + setTitleToolTip(toolTip); } }