From: Matti Tahvonen Date: Thu, 15 May 2008 16:19:17 +0000 (+0000) Subject: added a thinner complementary interface for HasFocus so it will be much easier to... X-Git-Tag: 6.7.0.beta1~4761 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c25413a275688fe695cc2f1669563200ec8f9142;p=vaadin-framework.git added a thinner complementary interface for HasFocus so it will be much easier to implement focusable component on client side. DateField can now be focused. svn changeset:4514/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java b/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java index 8aed987c81..bb15ae1a5e 100755 --- a/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java @@ -463,7 +463,12 @@ public class ApplicationConnection { 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(); diff --git a/src/com/itmill/toolkit/terminal/gwt/client/Focusable.java b/src/com/itmill/toolkit/terminal/gwt/client/Focusable.java new file mode 100644 index 0000000000..43d07a3ea3 --- /dev/null +++ b/src/com/itmill/toolkit/terminal/gwt/client/Focusable.java @@ -0,0 +1,16 @@ +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(); +} diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITextualDate.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITextualDate.java index 22a52d5af2..560e02f822 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITextualDate.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITextualDate.java @@ -9,6 +9,7 @@ import com.google.gwt.user.client.ui.ChangeListener; import com.google.gwt.user.client.ui.Widget; import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection; import com.itmill.toolkit.terminal.gwt.client.ContainerResizedListener; +import com.itmill.toolkit.terminal.gwt.client.Focusable; import com.itmill.toolkit.terminal.gwt.client.LocaleNotLoadedException; import com.itmill.toolkit.terminal.gwt.client.LocaleService; import com.itmill.toolkit.terminal.gwt.client.Paintable; @@ -16,7 +17,7 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL; import com.itmill.toolkit.terminal.gwt.client.Util; public class ITextualDate extends IDateField implements Paintable, - ChangeListener, ContainerResizedListener { + ChangeListener, ContainerResizedListener, Focusable { private final ITextField text; @@ -252,4 +253,8 @@ public class ITextualDate extends IDateField implements Paintable, text.setWidth((getOffsetWidth() - getFieldExtraWidth()) + "px"); } } + + public void focus() { + text.setFocus(true); + } }