diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/IRSEInteractionProvider.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/IRSEInteractionProvider.java index 1b8019b3830..20cdd1b0eaf 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/IRSEInteractionProvider.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/IRSEInteractionProvider.java @@ -8,6 +8,7 @@ * Contributors: * Martin Oberhuber (Wind River) - [190231] initial API and implementation * IBM Corporation - Javadoc for runInDefaultContext() method + * Martin Oberhuber (Wind River) - [236355] [api] Add an IRSEInteractionProvider#eventExec() method *******************************************************************************/ package org.eclipse.rse.core; @@ -107,6 +108,19 @@ public interface IRSEInteractionProvider { */ public void asyncExec(Runnable runnable); + /** + * Run the given runnable with "event" semantics, that is: asynchronously + * run it through {@link #asyncExec(Runnable)} on the interaction provider's + * designated event thread, unless the call is already coming from that very + * thread. + * + * In that case, the Runnable is run immediately and synchronously. + * + * @param runnable the Runnable to run asynchronously with "event" semantics + * @see #asyncExec(Runnable) + */ + public void eventExec(Runnable runnable); + /** * Flush the Queue of Runnables enqueued with {@link #asyncExec(Runnable)}. * diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/DefaultUIInteractionProvider.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/DefaultUIInteractionProvider.java index 6f3c6c16dfe..e715cde09dd 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/DefaultUIInteractionProvider.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/DefaultUIInteractionProvider.java @@ -8,6 +8,7 @@ * Contributors: * Martin Oberhuber (Wind River) - [190231] initial API and implementation * Martin Oberhuber (Wind River) - brought in methods from SubSystem (c) IBM + * Martin Oberhuber (Wind River) - [236355] [api] Add an IRSEInteractionProvider#eventExec() method *******************************************************************************/ package org.eclipse.rse.internal.ui; @@ -38,7 +39,7 @@ import org.eclipse.ui.PlatformUI; * with the Target Management * team. *

- * + * * @since org.eclipse.rse.ui 3.0 */ public class DefaultUIInteractionProvider implements IRSEInteractionProvider { @@ -138,10 +139,18 @@ public class DefaultUIInteractionProvider implements IRSEInteractionProvider { return d; } - public void asyncExec(Runnable runnable) { + public void asyncExec(final Runnable runnable) { getDefaultDisplay().asyncExec(runnable); } + public void eventExec(final Runnable runnable) { + if (Display.getCurrent() != null) { + runnable.run(); + } else { + asyncExec(runnable); + } + } + public void flushRunnableQueue() { Display d = Display.getCurrent(); if (d == null) {