package org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal;

import com.vaadin.ui.Button;
import com.vaadin.ui.Component;

public class FocusLosingButton extends Button implements Button.ClickListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = -1946875741448360772L;

	public FocusLosingButton() {
		super();
		addClickListener(this);
	}

	@Override
	public void buttonClick(ClickEvent event) {
		Component parent = this.getParent();
		while (parent != null) {
			if(parent instanceof Component.Focusable) {
				((Component.Focusable) parent).focus();
				break;
			} else {
				parent = parent.getParent();
			}
		}
	}
}
