connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/RemoteConnectionsActivator.java
changeset 1037 7261015324d2
parent 886 8747d97a4fec
child 1081 eb755d0b6c12
--- a/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/RemoteConnectionsActivator.java	Fri Feb 26 15:49:28 2010 -0600
+++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/RemoteConnectionsActivator.java	Mon Mar 01 07:58:33 2010 -0600
@@ -30,6 +30,8 @@
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IFilter;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
@@ -38,11 +40,12 @@
 import com.nokia.carbide.remoteconnections.interfaces.IConnectionTypeProvider;
 import com.nokia.carbide.remoteconnections.interfaces.IConnectionsManager;
 import com.nokia.carbide.remoteconnections.internal.api.IDeviceDiscoveryAgent;
+import com.nokia.carbide.remoteconnections.internal.api.IStatusDisplay;
 import com.nokia.carbide.remoteconnections.internal.api.IDeviceDiscoveryAgent.IPrerequisiteStatus;
 import com.nokia.carbide.remoteconnections.internal.registry.Registry;
 import com.nokia.carbide.remoteconnections.internal.ui.DeviceDiscoveryPrequisiteErrorDialog;
+import com.nokia.carbide.remoteconnections.internal.ui.StatusDisplay;
 import com.nokia.cpp.internal.api.utils.core.Logging;
-import com.nokia.cpp.internal.api.utils.ui.RunRunnableWhenWorkbenchVisibleJob;
 import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
 
 /**
@@ -50,6 +53,39 @@
  */
 public class RemoteConnectionsActivator extends AbstractUIPlugin {
 
+	private final class WhenWorkbenchIsVisibleThread extends Thread {
+		private Shell shell;
+		private boolean visible;
+		private final Runnable runnable;
+		
+		public WhenWorkbenchIsVisibleThread(Runnable runnable) {
+			this.runnable = runnable;
+			shell = WorkbenchUtils.getActiveShell();
+		}
+		
+		public void run() {
+			while (true) {
+				Display.getDefault().syncExec(new Runnable() {
+					public void run() {
+						if (shell != null && shell.isVisible()) {
+							visible = true;
+						}
+					}
+				});
+				if (visible)
+					break;
+				
+				try {
+					Thread.sleep(500);
+				} catch (InterruptedException e) {
+					break;
+				}
+			}
+			if (visible)
+				runnable.run();
+		}
+	}
+
 	// The plug-in ID
 	public static final String PLUGIN_ID = "com.nokia.carbide.remoteConnections"; //$NON-NLS-1$
 
@@ -59,6 +95,7 @@
 	private static RemoteConnectionsActivator plugin;
 
 	private Collection<IDeviceDiscoveryAgent> discoveryAgents;
+
 	private static final String IGNORE_AGENT_LOAD_ERRORS_KEY = "ignoreAgentLoadErrors"; //$NON-NLS-1$
 
 	/**
@@ -74,14 +111,14 @@
 		instance.loadExtensions();
 		instance.loadConnections();
 
-		RunRunnableWhenWorkbenchVisibleJob.start(new Runnable() {
+		new WhenWorkbenchIsVisibleThread(new Runnable() {
 			public void run() {
 				if (!ignoreAgentLoadErrors())
 					checkPrerequisites();
-
+				
 				loadAndStartDeviceDiscoveryAgents();
 			}
-		});
+		}).start();
 	}
 
 	private boolean ignoreAgentLoadErrors() {
@@ -242,4 +279,8 @@
 			}
 		}
 	}
+	
+	public static IStatusDisplay getStatusDisplay() {
+		return new StatusDisplay();
+	}
 }