if (e.widget == fShell)
if (e.widget == fShell && fShell.getShells().length == 0)
	public AbstractInformationControl(Shell parent, int shellStyle, int treeStyle, String invokingCommandId, boolean showStatusField) {		if (invokingCommandId != null) {			ICommandManager commandManager= PlatformUI.getWorkbench().getCommandSupport().getCommandManager();			fInvokingCommand= commandManager.getCommand(invokingCommandId);			if (fInvokingCommand != null && !fInvokingCommand.isDefined())				fInvokingCommand= null;		}				fShell= new Shell(parent, shellStyle);		Display display= fShell.getDisplay();		fShell.setBackground(display.getSystemColor(SWT.COLOR_BLACK));		// Composite for filter text and tree				fComposite= new Composite(fShell,SWT.RESIZE);		GridLayout layout= new GridLayout(1, false);		fComposite.setLayout(layout);		fComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));				fViewMenuButtonComposite= new Composite(fComposite, SWT.NONE);		layout= new GridLayout(2, false);		layout.marginHeight= 0;		layout.marginWidth= 0;		fViewMenuButtonComposite.setLayout(layout);		fViewMenuButtonComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));				if (hasHeader()) {			createHeader(fViewMenuButtonComposite);			fFilterText= createFilterText(fComposite);		} else {			fFilterText= createFilterText(fViewMenuButtonComposite);		}				createViewMenu(fViewMenuButtonComposite);				createHorizontalSeparator(fComposite);				fTreeViewer= createTreeViewer(fComposite, treeStyle);				fCustomFiltersActionGroup= new CustomFiltersActionGroup(getId(), fTreeViewer);				if (showStatusField)			createStatusField(fComposite);				final Tree tree= fTreeViewer.getTree();		tree.addKeyListener(new KeyListener() {			public void keyPressed(KeyEvent e)  {				if (e.character == 0x1B) // ESC					dispose();			}			public void keyReleased(KeyEvent e) {				// do nothing			}		});		tree.addSelectionListener(new SelectionListener() {			public void widgetSelected(SelectionEvent e) {				// do nothing			}			public void widgetDefaultSelected(SelectionEvent e) {				gotoSelectedElement();			}		});		tree.addMouseMoveListener(new MouseMoveListener()	 {			TreeItem fLastItem= null;			public void mouseMove(MouseEvent e) {				if (tree.equals(e.getSource())) {					Object o= tree.getItem(new Point(e.x, e.y));					if (o instanceof TreeItem) {						if (!o.equals(fLastItem)) {							fLastItem= (TreeItem)o;							tree.setSelection(new TreeItem[] { fLastItem });						} else if (e.y < tree.getItemHeight() / 4) {							// Scroll up							Point p= tree.toDisplay(e.x, e.y);							Item item= fTreeViewer.scrollUp(p.x, p.y);							if (item instanceof TreeItem) {								fLastItem= (TreeItem)item;								tree.setSelection(new TreeItem[] { fLastItem });							}														} else if (e.y > tree.getBounds().height - tree.getItemHeight() / 4) {							// Scroll down							Point p= tree.toDisplay(e.x, e.y);							Item item= fTreeViewer.scrollDown(p.x, p.y);							if (item instanceof TreeItem) {								fLastItem= (TreeItem)item;								tree.setSelection(new TreeItem[] { fLastItem });							}														}					}				}			}		});		tree.addMouseListener(new MouseAdapter() {			public void mouseUp(MouseEvent e) {				if (tree.getSelectionCount() < 1)					return;								if (e.button != 1)					return;				if (tree.equals(e.getSource())) {					Object o= tree.getItem(new Point(e.x, e.y));					TreeItem selection= tree.getSelection()[0];					if (selection.equals(o))						gotoSelectedElement();				}			}		});		int border= ((shellStyle & SWT.NO_TRIM) == 0) ? 0 : BORDER;		fShell.setLayout(new BorderFillLayout(border));				if (hasHeader()) {			fComposite.setTabList(new Control[] {fFilterText, fTreeViewer.getTree()});		} else {			fViewMenuButtonComposite.setTabList(new Control[] {fFilterText});			fComposite.setTabList(new Control[] {fViewMenuButtonComposite, fTreeViewer.getTree()});		}				setInfoSystemColor();		installFilter();				addDisposeListener(this);		fDeactivateListener= new Listener() {			/*			 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)			 */			public void handleEvent(Event event) {				if (fIsDecativateListenerActive)					dispose();			}		};		fShell.addListener(SWT.Deactivate, fDeactivateListener);		fIsDecativateListenerActive= true;		fShell.addShellListener(new ShellAdapter() {			/*			 * @see org.eclipse.swt.events.ShellAdapter#shellActivated(org.eclipse.swt.events.ShellEvent)			 */			public void shellActivated(ShellEvent e) {				if (e.widget == fShell)					fIsDecativateListenerActive= true;			}		});				fShell.addControlListener(new ControlAdapter() {			/**			 * {@inheritDoc}			 */			public void controlMoved(ControlEvent e) {				fBounds= fShell.getBounds();				if (fTrim != null) {					Point location= fComposite.getLocation();					fBounds.x= fBounds.x - fTrim.x + location.x;							fBounds.y= fBounds.y - fTrim.y + location.y;				}							}						/**			 * {@inheritDoc}			 */			public void controlResized(ControlEvent e) {				fBounds= fShell.getBounds();				if (fTrim != null) {					Point location= fComposite.getLocation();					fBounds.x= fBounds.x - fTrim.x + location.x;							fBounds.y= fBounds.y - fTrim.y + location.y;				}			}		});	}