Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikaël Barbero2013-04-30 12:56:34 +0000
committerMikaël Barbero2013-04-30 14:59:22 +0000
commite9ad1c7e06c2f1d70165babb6addd238a2ba05cb (patch)
tree0726bc00c71124d53df8794d9cbc10e03822b197
parentd1e3d84bbb45df00b2d023131ceab85a60164d9b (diff)
downloadorg.eclipse.emf.compare-e9ad1c7e06c2f1d70165babb6addd238a2ba05cb.tar.gz
org.eclipse.emf.compare-e9ad1c7e06c2f1d70165babb6addd238a2ba05cb.tar.xz
org.eclipse.emf.compare-e9ad1c7e06c2f1d70165babb6addd238a2ba05cb.zip
Execute UI-related code in safe utility
In case listeners are called from non UI code.
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java42
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/util/SWTUtil.java35
2 files changed, 57 insertions, 20 deletions
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java
index 6615435fc..91732d843 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java
@@ -58,6 +58,7 @@ import org.eclipse.emf.compare.ide.ui.internal.actions.expand.ExpandAllModelActi
import org.eclipse.emf.compare.ide.ui.internal.editor.ComparisonScopeInput;
import org.eclipse.emf.compare.ide.ui.internal.logical.EMFSynchronizationModel;
import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.provider.ComparisonNode;
+import org.eclipse.emf.compare.ide.ui.internal.util.SWTUtil;
import org.eclipse.emf.compare.rcp.EMFCompareRCPPlugin;
import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin;
import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareConstants;
@@ -88,7 +89,6 @@ import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.team.core.subscribers.Subscriber;
import org.eclipse.team.core.subscribers.SubscriberMergeContext;
@@ -466,22 +466,15 @@ public class EMFCompareStructureMergeViewer extends DiffTreeViewer implements Co
message = "No Differences";
}
- if (Display.getCurrent() != null) {
- groupActionMenu.createActions(scope, comparison);
- filterActionMenu.createActions(scope, comparison);
- refreshAfterDiff(message, fRoot);
- initialSelection();
- } else {
- final String theMessage = message;
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- groupActionMenu.createActions(scope, comparison);
- filterActionMenu.createActions(scope, comparison);
- refreshAfterDiff(theMessage, fRoot);
- initialSelection();
- }
- });
- }
+ final String theMessage = message;
+ SWTUtil.safeAsyncExec(new Runnable() {
+ public void run() {
+ groupActionMenu.createActions(scope, comparison);
+ filterActionMenu.createActions(scope, comparison);
+ refreshAfterDiff(theMessage, fRoot);
+ initialSelection();
+ }
+ });
}
/*
@@ -747,13 +740,22 @@ public class EMFCompareStructureMergeViewer extends DiffTreeViewer implements Co
Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
if (mostRecentCommand instanceof ICompareCopyCommand) {
Collection<?> affectedObjects = mostRecentCommand.getAffectedObjects();
- refresh(true);
+
+ SWTUtil.safeAsyncExec(new Runnable() {
+ public void run() {
+ refresh(true);
+ }
+ });
if (!affectedObjects.isEmpty()) {
// MUST NOT call a setSelection with a list, o.e.compare does not handle it (cf
// org.eclipse.compare.CompareEditorInput#getElement(ISelection))
- Object adaptedAffectedObject = fAdapterFactory.adapt(getFirst(affectedObjects, null),
+ final Object adaptedAffectedObject = fAdapterFactory.adapt(getFirst(affectedObjects, null),
ICompareInput.class);
- setSelection(new StructuredSelection(adaptedAffectedObject), true);
+ SWTUtil.safeAsyncExec(new Runnable() {
+ public void run() {
+ setSelection(new StructuredSelection(adaptedAffectedObject), true);
+ }
+ });
}
} else {
// FIXME, should recompute the difference, something happened outside of this compare editor
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/util/SWTUtil.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/util/SWTUtil.java
new file mode 100644
index 000000000..12140f8ca
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/util/SWTUtil.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Obeo.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.compare.ide.ui.internal.util;
+
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
+ */
+public class SWTUtil {
+
+ public static void safeAsyncExec(final Runnable runnable) {
+ if (Display.getCurrent() != null) {
+ runnable.run();
+ } else {
+ Display.getDefault().asyncExec(runnable);
+ }
+ }
+
+ public static void safeSyncExec(final Runnable runnable) {
+ if (Display.getCurrent() != null) {
+ runnable.run();
+ } else {
+ Display.getDefault().asyncExec(runnable);
+ }
+ }
+}

Back to the top