summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonatan Kronqvist <jonatan.kronqvist@itmill.com>2011-04-06 11:10:46 +0000
committerJonatan Kronqvist <jonatan.kronqvist@itmill.com>2011-04-06 11:10:46 +0000
commit49f23cc10c7a18b35095183d39a98b6f4fd418b9 (patch)
treec51ee753459545a217b72658a07601688f9c9b04
parentc2b5723c72cf692811e3e95257194f3b7950da87 (diff)
downloadvaadin-framework-49f23cc10c7a18b35095183d39a98b6f4fd418b9.tar.gz
vaadin-framework-49f23cc10c7a18b35095183d39a98b6f4fd418b9.zip
Cleaned up #6197 - moved keyboard handling from the table body to the table rows
svn changeset:18129/svn branch:6.5
-rw-r--r--WebContent/VAADIN/themes/base/styles.css4
-rw-r--r--WebContent/VAADIN/themes/base/table/table.css4
-rw-r--r--WebContent/VAADIN/themes/liferay/styles.css4
-rw-r--r--WebContent/VAADIN/themes/reindeer/styles.css4
-rw-r--r--WebContent/VAADIN/themes/runo/styles.css4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java245
6 files changed, 111 insertions, 154 deletions
diff --git a/WebContent/VAADIN/themes/base/styles.css b/WebContent/VAADIN/themes/base/styles.css
index aba8b88745..de17effabd 100644
--- a/WebContent/VAADIN/themes/base/styles.css
+++ b/WebContent/VAADIN/themes/base/styles.css
@@ -1674,7 +1674,8 @@ div.v-progressindicator-indeterminate-disabled {
text-align: center;
}
.v-table-body:focus,
-.v-table-body-wrapper:focus {
+.v-table-body-wrapper:focus,
+tr.v-table-focus:focus {
outline: none;
}
.v-table-body.focused {
@@ -1683,6 +1684,7 @@ div.v-progressindicator-indeterminate-disabled {
.v-table-focus .v-table-cell-content {
border-top: 1px dotted #0066bd;
border-bottom: 1px dotted #0066bd;
+ outline: none;
}
/* row in column selector */
.v-on {
diff --git a/WebContent/VAADIN/themes/base/table/table.css b/WebContent/VAADIN/themes/base/table/table.css
index 7308cc4a46..e0f2f0e1d4 100644
--- a/WebContent/VAADIN/themes/base/table/table.css
+++ b/WebContent/VAADIN/themes/base/table/table.css
@@ -210,7 +210,8 @@
text-align: center;
}
.v-table-body:focus,
-.v-table-body-wrapper:focus {
+.v-table-body-wrapper:focus,
+tr.v-table-focus:focus {
outline: none;
}
.v-table-body.focused {
@@ -219,6 +220,7 @@
.v-table-focus .v-table-cell-content {
border-top: 1px dotted #0066bd;
border-bottom: 1px dotted #0066bd;
+ outline: none;
}
/* row in column selector */
.v-on {
diff --git a/WebContent/VAADIN/themes/liferay/styles.css b/WebContent/VAADIN/themes/liferay/styles.css
index 8b248ae320..85fd302053 100644
--- a/WebContent/VAADIN/themes/liferay/styles.css
+++ b/WebContent/VAADIN/themes/liferay/styles.css
@@ -1674,7 +1674,8 @@ div.v-progressindicator-indeterminate-disabled {
text-align: center;
}
.v-table-body:focus,
-.v-table-body-wrapper:focus {
+.v-table-body-wrapper:focus,
+tr.v-table-focus:focus {
outline: none;
}
.v-table-body.focused {
@@ -1683,6 +1684,7 @@ div.v-progressindicator-indeterminate-disabled {
.v-table-focus .v-table-cell-content {
border-top: 1px dotted #0066bd;
border-bottom: 1px dotted #0066bd;
+ outline: none;
}
/* row in column selector */
.v-on {
diff --git a/WebContent/VAADIN/themes/reindeer/styles.css b/WebContent/VAADIN/themes/reindeer/styles.css
index baabdf46dd..ad31dd3d77 100644
--- a/WebContent/VAADIN/themes/reindeer/styles.css
+++ b/WebContent/VAADIN/themes/reindeer/styles.css
@@ -1674,7 +1674,8 @@ div.v-progressindicator-indeterminate-disabled {
text-align: center;
}
.v-table-body:focus,
-.v-table-body-wrapper:focus {
+.v-table-body-wrapper:focus,
+tr.v-table-focus:focus {
outline: none;
}
.v-table-body.focused {
@@ -1683,6 +1684,7 @@ div.v-progressindicator-indeterminate-disabled {
.v-table-focus .v-table-cell-content {
border-top: 1px dotted #0066bd;
border-bottom: 1px dotted #0066bd;
+ outline: none;
}
/* row in column selector */
.v-on {
diff --git a/WebContent/VAADIN/themes/runo/styles.css b/WebContent/VAADIN/themes/runo/styles.css
index c641a8c5f0..9a75cef4a6 100644
--- a/WebContent/VAADIN/themes/runo/styles.css
+++ b/WebContent/VAADIN/themes/runo/styles.css
@@ -1674,7 +1674,8 @@ div.v-progressindicator-indeterminate-disabled {
text-align: center;
}
.v-table-body:focus,
-.v-table-body-wrapper:focus {
+.v-table-body-wrapper:focus,
+tr.v-table-focus:focus {
outline: none;
}
.v-table-body.focused {
@@ -1683,6 +1684,7 @@ div.v-progressindicator-indeterminate-disabled {
.v-table-focus .v-table-cell-content {
border-top: 1px dotted #0066bd;
border-bottom: 1px dotted #0066bd;
+ outline: none;
}
/* row in column selector */
.v-on {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
index 7e6c6ecd82..a627f5d204 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
@@ -94,8 +94,7 @@ import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
* TODO implement unregistering for child components in Cells
*/
public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
- VHasDropHandler, KeyPressHandler, KeyDownHandler, FocusHandler,
- BlurHandler, Focusable, KeyUpHandler {
+ VHasDropHandler, FocusHandler, BlurHandler, Focusable {
public static final String CLASSNAME = "v-table";
public static final String CLASSNAME_SELECTION_FOCUS = CLASSNAME + "-focus";
@@ -322,18 +321,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
public VScrollTable() {
scrollBodyPanel.setStyleName(CLASSNAME + "-body-wrapper");
- /*
- * Firefox auto-repeat works correctly only if we use a key press
- * handler, other browsers handle it correctly when using a key down
- * handler
- */
- if (BrowserInfo.get().isGecko()) {
- scrollBodyPanel.addKeyPressHandler(this);
- } else {
- scrollBodyPanel.addKeyDownHandler(this);
- }
- scrollBodyPanel.addKeyUpHandler(this);
-
scrollBodyPanel.addFocusHandler(this);
scrollBodyPanel.addBlurHandler(this);
@@ -3687,7 +3674,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
}
public class VScrollTableRow extends Panel implements ActionOwner,
- Container {
+ Container, KeyPressHandler, KeyUpHandler, KeyDownHandler {
private static final int DRAGMODE_MULTIROW = 2;
protected ArrayList<Widget> childWidgets = new ArrayList<Widget>();
@@ -3709,7 +3696,20 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
setElement(rowElement);
DOM.sinkEvents(getElement(), Event.MOUSEEVENTS
| Event.ONDBLCLICK | Event.ONCONTEXTMENU
- | Event.KEYEVENTS);
+ /* | Event.KEYEVENTS */);
+ getElement().setTabIndex(-1);
+
+ /*
+ * Firefox auto-repeat works correctly only if we use a key
+ * press handler, other browsers handle it correctly when using
+ * a key down handler
+ */
+ if (BrowserInfo.get().isGecko()) {
+ addDomHandler(this, KeyPressEvent.getType());
+ } else {
+ addDomHandler(this, KeyDownEvent.getType());
+ }
+ addDomHandler(this, KeyUpEvent.getType());
}
/**
@@ -4179,59 +4179,91 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
mDown = false;
break;
- /*
- * The ONKEYDOWN and ONKEYUP are only run in IE, see
- * #6197
- */
- case Event.ONKEYDOWN:
- if (!enabled) {
- // Cancel default keyboard events on a disabled
- // Table (prevents scrolling)
- event.preventDefault();
- } else {
- if (handleNavigation(
- event.getKeyCode(),
- event.getCtrlKey()
- || event.getMetaKey(),
- event.getShiftKey())) {
- navKeyDown = true;
- event.preventDefault();
- }
- startScrollingVelocityTimer();
- }
+ default:
break;
+ }
+ }
+ }
+ super.onBrowserEvent(event);
+ }
+
+ public void onKeyPress(KeyPressEvent keyPressEvent) {
+ // This is used for Firefox only, since Firefox auto-repeat
+ // works correctly only if we use a key press handler, other
+ // browsers handle it correctly when using a key down handler
+ if (!BrowserInfo.get().isGecko()) {
+ return;
+ }
- case Event.ONKEYUP:
- int keyCode = event.getKeyCode();
+ NativeEvent event = keyPressEvent.getNativeEvent();
+ if (!enabled) {
+ // Cancel default keyboard events on a disabled Table
+ // (prevents scrolling)
+ event.preventDefault();
+ } else {
+ // Key code in Firefox/onKeyPress is present only for
+ // special keys, otherwise 0 is returned
+ int keyCode = event.getKeyCode();
+ if (keyCode == 0 && event.getCharCode() == ' ') {
+ // Provide a keyCode for space to be compatible with
+ // FireFox keypress event
+ keyCode = CHARCODE_SPACE;
+ }
- if (!isFocusable()) {
- cancelScrollingVelocityTimer();
- } else if (isNavigationKey(keyCode)) {
- if (keyCode == getNavigationDownKey()
- || keyCode == getNavigationUpKey()) {
- /*
- * in multiselect mode the server may still
- * have value from previous page. Clear it
- * unless doing multiselection or just
- * moving focus.
- */
- if (!event.getShiftKey()
- && !event.getCtrlKey()) {
- instructServerToForgetPreviousSelections();
- }
- sendSelectedRows();
- }
- cancelScrollingVelocityTimer();
- navKeyDown = false;
- }
- break;
+ if (handleNavigation(keyCode,
+ event.getCtrlKey() || event.getMetaKey(),
+ event.getShiftKey())) {
+ event.preventDefault();
+ }
- default:
- break;
+ startScrollingVelocityTimer();
+ }
+ }
+
+ public void onKeyDown(KeyDownEvent keyDownEvent) {
+ NativeEvent event = keyDownEvent.getNativeEvent();
+ // This is not used for Firefox
+ if (BrowserInfo.get().isGecko()) {
+ return;
+ }
+
+ if (!enabled) {
+ // Cancel default keyboard events on a disabled Table
+ // (prevents scrolling)
+ event.preventDefault();
+ } else {
+ if (handleNavigation(event.getKeyCode(), event.getCtrlKey()
+ || event.getMetaKey(), event.getShiftKey())) {
+ navKeyDown = true;
+ event.preventDefault();
+ }
+
+ startScrollingVelocityTimer();
+ }
+ }
+
+ public void onKeyUp(KeyUpEvent keyUpEvent) {
+ NativeEvent event = keyUpEvent.getNativeEvent();
+ int keyCode = event.getKeyCode();
+
+ if (!isFocusable()) {
+ cancelScrollingVelocityTimer();
+ } else if (isNavigationKey(keyCode)) {
+ if (keyCode == getNavigationDownKey()
+ || keyCode == getNavigationUpKey()) {
+ /*
+ * in multiselect mode the server may still have value
+ * from previous page. Clear it unless doing
+ * multiselection or just moving focus.
+ */
+ if (!event.getShiftKey() && !event.getCtrlKey()) {
+ instructServerToForgetPreviousSelections();
}
+ sendSelectedRows();
}
+ cancelScrollingVelocityTimer();
+ navKeyDown = false;
}
- super.onBrowserEvent(event);
}
/**
@@ -5147,7 +5179,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
// Set new focused row
focusedRow = row;
- ensureRowIsVisible(row);
+ // ensureRowIsVisible(row);
row.getElement().focus();
return true;
@@ -5187,6 +5219,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
if (top < cur.scrollTop) {
cur.scrollTop = top;
}
+
if (top + height > cur.scrollTop + cur.clientHeight) {
cur.scrollTop = (top + height) - cur.clientHeight;
}
@@ -5465,68 +5498,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
* (non-Javadoc)
*
* @see
- * com.google.gwt.event.dom.client.KeyPressHandler#onKeyPress(com.google
- * .gwt.event.dom.client.KeyPressEvent)
- */
- public void onKeyPress(KeyPressEvent event) {
- // This is used for Firefox only
- if (!BrowserInfo.get().isGecko()) {
- return;
- }
-
- if (!enabled) {
- // Cancel default keyboard events on a disabled Table (prevents
- // scrolling)
- event.preventDefault();
- } else if (hasFocus) {
- // Key code in Firefox/onKeyPress is present only for special keys,
- // otherwise 0 is returned
- NativeEvent nativeEvent = event.getNativeEvent();
- int keyCode = nativeEvent.getKeyCode();
- if (keyCode == 0 && nativeEvent.getCharCode() == ' ') {
- // Provide a keyCode for space to be compatible with FireFox
- // keypress event
- keyCode = CHARCODE_SPACE;
- }
-
- if (handleNavigation(keyCode,
- event.isControlKeyDown() || event.isMetaKeyDown(),
- event.isShiftKeyDown())) {
- event.preventDefault();
- }
-
- startScrollingVelocityTimer();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * com.google.gwt.event.dom.client.KeyDownHandler#onKeyDown(com.google.gwt
- * .event.dom.client.KeyDownEvent)
- */
- public void onKeyDown(KeyDownEvent event) {
- if (!enabled) {
- // Cancel default keyboard events on a disabled Table (prevents
- // scrolling)
- event.preventDefault();
- } else if (hasFocus) {
- if (handleNavigation(event.getNativeEvent().getKeyCode(),
- event.isControlKeyDown() || event.isMetaKeyDown(),
- event.isShiftKeyDown())) {
- navKeyDown = true;
- event.preventDefault();
- }
-
- startScrollingVelocityTimer();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
* com.google.gwt.event.dom.client.FocusHandler#onFocus(com.google.gwt.event
* .dom.client.FocusEvent)
*/
@@ -5650,30 +5621,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
}
}
- public void onKeyUp(KeyUpEvent event) {
- int keyCode = event.getNativeKeyCode();
-
- if (!isFocusable()) {
- cancelScrollingVelocityTimer();
- } else if (isNavigationKey(keyCode)) {
- if (keyCode == getNavigationDownKey()
- || keyCode == getNavigationUpKey()) {
- /*
- * in multiselect mode the server may still have value from
- * previous page. Clear it unless doing multiselection or just
- * moving focus.
- */
- if (!event.getNativeEvent().getShiftKey()
- && !event.getNativeEvent().getCtrlKey()) {
- instructServerToForgetPreviousSelections();
- }
- sendSelectedRows();
- }
- cancelScrollingVelocityTimer();
- navKeyDown = false;
- }
- }
-
public void startScrollingVelocityTimer() {
if (scrollingVelocityTimer == null) {
scrollingVelocityTimer = new Timer() {