From: Artur Signell Date: Wed, 17 Aug 2016 10:50:28 +0000 (+0300) Subject: Flush the active connector before closing a browser window/tab X-Git-Tag: 8.0.0.alpha1~160 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7cd6f91f00421c132314965a738b59ce190fe4f6;p=vaadin-framework.git Flush the active connector before closing a browser window/tab Change-Id: I116ec752153e8e86724b542234e4d6af46caeb09 --- diff --git a/client/src/main/java/com/vaadin/client/ui/VUI.java b/client/src/main/java/com/vaadin/client/ui/VUI.java index 87ebc53d64..bcb3804cec 100644 --- a/client/src/main/java/com/vaadin/client/ui/VUI.java +++ b/client/src/main/java/com/vaadin/client/ui/VUI.java @@ -1,12 +1,12 @@ /* * Copyright 2000-2014 Vaadin Ltd. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -43,7 +43,6 @@ import com.vaadin.client.LayoutManager; import com.vaadin.client.Profiler; import com.vaadin.client.VConsole; import com.vaadin.client.WidgetUtil; -import com.vaadin.client.legacy.ui.VLegacyTextField; import com.vaadin.client.ui.ShortcutActionHandler.ShortcutActionHandlerOwner; import com.vaadin.client.ui.TouchScrollDelegate.TouchScrollHandler; import com.vaadin.client.ui.ui.UIConnector; @@ -51,7 +50,7 @@ import com.vaadin.shared.ApplicationConstants; import com.vaadin.shared.ui.ui.UIConstants; /** - * + * */ public class VUI extends SimplePanel implements ResizeHandler, Window.ClosingHandler, ShortcutActionHandlerOwner, Focusable, @@ -86,7 +85,7 @@ public class VUI extends SimplePanel implements ResizeHandler, /** * Keep track of possible parent size changes when an embedded application. - * + * * Uses {@link #parentWidth} and {@link #parentHeight} as an optimization to * keep track of when there is a real change. */ @@ -132,14 +131,13 @@ public class VUI extends SimplePanel implements ResizeHandler, /* * Ensure the fragment is properly encoded in all browsers * (#10769) - * + * * createUrlBuilder does not properly pass an empty fragment to * UrlBuilder on Webkit browsers so do it manually (#11686) */ - String location = Window.Location - .createUrlBuilder() - .setHash( - URL.decodeQueryString(Window.Location.getHash())) + String location = Window.Location.createUrlBuilder() + .setHash(URL + .decodeQueryString(Window.Location.getHash())) .buildString(); currentFragment = newFragment; @@ -222,7 +220,7 @@ public class VUI extends SimplePanel implements ResizeHandler, /** * Called when the window or parent div might have been resized. - * + * * This immediately checks the sizes of the window and the parent div (if * monitoring it) and triggers layout recalculation if they have changed. */ @@ -233,15 +231,15 @@ public class VUI extends SimplePanel implements ResizeHandler, /** * Called when the window or parent div might have been resized. - * + * * This immediately checks the sizes of the window and the parent div (if * monitoring it) and triggers layout recalculation if they have changed. - * + * * @param newWindowWidth * The new width of the window * @param newWindowHeight * The new height of the window - * + * * @deprecated use {@link #performSizeCheck()} */ @Deprecated @@ -294,7 +292,8 @@ public class VUI extends SimplePanel implements ResizeHandler, * should shrink as the content's size is fixed and would thus not * automatically shrink.) */ - VConsole.log("Running layout functions due to window or parent resize"); + VConsole.log( + "Running layout functions due to window or parent resize"); // update size to avoid (most) redundant re-layout passes // there can still be an extra layout recalculation if webkit @@ -329,7 +328,7 @@ public class VUI extends SimplePanel implements ResizeHandler, * Returns true if the body is NOT generated, i.e if someone else has made * the page that we're running in. Otherwise we're in charge of the whole * page. - * + * * @return true if we're running embedded */ public boolean isEmbedded() { @@ -340,7 +339,7 @@ public class VUI extends SimplePanel implements ResizeHandler, /** * Returns true if the size of the parent should be checked periodically and * the application should react to its changes. - * + * * @return true if size of parent should be tracked */ protected boolean isMonitoringParentSize() { @@ -350,7 +349,7 @@ public class VUI extends SimplePanel implements ResizeHandler, /* * (non-Javadoc) - * + * * @see * com.google.gwt.event.logical.shared.ResizeHandler#onResize(com.google * .gwt.event.logical.shared.ResizeEvent) @@ -363,7 +362,7 @@ public class VUI extends SimplePanel implements ResizeHandler, /** * Called when a resize event is received. - * + * * This may trigger a lazy refresh or perform the size check immediately * depending on the browser used and whether the server side requests * resizes to be lazy. @@ -374,7 +373,7 @@ public class VUI extends SimplePanel implements ResizeHandler, * problems with scrollbars. Firefox 3 might also produce some extra * events. We postpone both the re-layouting and the server side event * for a while to deal with these issues. - * + * * We may also postpone these events to avoid slowness when resizing the * browser window. Constantly recalculating the layout causes the resize * operation to be really slow with complex layouts. @@ -410,13 +409,10 @@ public class VUI extends SimplePanel implements ResizeHandler, @Override public void onWindowClosing(Window.ClosingEvent event) { - // Change focus on this window in order to ensure that all state is - // collected from textfields - // TODO this is a naive hack, that only works with text fields and may - // cause some odd issues. Should be replaced with a decent solution, see - // also related BeforeShortcutActionListener interface. Same interface - // might be usable here. - VLegacyTextField.flushChangesFromFocusedTextField(); + // Ensure that any change in the currently focused component is noted + // before refreshing. Ensures that e.g. text in the focused text field + // does not disappear on refresh (when preserve on refresh is enabled) + connection.flushActiveConnector(); } private native static void loadAppIdListFromDOM(ArrayList list) @@ -482,10 +478,10 @@ public class VUI extends SimplePanel implements ResizeHandler, /** * Allows to store the currently focused Element. - * + * * Current use case is to store the focus when a Window is opened. Does * currently handle only a single value. Needs to be extended for #12158 - * + * * @param focusedElement */ public void storeFocus() { @@ -494,10 +490,10 @@ public class VUI extends SimplePanel implements ResizeHandler, /** * Restores the previously stored focus Element. - * + * * Current use case is to restore the focus when a Window is closed. Does * currently handle only a single value. Needs to be extended for #12158 - * + * * @return the lastFocusElementBeforeDialogOpened */ public void focusStoredElement() {