/******************************************************************************* * Copyright (c) 2009 Tasktop Technologies and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.tasks.ui.editors; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.dialogs.FilteredTree; import org.eclipse.ui.forms.widgets.Hyperlink; /** * Tracks which control had last focus for all registered controls. * * @author Steffen Pingel */ public class FocusTracker { private Control lastFocusControl; private final FocusListener listener = new FocusAdapter() { @Override public void focusGained(FocusEvent e) { lastFocusControl = (Control) e.widget; } }; public void track(Composite composite) { Control[] children = composite.getChildren(); for (Control control : children) { if ((control instanceof Text) || (control instanceof Button) || (control instanceof Combo) || (control instanceof CCombo) || (control instanceof Tree) || (control instanceof Table) || (control instanceof Spinner) || (control instanceof Link) || (control instanceof org.eclipse.swt.widgets.List) || (control instanceof TabFolder) || (control instanceof CTabFolder) || (control instanceof Hyperlink) || (control instanceof FilteredTree) || (control instanceof StyledText)) { control.addFocusListener(listener); } if (control instanceof Composite) { track((Composite) control); } } } public void reset() { lastFocusControl = null; } public boolean setFocus() { if (lastFocusControl != null && !lastFocusControl.isDisposed()) { return lastFocusControl.setFocus(); } return false; } }