diff options
author | Mikaël Barbero | 2013-04-30 12:56:34 +0000 |
---|---|---|
committer | Mikaël Barbero | 2013-04-30 14:59:22 +0000 |
commit | e9ad1c7e06c2f1d70165babb6addd238a2ba05cb (patch) | |
tree | 0726bc00c71124d53df8794d9cbc10e03822b197 | |
parent | d1e3d84bbb45df00b2d023131ceab85a60164d9b (diff) | |
download | org.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.
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);
+ }
+ }
+}
|