From 7b8c3c57da72f7053105c116e38cc8c036fffc6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sauli=20T=C3=A4hk=C3=A4p=C3=A4=C3=A4?= Date: Thu, 2 Jul 2015 16:04:54 +0300 Subject: [PATCH] Stop stealing focus on input elements inside Grid. --- .../vaadin/components/grid/ViolatedGrid.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/vaadin-components-gwt/src/main/java/com/vaadin/components/grid/ViolatedGrid.java b/vaadin-components-gwt/src/main/java/com/vaadin/components/grid/ViolatedGrid.java index 9a6abf278..688f1b54c 100644 --- a/vaadin-components-gwt/src/main/java/com/vaadin/components/grid/ViolatedGrid.java +++ b/vaadin-components-gwt/src/main/java/com/vaadin/components/grid/ViolatedGrid.java @@ -2,6 +2,7 @@ import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.EventTarget; import com.google.gwt.dom.client.IFrameElement; import com.google.gwt.query.client.GQuery; import com.google.gwt.user.client.DOM; @@ -117,11 +118,24 @@ private static int getWidgetUtilNativeScrollbarSize() { @Override public void onBrowserEvent(Event event) { + // clicking on the select all checkbox moves focus away from the grid // causing the :focus transition effect to be reapplied. Forcing focus on the grid - // will mitigate the issue. Grid should always keep the focus anyways when interacting with it. - getElement().focus(); + // will mitigate the issue. + focusGridIfSelectAllClicked(event); super.onBrowserEvent(event); } + + private void focusGridIfSelectAllClicked(Event event) { + EventTarget target = event.getEventTarget(); + if(Element.is(target)) { + Element targetElement = Element.as(target); + + // Currently targeting all gwt-checkboxes, might need refinement in the future. + if(targetElement.getParentElement().hasClassName("gwt-CheckBox")) { + getElement().focus(); + } + } + } }