Browser page scroll by default when space key is pressed. The TabSheet uses the space key (32) to select the tab when navigating using left/right keys. So when the space is pressed the default browser page scroll behavior is now prevented. Change-Id: I8c3c7c4904109018d2f91447235e30dbd29eec5dtags/7.2.7
if (event.getSource() instanceof Tab) { | if (event.getSource() instanceof Tab) { | ||||
int keycode = event.getNativeEvent().getKeyCode(); | int keycode = event.getNativeEvent().getKeyCode(); | ||||
// Scroll throw the tabs. | |||||
if (!event.isAnyModifierKeyDown()) { | if (!event.isAnyModifierKeyDown()) { | ||||
if (keycode == getPreviousTabKey()) { | if (keycode == getPreviousTabKey()) { | ||||
selectPreviousTab(); | selectPreviousTab(); | ||||
} | } | ||||
} else if (keycode == getSelectTabKey()) { | } else if (keycode == getSelectTabKey()) { | ||||
loadTabSheet(focusedTabIndex); | loadTabSheet(focusedTabIndex); | ||||
// Prevent the page from scrolling when hitting space | |||||
// (select key) to select the current tab. | |||||
event.preventDefault(); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
return KeyCodes.KEY_LEFT; | return KeyCodes.KEY_LEFT; | ||||
} | } | ||||
/** | |||||
* Gets the key to activate the selected tab when navigating using | |||||
* previous/next (left/right) keys. | |||||
* | |||||
* @return the key to activate the selected tab. | |||||
* | |||||
* @see #getNextTabKey() | |||||
* @see #getPreviousTabKey() | |||||
*/ | |||||
protected int getSelectTabKey() { | protected int getSelectTabKey() { | ||||
return 32; // Space key | |||||
return KeyCodes.KEY_SPACE; | |||||
} | } | ||||
/** | /** |
/* | |||||
* 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.tabsheet; | |||||
import com.vaadin.server.VaadinRequest; | |||||
import com.vaadin.tests.components.AbstractTestUI; | |||||
import com.vaadin.ui.Alignment; | |||||
import com.vaadin.ui.Component; | |||||
import com.vaadin.ui.Label; | |||||
import com.vaadin.ui.TabSheet; | |||||
import com.vaadin.ui.VerticalLayout; | |||||
/** | |||||
* If the space is pressed on the tabs of a tabsheet the browser default scroll | |||||
* behavior must be prevented. | |||||
* | |||||
* @since | |||||
* @author Vaadin Ltd | |||||
*/ | |||||
public class TabSpaceNotScroll extends AbstractTestUI { | |||||
@Override | |||||
protected void setup(VaadinRequest request) { | |||||
TabSheet tabSheet = new TabSheet(); | |||||
for (int i = 0; i < 5; i++) { | |||||
String caption = "Tab " + i; | |||||
Component c = new Label(caption); | |||||
tabSheet.addTab(c, caption); | |||||
} | |||||
addComponent(tabSheet); | |||||
Label dontShowThis = new Label("Page scroll. This is bad."); | |||||
VerticalLayout panel = new VerticalLayout(); | |||||
panel.setHeight("2000px"); | |||||
panel.addComponent(dontShowThis); | |||||
panel.setComponentAlignment(dontShowThis, Alignment.MIDDLE_CENTER); | |||||
addComponent(panel); | |||||
} | |||||
@Override | |||||
protected String getTestDescription() { | |||||
return "Pressing space on the tab should not scroll."; | |||||
} | |||||
@Override | |||||
protected Integer getTicketNumber() { | |||||
return 14320; | |||||
} | |||||
} |
/* | |||||
* 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.tabsheet; | |||||
import java.io.IOException; | |||||
import org.junit.Assert; | |||||
import org.junit.Test; | |||||
import org.openqa.selenium.By; | |||||
import org.openqa.selenium.Keys; | |||||
import org.openqa.selenium.Point; | |||||
import com.vaadin.testbench.TestBenchElement; | |||||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||||
/** | |||||
* Test if the page scroll when press space on a tabsheet's tab. | |||||
* | |||||
* @since | |||||
* @author Vaadin Ltd | |||||
*/ | |||||
public class TabSpaceNotScrollTest extends MultiBrowserTest { | |||||
@Test | |||||
public void testScroll() throws InterruptedException, IOException { | |||||
openTestURL(); | |||||
TestBenchElement tab = (TestBenchElement) getDriver().findElement( | |||||
By.className("v-tabsheet-tabitemcell")); | |||||
tab.click(10, 10); | |||||
Point oldLocation = tab.getLocation(); | |||||
tab.sendKeys(Keys.SPACE); | |||||
Point newLocation = tab.getLocation(); | |||||
Assert.assertEquals(oldLocation, newLocation); | |||||
} | |||||
} |