package org.tessell.util;
import static com.google.gwt.event.dom.client.KeyCodes.KEY_ENTER;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
/** Key events are a bitch.
*
* We want to trigger on key up, as that comes after change, so the model
* will be up to date. However, if "enter" is pressed somewhere else, and
* focus is moved to us, we'll catch the tail end of the key up. So watch
* for key down/up pairs that match.
*/
public class OnEnterKeyHandler implements KeyUpHandler, KeyDownHandler {
private final Runnable runnable;
private int lastKey;
public OnEnterKeyHandler(Runnable runnable) {
this.runnable = runnable;
}
@Override
public void onKeyDown(KeyDownEvent event) {
lastKey = event.getNativeKeyCode();
}
@Override
public void onKeyUp(KeyUpEvent event) {
if (event.getNativeKeyCode() == lastKey && event.getNativeKeyCode() == KEY_ENTER) {
runnable.run();
}
}
}