From 3e698571f6fc2be34f08a9f8e1d71e57a0067c84 Mon Sep 17 00:00:00 2001
From: Simon Barner <barner@fortiss.org>
Date: Wed, 8 Nov 2017 11:57:05 +0000
Subject: [PATCH] Update view only when it is raised. This will hide the
 performance problems of the view in the most typical configuration (where the
 annotation view is not visible) refs 3145

---
 .../view/AnnotationViewPartBase.java          | 53 ++++++++++++++++++-
 1 file changed, 51 insertions(+), 2 deletions(-)

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 c58051696..b41a5ebf0 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
@@ -37,8 +37,11 @@ import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IPartListener2;
 import org.eclipse.ui.ISelectionListener;
 import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.part.ViewPart;
 import org.fortiss.tooling.base.annotation.AnnotationEntry;
 import org.fortiss.tooling.base.annotation.IAnnotationValueService;
@@ -60,7 +63,7 @@ import org.fortiss.tooling.kernel.service.IPersistencyService;
  * @author barner
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating GREEN Hash: EE75EE9DA08E49EF36E644324B35D0B0
+ * @ConQAT.Rating YELLOW Hash: ABA34824715CBD59797ACBADB1163534
  */
 public abstract class AnnotationViewPartBase extends ViewPart implements ISelectionListener,
 		IAnnotationViewPart {
@@ -302,7 +305,53 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect
 	/** {@inheritDoc} */
 	@Override
 	public void createPartControl(Composite parent) {
-		getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this);
+		final IWorkbenchPartSite site = getSite();
+		site.getWorkbenchWindow().getSelectionService().addSelectionListener(this);
+		site.getPage().addPartListener(new IPartListener2() {
+			@Override
+			public void partActivated(IWorkbenchPartReference partRef) {
+				// Nothing to do
+			}
+
+			@Override
+			public void partBroughtToTop(IWorkbenchPartReference partRef) {
+				// Nothing to do
+			}
+
+			@Override
+			public void partClosed(IWorkbenchPartReference partRef) {
+				// Nothing to do
+			}
+
+			@Override
+			public void partDeactivated(IWorkbenchPartReference partRef) {
+				// Nothing to do
+			}
+
+			@Override
+			public void partOpened(IWorkbenchPartReference partRef) {
+				// Nothing to do
+			}
+
+			@Override
+			public void partHidden(IWorkbenchPartReference partRef) {
+				if(partRef.getId().equals(IAnnotationViewPart.ANNOTATION_VIEW_ID)) {
+					setUpdateEnabled(false);
+				}
+			}
+
+			@Override
+			public void partVisible(IWorkbenchPartReference partRef) {
+				if(partRef.getId().equals(IAnnotationViewPart.ANNOTATION_VIEW_ID)) {
+					setUpdateEnabled(true);
+				}
+			}
+
+			@Override
+			public void partInputChanged(IWorkbenchPartReference partRef) {
+				// Nothing to do
+			}
+		});
 	}
 
 	/** {@inheritDoc} */
-- 
GitLab