Просмотр исходного кода

Flush the active connector before closing a browser window/tab

Change-Id: I116ec752153e8e86724b542234e4d6af46caeb09
tags/8.0.0.alpha1
Artur Signell 7 лет назад
Родитель
Сommit
7cd6f91f00
1 измененных файлов: 28 добавлений и 32 удалений
  1. 28
    32
      client/src/main/java/com/vaadin/client/ui/VUI.java

+ 28
- 32
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() {

Загрузка…
Отмена
Сохранить