private Grid<?> grid;
protected Cell activeCell;
- protected GridSection activeSection;
private final Type<HANDLER> associatedType = new Type<HANDLER>(
getBrowserEventType(), this);
@Override
protected void dispatch(HANDLER handler) {
- activeCell = grid.activeCellHandler.getActiveCell();
- activeSection = GridSection.FOOTER;
- final RowContainer container = grid.activeCellHandler.container;
- if (container == grid.escalator.getHeader()) {
- activeSection = GridSection.HEADER;
- } else if (container == grid.escalator.getBody()) {
- activeSection = GridSection.BODY;
+ EventTarget target = getNativeEvent().getEventTarget();
+ if (Element.is(target)
+ && Util.findWidget(Element.as(target), null) == grid) {
+
+ activeCell = grid.activeCellHandler.getActiveCell();
+ GridSection section = GridSection.FOOTER;
+ final RowContainer container = grid.activeCellHandler.container;
+ if (container == grid.escalator.getHeader()) {
+ section = GridSection.HEADER;
+ } else if (container == grid.escalator.getBody()) {
+ section = GridSection.BODY;
+ }
+
+ doDispatch(handler, section);
}
}
+ protected abstract void doDispatch(HANDLER handler, GridSection seciton);
+
@Override
public Type<HANDLER> getAssociatedType() {
return associatedType;
}
@Override
- protected void dispatch(GridKeyDownHandler handler) {
- super.dispatch(handler);
- if ((activeSection == GridSection.BODY && handler instanceof BodyKeyDownHandler)
- || (activeSection == GridSection.HEADER && handler instanceof HeaderKeyDownHandler)
- || (activeSection == GridSection.FOOTER && handler instanceof FooterKeyDownHandler)) {
+ protected void doDispatch(GridKeyDownHandler handler, GridSection section) {
+ if ((section == GridSection.BODY && handler instanceof BodyKeyDownHandler)
+ || (section == GridSection.HEADER && handler instanceof HeaderKeyDownHandler)
+ || (section == GridSection.FOOTER && handler instanceof FooterKeyDownHandler)) {
handler.onKeyDown(this);
}
}
}
@Override
- protected void dispatch(GridKeyPressHandler handler) {
- super.dispatch(handler);
- if ((activeSection == GridSection.BODY && handler instanceof BodyKeyPressHandler)
- || (activeSection == GridSection.HEADER && handler instanceof HeaderKeyPressHandler)
- || (activeSection == GridSection.FOOTER && handler instanceof FooterKeyPressHandler)) {
+ protected void doDispatch(GridKeyPressHandler handler, GridSection section) {
+ if ((section == GridSection.BODY && handler instanceof BodyKeyPressHandler)
+ || (section == GridSection.HEADER && handler instanceof HeaderKeyPressHandler)
+ || (section == GridSection.FOOTER && handler instanceof FooterKeyPressHandler)) {
handler.onKeyPress(this);
}
}
}
@Override
- protected void dispatch(GridKeyUpHandler handler) {
- super.dispatch(handler);
- if ((activeSection == GridSection.BODY && handler instanceof BodyKeyUpHandler)
- || (activeSection == GridSection.HEADER && handler instanceof HeaderKeyUpHandler)
- || (activeSection == GridSection.FOOTER && handler instanceof FooterKeyUpHandler)) {
+ protected void doDispatch(GridKeyUpHandler handler, GridSection section) {
+ if ((section == GridSection.BODY && handler instanceof BodyKeyUpHandler)
+ || (section == GridSection.HEADER && handler instanceof HeaderKeyUpHandler)
+ || (section == GridSection.FOOTER && handler instanceof FooterKeyUpHandler)) {
handler.onKeyUp(this);
}
}
import org.openqa.selenium.interactions.Actions;
import com.vaadin.testbench.By;
+import com.vaadin.tests.components.grid.GridElement.GridCellElement;
import com.vaadin.tests.components.grid.basicfeatures.GridBasicClientFeaturesTest;
public class GridClientKeyEventsTest extends GridBasicClientFeaturesTest {
}
}
+ @Test
+ public void testNoKeyEventsFromWidget() {
+ openTestURL();
+
+ selectMenuPath("Component", "Columns", "Column 2", "Header Type",
+ "Widget Header");
+ GridCellElement header = getGridElement().getHeaderCell(0, 2);
+ header.findElement(By.tagName("button")).click();
+ new Actions(getDriver()).sendKeys(Keys.ENTER).perform();
+
+ for (int i = 0; i < 3; ++i) {
+ assertTrue("Header key event handler got called unexpectedly.",
+ findElements(By.className("v-label")).get(i * 3 + 1)
+ .getText().isEmpty());
+
+ }
+ }
+
}