Browse Source

Prevent dispatching GridKeyEvents when target is not grid (#13334)

Change-Id: I2efd6d48502360d14d21456077d50b37fa8a4be6
tags/7.4.0.beta1
Teemu Suo-Anttila 9 years ago
parent
commit
e8820f89e9

+ 16
- 8
client/src/com/vaadin/client/ui/grid/Grid.java View File



private Grid<?> grid; private Grid<?> grid;
protected Cell activeCell; protected Cell activeCell;
protected GridSection activeSection;
private final Type<HANDLER> associatedType = new Type<HANDLER>( private final Type<HANDLER> associatedType = new Type<HANDLER>(
getBrowserEventType(), this); getBrowserEventType(), this);




@Override @Override
protected void dispatch(HANDLER handler) { 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 @Override
public Type<HANDLER> getAssociatedType() { public Type<HANDLER> getAssociatedType() {
return associatedType; return associatedType;

+ 4
- 5
client/src/com/vaadin/client/ui/grid/events/GridKeyDownEvent.java View File

} }


@Override @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); handler.onKeyDown(this);
} }
} }

+ 4
- 5
client/src/com/vaadin/client/ui/grid/events/GridKeyPressEvent.java View File

} }


@Override @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); handler.onKeyPress(this);
} }
} }

+ 4
- 5
client/src/com/vaadin/client/ui/grid/events/GridKeyUpEvent.java View File

} }


@Override @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); handler.onKeyUp(this);
} }
} }

+ 19
- 0
uitest/src/com/vaadin/tests/components/grid/basicfeatures/client/GridClientKeyEventsTest.java View File

import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.interactions.Actions;


import com.vaadin.testbench.By; import com.vaadin.testbench.By;
import com.vaadin.tests.components.grid.GridElement.GridCellElement;
import com.vaadin.tests.components.grid.basicfeatures.GridBasicClientFeaturesTest; import com.vaadin.tests.components.grid.basicfeatures.GridBasicClientFeaturesTest;


public class GridClientKeyEventsTest extends 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());

}
}

} }

Loading…
Cancel
Save