Browse Source

Delayed column layouting is visible (#15189)

Full Name of defect:
Regression: Table column jumps when table is shown and table is contained in a layout

Regression is a outcome of  change due to #12672.

No TB4 test because problem happens too fast to be caught.

Change-Id: I9af5ed3c11e0fb673c7f2f1c5fd4739bd4b8c655
tags/7.4.0.beta1
Anna Miroshnik 9 years ago
parent
commit
60ddbbf566

+ 1
- 14
client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java View File

@@ -152,20 +152,7 @@ public abstract class AbstractOrderedLayoutConnector extends
public void onElementResize(ElementResizeEvent e) {
updateLayoutHeight();
if (needsExpand()) {
/*
* updateLayoutHeight causes calling of
* getLayoutManager().setNeedsMeasure(this) which informs this
* LayoutManager that the size of a component might have
* changed. Then a new layout phase is scheduled. So
* updateExpandCompensation must be delayed until layout phase
* will be completed. #12672
*/
Scheduler.get().scheduleFinally(new ScheduledCommand() {
@Override
public void execute() {
getWidget().updateExpandCompensation();
}
});
getWidget().updateExpandCompensation();
}
}
};

+ 72
- 0
uitest/src/com/vaadin/tests/components/table/DelayedColumnLayouting.java View File

@@ -0,0 +1,72 @@
/*
* Copyright 2000-2014 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.tests.components.table;

import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;

/**
* For tables that are contained in a layout, a delayed column layouting should
* not be visible (because it makes the column jump around).
*
* #15189
*
* @author Vaadin Ltd
*/
public class DelayedColumnLayouting extends UI {

@Override
protected void init(VaadinRequest request) {
VerticalLayout verticalLayout = new VerticalLayout();
verticalLayout.setSizeFull();
final VerticalLayout layout = new VerticalLayout();
layout.setSizeFull();
layout.setSpacing(true);

Button reset = new Button("Recreate layout with contained table");
verticalLayout.addComponent(reset);
reset.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
fillLayout(layout);
}
});

fillLayout(layout);

verticalLayout.addComponent(layout);
verticalLayout.setExpandRatio(layout, 1f);

setContent(verticalLayout);
}

private void fillLayout(VerticalLayout layout) {
layout.removeAllComponents();

Table table = new Table();
table.setSizeFull();
table.addContainerProperty("First", String.class, "");
table.addContainerProperty("This column jumps", String.class, "");

layout.addComponent(table);
layout.setExpandRatio(table, 1f);
}
}

Loading…
Cancel
Save