public void hookOnViewer(final String viewerId) { IWorkbench workbench = PlatformUI.getWorkbench(); if (viewerId != null && workbench != null && workbench.getDisplay() != null) { Display display = workbench.getDisplay(); Thread displayThread = display.getThread(); if (workbench.isStarting() || !Thread.currentThread().equals(displayThread)) { // while workbench is starting defer hooking until later UIJob job = new UIJob(display, "viewer hooker") { @Override public IStatus runInUIThread(IProgressMonitor monitor) { hookOnViewer(viewerId); return Status.OK_STATUS; } }; job.schedule(250); } else if (viewerId != null) { CommonNavigator navigator = (CommonNavigator) eu.fittest.eclipse.gui.utils.Viewer.getView(viewerId); if (navigator != null) { CommonViewer viewer = navigator.getCommonViewer(); if (viewer != null) { if (this.viewer != null) { this.viewer.removeSelectionChangedListener(this); } requestRefresh(); viewer.addSelectionChangedListener(this); this.viewer = viewer; } } } } }