]> source.dussan.org Git - vaadin-framework.git/commitdiff
fixes #1394 together with [5558]
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Tue, 30 Sep 2008 11:17:16 +0000 (11:17 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Tue, 30 Sep 2008 11:17:16 +0000 (11:17 +0000)
svn changeset:5559/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java

index 6102d151d18611920091dacb4869260e9feeb0bf..f6d85e483027508fbe30be13b4c660b10ace6069 100755 (executable)
@@ -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");
index 152d6677a62ccdd050a99c8c8588328eba5b051c..1f55fba6a5f3969a357b5c694bfe9cb48697f7e2 100644 (file)
@@ -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();
     }-*/;