diff --git a/bundles/org.eclipse.e4.ui.services/src/org/eclipse/e4/ui/services/internal/events/EventBroker.java b/bundles/org.eclipse.e4.ui.services/src/org/eclipse/e4/ui/services/internal/events/EventBroker.java index b3c46d1..6f034c1 100644 --- a/bundles/org.eclipse.e4.ui.services/src/org/eclipse/e4/ui/services/internal/events/EventBroker.java +++ b/bundles/org.eclipse.e4.ui.services/src/org/eclipse/e4/ui/services/internal/events/EventBroker.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.e4.ui.services.internal.events; +import javax.inject.Named; + import org.eclipse.e4.ui.di.UISynchronize; import org.eclipse.e4.core.di.annotations.Optional; @@ -46,6 +48,11 @@ @Inject @Optional UISynchronize uiSync; + + @Inject + @Optional + @Named("e4ApplicationInstanceId") + String applicationInstanceId; // This is a temporary code to ensure that bundle containing // EventAdmin implementation is started. This code it to be removed once @@ -96,6 +103,10 @@ @SuppressWarnings("unchecked") private Event constructEvent(String topic, Object data) { Event event; + if( applicationInstanceId != null ) { + topic = applicationInstanceId + "/" + topic; + } + if (data instanceof Dictionary) { event = new Event(topic, (Dictionary)data); } else if (data instanceof Map) { @@ -120,7 +131,13 @@ logger.error(NLS.bind(ServiceMessages.NO_BUNDLE_CONTEXT, topic)); return false; } - String[] topics = new String[] {topic}; + String[] topics; + if( applicationInstanceId != null ) { + topics = new String[] { applicationInstanceId + "/" + topic}; + } else { + topics = new String[] {topic}; + } + Dictionary d = new Hashtable(); d.put(EventConstants.EVENT_TOPIC, topics); if (filter != null) diff --git a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/E4Application.java b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/E4Application.java index c4f1f59..17846e9 100644 --- a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/E4Application.java +++ b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/E4Application.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Locale; import java.util.Properties; +import java.util.UUID; import org.eclipse.core.databinding.observable.Realm; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IExtensionRegistry; @@ -180,6 +181,7 @@ IApplicationContext.APPLICATION_ARGS); IEclipseContext appContext = createDefaultContext(); + appContext.set("e4ApplicationInstanceId", UUID.randomUUID().toString()); appContext.set(Realm.class, SWTObservables.getRealm(display)); appContext.set(UISynchronize.class, new UISynchronize() {