diff options
author | Jonatan Kronqvist <jonatan@vaadin.com> | 2014-03-28 10:24:19 +0000 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2014-03-28 10:24:19 +0000 |
commit | 8bf852a4fa84169eae44d96da083224d0d72b6c1 (patch) | |
tree | 878633b48b64c0d44ac98c0a6af3b4dbad8d89d2 | |
parent | 505e20331ae714bab98dbdd3a004f5ac83b58c50 (diff) | |
parent | 62c4c3f9738627ada3f76a7c197749681e29da0e (diff) | |
download | vaadin-framework-8bf852a4fa84169eae44d96da083224d0d72b6c1.tar.gz vaadin-framework-8bf852a4fa84169eae44d96da083224d0d72b6c1.zip |
Merge "Merge commit '60aa66a'"
3 files changed, 113 insertions, 15 deletions
diff --git a/client/src/com/vaadin/client/ui/VTabsheet.java b/client/src/com/vaadin/client/ui/VTabsheet.java index b9a70ff66a..4da5e4bfe0 100644 --- a/client/src/com/vaadin/client/ui/VTabsheet.java +++ b/client/src/com/vaadin/client/ui/VTabsheet.java @@ -283,6 +283,7 @@ public class VTabsheet extends VTabsheetBase implements Focusable, } public void focus() { + getTabsheet().scrollIntoView(this); focusImpl.focus(td); } @@ -1296,14 +1297,6 @@ public class VTabsheet extends VTabsheetBase implements Focusable, focusedTab = tb.getTab(focusedTabIndex); focusedTab.focus(); } - - if (isScrolledTabs()) { - // Scroll until the new focused tab is visible - while (!tb.getTab(focusedTabIndex).isVisible()) { - scrollerIndex = tb.scrollLeft(scrollerIndex); - } - updateTabScroller(); - } } } @@ -1325,15 +1318,20 @@ public class VTabsheet extends VTabsheetBase implements Focusable, focusedTab = tb.getTab(focusedTabIndex); focusedTab.focus(); } + } + } - if (isClippedTabs()) { - // Scroll until the new active tab is completely visible - int newScrollerIndex = scrollerIndex; - while (isClipped(tb.getTab(focusedTabIndex)) - && newScrollerIndex != -1) { - newScrollerIndex = tb.scrollRight(newScrollerIndex); + private void scrollIntoView(Tab tab) { + if (!tab.isHiddenOnServer()) { + if (isClipped(tab)) { + while (isClipped(tab) && scrollerIndex != -1) { + scrollerIndex = tb.scrollRight(scrollerIndex); + } + updateTabScroller(); + } else if (!tab.isVisible()) { + while (!tab.isVisible()) { + scrollerIndex = tb.scrollLeft(scrollerIndex); } - scrollerIndex = newScrollerIndex; updateTabScroller(); } } diff --git a/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetFocusing.java b/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetFocusing.java new file mode 100644 index 0000000000..b6b5431c1f --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetFocusing.java @@ -0,0 +1,56 @@ +/* + * Copyright 2000-2013 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.tabsheet; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.TabSheet; +import com.vaadin.ui.TabSheet.Tab; + +public class TabSheetFocusing extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + final TabSheet ts = new TabSheet(); + ts.setWidth("400px"); + ts.setHeight("200px"); + addComponent(ts); + addComponent(new Button("Add tab", new ClickListener() { + int i = 0; + + @Override + public void buttonClick(ClickEvent event) { + Tab t = ts.addTab(new Button("Tab " + ++i)); + ts.setSelectedTab(t); + ts.focus(); + } + })); + } + + @Override + protected String getTestDescription() { + return "The tab scroller should stay in place when tabs are focused using server-side calls."; + } + + @Override + protected Integer getTicketNumber() { + return 12343; + } + +} diff --git a/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetFocusingTest.java b/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetFocusingTest.java new file mode 100644 index 0000000000..77ddc94567 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/tabsheet/TabSheetFocusingTest.java @@ -0,0 +1,44 @@ +/* + * Copyright 2000-2013 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.tabsheet; + +import java.io.IOException; + +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; + +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class TabSheetFocusingTest extends MultiBrowserTest { + + @Test + public void addAndFocusTabs() throws IOException { + openTestURL(); + WebElement addButton = getButton("Add tab"); + for (int i = 1; i <= 15; i++) { + addButton.click(); + getButton("Tab " + i); + } + compareScreen("tabsAdded"); + } + + private WebElement getButton(String caption) { + return driver.findElement(By + .xpath("//span[@class='v-button-caption'][text()='" + caption + + "']")); + } +} |