summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2016-08-17 13:50:28 +0300
committerVaadin Code Review <review@vaadin.com>2016-08-17 11:36:23 +0000
commit7cd6f91f00421c132314965a738b59ce190fe4f6 (patch)
tree17537d4d10b8e4619c33020eeee219fcd5ec4f7b /client
parentfa211b7a1135748cc421d017510c3b7b45f1eb98 (diff)
downloadvaadin-framework-7cd6f91f00421c132314965a738b59ce190fe4f6.tar.gz
vaadin-framework-7cd6f91f00421c132314965a738b59ce190fe4f6.zip
Flush the active connector before closing a browser window/tab
Change-Id: I116ec752153e8e86724b542234e4d6af46caeb09
Diffstat (limited to 'client')
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VUI.java60
1 files changed, 28 insertions, 32 deletions
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<String> 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() {