Incorrect field is focussed when visibility is changed

When using a text field or ComboBox the field focus change appears to be processed before value change. If visibility of the next field is determined by the previous field’s value. Field focus can be lost or misplaced.

Native select seems to work. TextField does not. I have so far only tested this using Liferay 6.2.ga6 and Vaadin 7.6.6., not stand-alone.

@VaadinPortletUI
public class TestUI2 extends UI{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    final static Logger log = LoggerFactory.getLogger(TestUI2.class);    

    VerticalLayout root = new VerticalLayout();

    @Override
    protected void init(VaadinRequest request) {
        // Based on test-case at https://dev.vaadin.com/ticket/12730#no1
        // https://vaadin.com/forum#!/thread/1326316
        
        setContent(root);

        // Text field FAIL        
        /*final TextField s1tf1 = new TextField();
        s1tf1.setImmediate(true);*/
        
        // even with eager text change 
        final TextField s1tf1 = new TextField();
        s1tf1.setImmediate(true);
        s1tf1.setTextChangeEventMode(TextChangeEventMode.EAGER);
        
        // THIS WORKS!!!!  change event is set immediately no chance for blur to occur before change
        /*final NativeSelect s1tf1 = new NativeSelect();               
        s1tf1.addItems(new String[]{"Yes","No","Unknown"});
        s1tf1.setImmediate(true);*/
        
        // This fails miserably!
        /*final ComboBox s1tf1 = new ComboBox();        
        s1tf1.addItems(new String[]{"Yes","No","Unknown"});
        s1tf1.setImmediate(true);*/
        
        // This seems better, but is not. still fails!
        /*final ComboBox s1tf1 = new ComboBox();        
        s1tf1.addItems(new String[]{"Yes","No","Unknown"});
        s1tf1.setImmediate(true);
        s1tf1.setTextInputAllowed(false);*/
        
        final TextField s1tf2 = new TextField();
        s1tf2.setImmediate(true);
        
        // Thought this might be having some effect but no.
        //s1tf2.setVisible(false);
        
        final TextField s1tf3 = new TextField();
        s1tf3.setImmediate(true);
        s1tf3.setTextChangeEventMode(TextChangeEventMode.EAGER);

        
        s1tf1.addValueChangeListener(new Property.ValueChangeListener() {
            @Override
            public void valueChange(Property.ValueChangeEvent event) {                
                s1tf2.setVisible(!s1tf2.isVisible());
            }
        });
        
        root.addComponent(s1tf1);
        root.addComponent(s1tf2);
        root.addComponent(s1tf3);
        
        
        // even with hard-coded tab indexes we get problems
        s1tf1.setTabIndex(701);
        s1tf2.setTabIndex(702);
        s1tf3.setTabIndex(703);

    }

}