From: Matti Tahvonen Date: Tue, 30 Sep 2008 11:17:16 +0000 (+0000) Subject: fixes #1394 together with [5558] X-Git-Tag: 6.7.0.beta1~4058 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=a4f981673cafd955ca8f3e2f0a4b00b9046f69a7;p=vaadin-framework.git fixes #1394 together with [5558] svn changeset:5559/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 6102d151d1..f6d85e4830 100755 --- a/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java @@ -33,7 +33,6 @@ import com.google.gwt.user.client.Window; import com.google.gwt.user.client.WindowCloseListener; import com.google.gwt.user.client.impl.HTTPRequestImpl; import com.google.gwt.user.client.ui.FocusWidget; -import com.google.gwt.user.client.ui.HasFocus; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; import com.itmill.toolkit.terminal.gwt.client.ui.Field; @@ -108,12 +107,12 @@ public class ApplicationConnection { /** List of pending variable change bursts that must be submitted in order */ private final Vector pendingVariableBursts = new Vector(); - + /** Timer for automatic refirect to SessionExpiredURL */ - private Timer redirectTimer; - - /** redirectTimer scheduling interval in seconds */ - private int sessionExpirationInterval; + private Timer redirectTimer; + + /** redirectTimer scheduling interval in seconds */ + private int sessionExpirationInterval; public ApplicationConnection(WidgetSet widgetSet, ApplicationConfiguration cnf) { @@ -507,13 +506,16 @@ public class ApplicationConnection { paintableToId.clear(); } if (meta.containsKey("timedRedirect")) { - final JSONObject timedRedirect = meta.get("timedRedirect").isObject(); - redirectTimer = new Timer() { - public void run() { - redirect(timedRedirect.get("url").isString().stringValue()); + final JSONObject timedRedirect = meta.get("timedRedirect") + .isObject(); + redirectTimer = new Timer() { + public void run() { + redirect(timedRedirect.get("url").isString() + .stringValue()); } - }; - sessionExpirationInterval = Integer.parseInt(timedRedirect.get("interval").toString()); + }; + sessionExpirationInterval = Integer.parseInt(timedRedirect.get( + "interval").toString()); } } if (redirectTimer != null) { @@ -568,20 +570,6 @@ public class ApplicationConnection { Util.componentSizeUpdated(sizeUpdatedWidgets); if (meta != null) { - if (meta.containsKey("focus")) { - final String focusPid = meta.get("focus").isString() - .stringValue(); - final Paintable toBeFocused = getPaintable(focusPid); - 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(); JSONValue val = error.get("caption"); diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java index 152d6677a6..1f55fba6a5 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java @@ -7,18 +7,22 @@ package com.itmill.toolkit.terminal.gwt.client.ui; import java.util.HashSet; import java.util.Iterator; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.WindowCloseListener; import com.google.gwt.user.client.WindowResizeListener; +import com.google.gwt.user.client.ui.HasFocus; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection; import com.itmill.toolkit.terminal.gwt.client.BrowserInfo; +import com.itmill.toolkit.terminal.gwt.client.Focusable; import com.itmill.toolkit.terminal.gwt.client.Paintable; import com.itmill.toolkit.terminal.gwt.client.UIDL; import com.itmill.toolkit.terminal.gwt.client.Util; @@ -235,6 +239,32 @@ public class IView extends SimplePanel implements Paintable, w.hide(); } + if (uidl.hasAttribute("focused")) { + final String focusPid = uidl.getStringAttribute("focused"); + // set focused component when render phase is finished + DeferredCommand.addCommand(new Command() { + public void execute() { + final Paintable toBeFocused = connection + .getPaintable(focusPid); + + /* + * Two types of Widgets can be focused, either implementing + * GWT HasFocus of a thinner Toolkit specific Focusable + * interface. + */ + if (toBeFocused instanceof HasFocus) { + final HasFocus toBeFocusedWidget = (HasFocus) toBeFocused; + toBeFocusedWidget.setFocus(true); + } else if (toBeFocused instanceof Focusable) { + ((Focusable) toBeFocused).focus(); + } else { + ApplicationConnection.getConsole().log( + "Could not focus component"); + } + } + }); + } + // Add window listeners on first paint, to prevent premature // variablechanges if (firstPaint) { @@ -330,7 +360,7 @@ public class IView extends SimplePanel implements Paintable, connection.sendPendingVariableChangesSync(); } - private static native void focusElement(Element e) + private static native void focusElement(Element e) /*-{ e.focus(); }-*/;