package org.geogebra.web.html5.gui.inputfield; import org.geogebra.common.main.Feature; import org.geogebra.web.html5.gui.HasKeyboardTF; import org.geogebra.web.html5.gui.util.CancelEventTimer; import org.geogebra.web.html5.main.AppW; import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.BlurHandler; import com.google.gwt.event.dom.client.FocusEvent; import com.google.gwt.event.dom.client.FocusHandler; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; public class FieldHandler implements FocusHandler, BlurHandler { AppW appl; public FieldHandler(AppW app) { appl = app; } @Override public void onFocus(FocusEvent event) { Object source = event.getSource(); if (source instanceof TextBox) { TextBox tb = (TextBox) event.getSource(); Widget parent = tb.getParent().getParent(); if (parent instanceof AutoCompleteTextFieldW) { event.preventDefault(); focusGained((AutoCompleteTextFieldW) parent, appl); } } } @Override public void onBlur(BlurEvent event) { // TODO: 1st parameter focusLost(null, appl); } public static void focusGained(HasKeyboardTF field, AppW app) { if (app.has(Feature.KEYBOARD_BEHAVIOUR)) { if (field != null) { field.startOnscreenKeyboardEditing(); app.showKeyboard(field, true); } } } public static void focusLost(HasKeyboardTF field, final AppW app) { if (app.has(Feature.KEYBOARD_BEHAVIOUR)) { field.endOnscreenKeyboardEditing(); if (CancelEventTimer.cancelKeyboardHide()) { return; } if (app.hasPopup() && app.has(Feature.DIALOGS_OVERLAP_KEYBOARD)) { app.getGuiManager().setOnScreenKeyboardTextField(null); return; } app.hideKeyboard(); } } }