From 37696eb55845b8012193e264834dfff2d22a1f91 Mon Sep 17 00:00:00 2001 From: Simon Barner <barner@fortiss.org> Date: Thu, 11 Dec 2014 09:19:31 +0000 Subject: [PATCH] - Prevent nested calls of selectionChanged() which could trigger a refresh of the table before all column label providers / editing support has been initialized refs 1841 --- org.fortiss.tooling.base.ui/trunk/plugin.xml | 9 +++++++++ .../annotation/view/AnnotationViewPartBase.java | 16 +++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/org.fortiss.tooling.base.ui/trunk/plugin.xml b/org.fortiss.tooling.base.ui/trunk/plugin.xml index 479642b34..3b5fc75f4 100644 --- a/org.fortiss.tooling.base.ui/trunk/plugin.xml +++ b/org.fortiss.tooling.base.ui/trunk/plugin.xml @@ -21,4 +21,13 @@ </view> </extension> + <!--extension point="org.fortiss.tooling.kernel.migrationProvider"> + <migrationProvider + migrationProvider="org.fortiss.tooling.base.ui.annotation.AnnotationInstantiationMigrationProvider"> + <objectClass + objectClass="org.fortiss.tooling.kernel.extension.data.ITopLevelElement"> + </objectClass> + </migrationProvider> + </extension--> + </plugin> diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java index c57eee9bc..0464241c8 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java @@ -74,6 +74,9 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect private Map<EObject, Collection<AnnotationEntry>> lastAnnotationEntriesMap = new HashMap<EObject, Collection<AnnotationEntry>>(); + /** Flag to prevent nested calls of {@link #selectionChanged(IWorkbenchPart, ISelection)}. */ + private boolean processingSectionChanged = false; + /** * {@link Adapter} to watch for the addition, removal or value change of model elements * to/from/in elements visible in this {@link AnnotationViewPartBase} (to trigger according @@ -137,6 +140,11 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect /** {@inheritDoc} */ @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) { + if(processingSectionChanged) { + return; + } + processingSectionChanged = true; + currentlySelectedObject = null; currentlySelectedObject = SelectionUtils.checkAndPickFirst(selection, IModelElement.class); @@ -149,14 +157,12 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect } // Optimization: Do nothing if the same object as been selected again - if(currentlySelectedObject == lastSelectedObject) { - return; - } - - if(currentlySelectedObject != null) { + if(currentlySelectedObject != lastSelectedObject && currentlySelectedObject != null) { update(currentlySelectedObject); lastSelectedObject = currentlySelectedObject; } + + processingSectionChanged = false; } /** Determines root element of the given model element. */ -- GitLab