diff --git a/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/TMUIPlugin.java b/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/TMUIPlugin.java index 18837c9d0..98a231b70 100644 --- a/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/TMUIPlugin.java +++ b/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/TMUIPlugin.java @@ -19,6 +19,7 @@ import java.util.logging.LogRecord; import java.util.logging.Logger; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; @@ -33,6 +34,7 @@ import org.eclipse.tm4e.ui.internal.samples.SampleManager; import org.eclipse.tm4e.ui.internal.themes.ThemeManager; import org.eclipse.tm4e.ui.internal.utils.CodeTemplateContextTypeUtils; +import org.eclipse.tm4e.ui.internal.utils.UI; import org.eclipse.tm4e.ui.model.ITMModelManager; import org.eclipse.tm4e.ui.samples.ISampleManager; import org.eclipse.tm4e.ui.templates.CommentTemplateContextType; @@ -41,9 +43,11 @@ import org.eclipse.tm4e.ui.templates.TMLanguageTemplateContextType; import org.eclipse.tm4e.ui.themes.ColorManager; import org.eclipse.tm4e.ui.themes.IThemeManager; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.editors.text.templates.ContributionContextTypeRegistry; import org.eclipse.ui.editors.text.templates.ContributionTemplateStore; import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.eclipse.ui.progress.UIJob; import org.osgi.framework.BundleContext; /** @@ -171,7 +175,7 @@ public void close() throws SecurityException { }); } - TMImages.initalize(getImageRegistry()); + initializeImages(); } @Override @@ -266,4 +270,27 @@ public TemplateStore getTemplateStore() { return newTemplateStore; } + private void initializeImages() { + // if we are already in the UI thread, don't schedule an extra job + if (UI.isUIThread()) { + TMImages.initalize(getImageRegistry()); + return; + } + if (PlatformUI.isWorkbenchRunning()) { + UIJob initJob = new UIJob("Initialize images") { + + @Override + public IStatus runInUIThread(IProgressMonitor monitor) { + if (monitor.isCanceled()) { + return Status.CANCEL_STATUS; + } + TMImages.initalize(getImageRegistry()); + return Status.OK_STATUS; + } + + }; + initJob.setSystem(true); + initJob.schedule(); + } + } }