Change-Id: I2efd6d48502360d14d21456077d50b37fa8a4be6tags/7.4.0.beta1
@@ -135,7 +135,6 @@ public class Grid<T> extends Composite implements | |||
private Grid<?> grid; | |||
protected Cell activeCell; | |||
protected GridSection activeSection; | |||
private final Type<HANDLER> associatedType = new Type<HANDLER>( | |||
getBrowserEventType(), this); | |||
@@ -165,16 +164,25 @@ public class Grid<T> extends Composite implements | |||
@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; |
@@ -33,11 +33,10 @@ public class GridKeyDownEvent extends AbstractGridKeyEvent<GridKeyDownHandler> { | |||
} | |||
@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); | |||
} | |||
} |
@@ -34,11 +34,10 @@ public class GridKeyPressEvent extends | |||
} | |||
@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); | |||
} | |||
} |
@@ -33,11 +33,10 @@ public class GridKeyUpEvent extends AbstractGridKeyEvent<GridKeyUpHandler> { | |||
} | |||
@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); | |||
} | |||
} |
@@ -27,6 +27,7 @@ import org.openqa.selenium.Keys; | |||
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 { | |||
@@ -105,4 +106,22 @@ 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()); | |||
} | |||
} | |||
} |