From 2d504da4541207d3e5ab77d6eac1eb4e65841791 Mon Sep 17 00:00:00 2001 From: David McKnight Date: Mon, 21 Jul 2008 14:05:16 +0000 Subject: [PATCH] [240991] RSE startup creates display on worker thread before workbench. --- .../internal/core/model/SystemRegistry.java | 5 +++- .../rse/ui/SystemPreferencesManager.java | 24 +++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRegistry.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRegistry.java index e938a9cb586..56cb0cb75f1 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRegistry.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRegistry.java @@ -54,6 +54,7 @@ * David McKnight (IBM) - [234057] Wrong or missing model change event * David Dykstal (IBM) - [227750] do not fire events if there are no listeners * David McKnight (IBM) - [238673] Expansion icon (plus sign) disappears from Work With Libraries entry + * David McKnight (IBM) - [240991] RSE startup creates display on worker thread before workbench. ********************************************************************************/ package org.eclipse.rse.internal.core.model; @@ -1618,7 +1619,9 @@ public class SystemRegistry implements ISystemRegistry IHost host = op.getHost(); ISubSystem[] subsystems = op.getSubSystems(); FireNewHostEvents fire = new FireNewHostEvents(host, subsystems, sr); - Display.getDefault().asyncExec(fire); + if (modelListenerManager.hasListeners()) + Display.getDefault().asyncExec(fire); + ////Listening to FireNewHostEvents now //SystemPreferencesManager.setConnectionNamesOrder(); // update preferences order list return host; diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/SystemPreferencesManager.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/SystemPreferencesManager.java index df732c9d5f2..0a57bfa007e 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/SystemPreferencesManager.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/SystemPreferencesManager.java @@ -16,13 +16,18 @@ * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry * Martin Oberhuber (Wind River) - [215820] Move SystemRegistry implementation to Core * David McKnight (IBM) - [237300] Problem with setDefaultHistory for SystemHistoryCombo. + * David McKnight (IBM) - [240991] RSE startup creates display on worker thread before workbench. ********************************************************************************/ package org.eclipse.rse.ui; import java.util.ArrayList; import java.util.List; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Preferences; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.rse.core.IRSEPreferenceNames; import org.eclipse.rse.core.RSECorePlugin; import org.eclipse.rse.core.events.ISystemModelChangeEvent; @@ -34,6 +39,7 @@ import org.eclipse.rse.core.events.ISystemResourceChangeEvents; import org.eclipse.rse.core.events.ISystemResourceChangeListener; import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.model.ISystemRegistry; +import org.eclipse.ui.IWorkbench; /** * A utility class that encapsulates all global preferences for the remote system framework @@ -483,9 +489,23 @@ public class SystemPreferencesManager { alreadyListening = (fModelChangeListeners>0); fModelChangeListeners++; } + if (!alreadyListening) { - fModelChangeListener = new ModelChangeListener(); - RSECorePlugin.getTheSystemRegistry().addSystemModelChangeListener(fModelChangeListener); + Job addListenerJob = new Job("Add Listener"){ //$NON-NLS-1$ + public IStatus run(IProgressMonitor monitor){ + IWorkbench wb = RSEUIPlugin.getDefault().getWorkbench(); + while (wb.getDisplay() == null) { + try { + Thread.sleep(1000); + } + catch (InterruptedException e){} + } + fModelChangeListener = new ModelChangeListener(); + RSECorePlugin.getTheSystemRegistry().addSystemModelChangeListener(fModelChangeListener); + return Status.OK_STATUS; + } + }; + addListenerJob.setSystem(true); } }