diff options
3 files changed, 76 insertions, 0 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java b/client/src/main/java/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java index 5fd8c766b6..20073c468e 100644 --- a/client/src/main/java/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java +++ b/client/src/main/java/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java @@ -570,11 +570,13 @@ public abstract class AbstractOrderedLayoutConnector } // Add all necessary listeners + boolean listenersAdded = false; if (needsFixedHeight()) { slot.setWidgetResizeListener(childComponentResizeListener); if (slot.hasCaption()) { slot.setCaptionResizeListener(slotCaptionResizeListener); } + listenersAdded = true; } else if ((hasChildrenWithRelativeHeight || hasChildrenWithRelativeWidth) && slot.hasCaption()) { /* @@ -586,6 +588,7 @@ public abstract class AbstractOrderedLayoutConnector * as the relative size? */ slot.setCaptionResizeListener(slotCaptionResizeListener); + listenersAdded = true; } if (needsExpand()) { @@ -594,6 +597,13 @@ public abstract class AbstractOrderedLayoutConnector if (slot.hasSpacing()) { slot.setSpacingResizeListener(spacingResizeListener); } + listenersAdded = true; + } + + if (listenersAdded) { + // removing these listeners makes widget unmeasurable and resets the + // measured height, measure again if listeners got added back + getLayoutManager().setNeedsMeasure(child); } } diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatio.java b/uitest/src/main/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatio.java new file mode 100644 index 0000000000..3145f546f6 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatio.java @@ -0,0 +1,37 @@ +package com.vaadin.tests.layouts; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.ProgressBar; + +public class UpdateComponentWithinExpandRatio extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + ProgressBar progress = new ProgressBar(); + progress.setWidth(100, Unit.PERCENTAGE); + Button button = new Button("Progress", e -> { + float value = progress.getValue(); + value = (value >= 1) ? 0 : value + 0.1f; + progress.setValue(value); + }); + + HorizontalLayout layout = new HorizontalLayout(progress, button); + layout.setExpandRatio(progress, 1); + layout.setWidth(100, Unit.PERCENTAGE); + getLayout().addComponent(layout); + } + + @Override + protected String getTestDescription() { + return "Clicking the button to update the progress bar (expanded) " + + "shouldn't push the button (fixed width) to the right"; + } + + @Override + protected Integer getTicketNumber() { + return 10734; + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatioTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatioTest.java new file mode 100644 index 0000000000..5c28799ba7 --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatioTest.java @@ -0,0 +1,29 @@ +package com.vaadin.tests.layouts; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.ProgressBarElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class UpdateComponentWithinExpandRatioTest extends MultiBrowserTest { + + @Test + public void updateProgressShouldNotMoveButton() { + openTestURL(); + ProgressBarElement pb = $(ProgressBarElement.class).first(); + ButtonElement button = $(ButtonElement.class).first(); + + int initialX = button.getLocation().getX(); + int initialWidth = pb.getSize().getWidth(); + + button.click(); + + assertEquals("Button's position changed unexpectedly", initialX, + button.getLocation().getX()); + assertEquals("ProgressBar's width changed unexpectedly", initialWidth, + pb.getSize().getWidth()); + } +} |