if (toBeFocused instanceof HasFocus) {
final HasFocus toBeFocusedWidget = (HasFocus) toBeFocused;
toBeFocusedWidget.setFocus(true);
+ } else if (toBeFocused instanceof Focusable) {
+ ((Focusable) toBeFocused).focus();
+ } else {
+ getConsole().log("Could not focus component");
}
+
}
if (meta.containsKey("appError")) {
JSONObject error = meta.get("appError").isObject();
--- /dev/null
+package com.itmill.toolkit.terminal.gwt.client;
+
+/**
+ * GWT's HasFocus is way too overkill for just receiving focus in simple
+ * components. Toolkit uses this interface in addition to GWT's HasFocus to pass
+ * focus requests from server to actual ui widgets in browsers.
+ *
+ * So in to make your server side focusable component receive focus on client
+ * side it must either implement this or HasFocus interface.
+ */
+public interface Focusable {
+ /**
+ * Sets focus to this widget.
+ */
+ public void focus();
+}
import com.google.gwt.user.client.ui.Widget;\r
import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;\r
import com.itmill.toolkit.terminal.gwt.client.ContainerResizedListener;\r
+import com.itmill.toolkit.terminal.gwt.client.Focusable;\r
import com.itmill.toolkit.terminal.gwt.client.LocaleNotLoadedException;\r
import com.itmill.toolkit.terminal.gwt.client.LocaleService;\r
import com.itmill.toolkit.terminal.gwt.client.Paintable;\r
import com.itmill.toolkit.terminal.gwt.client.Util;\r
\r
public class ITextualDate extends IDateField implements Paintable,\r
- ChangeListener, ContainerResizedListener {\r
+ ChangeListener, ContainerResizedListener, Focusable {\r
\r
private final ITextField text;\r
\r
text.setWidth((getOffsetWidth() - getFieldExtraWidth()) + "px");\r
}\r
}\r
+\r
+ public void focus() {\r
+ text.setFocus(true);\r
+ }\r
}\r