summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenri Sara <hesara@vaadin.com>2013-04-29 14:19:02 +0300
committerHenri Sara <hesara@vaadin.com>2013-04-29 14:19:02 +0300
commit747c99eea95b7dba0b9ea8023a01e4e97222194d (patch)
tree1bc49591d74fbda909c548345d91389be3042744
parent97e5714b0aa99e39fd1c6ec7089631ea3a6f9fcb (diff)
parentd214efa39a011002eb88e683676508e438842fe4 (diff)
downloadvaadin-framework-747c99eea95b7dba0b9ea8023a01e4e97222194d.tar.gz
vaadin-framework-747c99eea95b7dba0b9ea8023a01e4e97222194d.zip
Merge commit 'd214efa39a011002eb88e683676508e438842fe4'
Conflicts: client/src/com/vaadin/client/ui/orderedlayout/Slot.java Change-Id: I2fb5d1ac4b5c10a1fe5b1a6f976c1f59283b9169
-rw-r--r--client/src/com/vaadin/client/ui/orderedlayout/Slot.java29
-rw-r--r--server/src/com/vaadin/event/ActionManager.java60
-rw-r--r--server/src/com/vaadin/server/VaadinServlet.java32
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java14
4 files changed, 83 insertions, 52 deletions
diff --git a/client/src/com/vaadin/client/ui/orderedlayout/Slot.java b/client/src/com/vaadin/client/ui/orderedlayout/Slot.java
index cf19da3496..00ff5bbc5a 100644
--- a/client/src/com/vaadin/client/ui/orderedlayout/Slot.java
+++ b/client/src/com/vaadin/client/ui/orderedlayout/Slot.java
@@ -25,8 +25,11 @@ import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.BrowserInfo;
import com.vaadin.client.LayoutManager;
import com.vaadin.client.StyleConstants;
+import com.vaadin.client.Util;
+import com.vaadin.client.ui.layout.ElementResizeEvent;
import com.vaadin.client.ui.layout.ElementResizeListener;
import com.vaadin.shared.ui.AlignmentInfo;
@@ -93,6 +96,22 @@ public final class Slot extends SimplePanel {
private ElementResizeListener spacingResizeListener;
+ /*
+ * This listener is applied only in IE8 to workaround browser issue where
+ * IE8 forgets to update the error indicator position when the slot gets
+ * resized by widget resizing itself. #11693
+ */
+ private ElementResizeListener ie8CaptionElementResizeUpdateListener = new ElementResizeListener() {
+
+ @Override
+ public void onElementResize(ElementResizeEvent e) {
+ Element caption = getCaptionElement();
+ if (caption != null) {
+ Util.forceIE8Redraw(caption);
+ }
+ }
+ };
+
// Caption is placed after component unless there is some part which
// moves it above.
private CaptionPosition captionPosition = CaptionPosition.RIGHT;
@@ -161,6 +180,11 @@ public final class Slot extends SimplePanel {
lm.addElementResizeListener(getSpacingElement(),
spacingResizeListener);
}
+
+ if (BrowserInfo.get().isIE8()) {
+ lm.addElementResizeListener(getWidget().getElement(),
+ ie8CaptionElementResizeUpdateListener);
+ }
}
}
@@ -182,6 +206,11 @@ public final class Slot extends SimplePanel {
lm.removeElementResizeListener(getSpacingElement(),
spacingResizeListener);
}
+
+ if (BrowserInfo.get().isIE8()) {
+ lm.removeElementResizeListener(getWidget().getElement(),
+ ie8CaptionElementResizeUpdateListener);
+ }
}
}
diff --git a/server/src/com/vaadin/event/ActionManager.java b/server/src/com/vaadin/event/ActionManager.java
index 7a4b39444e..ce3e27d539 100644
--- a/server/src/com/vaadin/event/ActionManager.java
+++ b/server/src/com/vaadin/event/ActionManager.java
@@ -15,7 +15,7 @@
*/
package com.vaadin.event;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.Map;
import com.vaadin.event.Action.Container;
@@ -44,10 +44,10 @@ public class ActionManager implements Action.Container, Action.Handler,
private static final long serialVersionUID = 1641868163608066491L;
/** List of action handlers */
- protected HashSet<Action> ownActions = null;
+ protected LinkedHashSet<Action> ownActions = null;
/** List of action handlers */
- protected HashSet<Handler> actionHandlers = null;
+ protected LinkedHashSet<Handler> actionHandlers = null;
/** Action mapper */
protected KeyMapper<Action> actionMapper = null;
@@ -90,7 +90,7 @@ public class ActionManager implements Action.Container, Action.Handler,
@Override
public <T extends Action & Action.Listener> void addAction(T action) {
if (ownActions == null) {
- ownActions = new HashSet<Action>();
+ ownActions = new LinkedHashSet<Action>();
}
if (ownActions.add(action)) {
requestRepaint();
@@ -115,7 +115,7 @@ public class ActionManager implements Action.Container, Action.Handler,
if (actionHandler != null) {
if (actionHandlers == null) {
- actionHandlers = new HashSet<Handler>();
+ actionHandlers = new LinkedHashSet<Handler>();
}
if (actionHandlers.add(actionHandler)) {
@@ -150,20 +150,7 @@ public class ActionManager implements Action.Container, Action.Handler,
actionMapper = null;
- HashSet<Action> actions = new HashSet<Action>();
- if (actionHandlers != null) {
- for (Action.Handler handler : actionHandlers) {
- Action[] as = handler.getActions(actionTarget, viewer);
- if (as != null) {
- for (Action action : as) {
- actions.add(action);
- }
- }
- }
- }
- if (ownActions != null) {
- actions.addAll(ownActions);
- }
+ LinkedHashSet<Action> actions = getActionSet(actionTarget, viewer);
/*
* Must repaint whenever there are actions OR if all actions have been
@@ -225,22 +212,7 @@ public class ActionManager implements Action.Container, Action.Handler,
@Override
public Action[] getActions(Object target, Object sender) {
- HashSet<Action> actions = new HashSet<Action>();
- if (ownActions != null) {
- for (Action a : ownActions) {
- actions.add(a);
- }
- }
- if (actionHandlers != null) {
- for (Action.Handler h : actionHandlers) {
- Action[] as = h.getActions(target, sender);
- if (as != null) {
- for (Action a : as) {
- actions.add(a);
- }
- }
- }
- }
+ LinkedHashSet<Action> actions = getActionSet(target, sender);
return actions.toArray(new Action[actions.size()]);
}
@@ -259,4 +231,22 @@ public class ActionManager implements Action.Container, Action.Handler,
}
}
+ private LinkedHashSet<Action> getActionSet(Object target, Object sender) {
+ LinkedHashSet<Action> actions = new LinkedHashSet<Action>();
+ if (ownActions != null) {
+ actions.addAll(ownActions);
+
+ }
+ if (actionHandlers != null) {
+ for (Action.Handler h : actionHandlers) {
+ Action[] as = h.getActions(target, sender);
+ if (as != null) {
+ for (Action a : as) {
+ actions.add(a);
+ }
+ }
+ }
+ }
+ return actions;
+ }
}
diff --git a/server/src/com/vaadin/server/VaadinServlet.java b/server/src/com/vaadin/server/VaadinServlet.java
index 1facf6e29a..de074941c1 100644
--- a/server/src/com/vaadin/server/VaadinServlet.java
+++ b/server/src/com/vaadin/server/VaadinServlet.java
@@ -666,14 +666,32 @@ public class VaadinServlet extends HttpServlet implements Constants {
protected void writeStaticResourceResponse(HttpServletRequest request,
HttpServletResponse response, URL resourceUrl) throws IOException {
// Write the resource to the client.
- final OutputStream os = response.getOutputStream();
- final byte buffer[] = new byte[DEFAULT_BUFFER_SIZE];
- int bytes;
- InputStream is = resourceUrl.openStream();
- while ((bytes = is.read(buffer)) >= 0) {
- os.write(buffer, 0, bytes);
+ URLConnection connection = resourceUrl.openConnection();
+ try {
+ int length = connection.getContentLength();
+ if (length >= 0) {
+ response.setContentLength(length);
+ }
+ } catch (Throwable e) {
+ // This can be ignored, content length header is not required.
+ // Need to close the input stream because of
+ // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4257700 to
+ // prevent it from hanging, but that is done below.
+ }
+
+ InputStream is = connection.getInputStream();
+ try {
+ final OutputStream os = response.getOutputStream();
+ final byte buffer[] = new byte[DEFAULT_BUFFER_SIZE];
+ int bytes;
+ while ((bytes = is.read(buffer)) >= 0) {
+ os.write(buffer, 0, bytes);
+ }
+ } finally {
+ if (is != null) {
+ is.close();
+ }
}
- is.close();
}
private URL findResourceURL(String filename, ServletContext sc)
diff --git a/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java b/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java
index 0469333965..feb1d7e622 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java
@@ -60,16 +60,10 @@ public class MixinNodeHandler {
}
Node previous = mixinNode;
- for (final Node child : defClone.getChildren()) {
-
- Node clone = (Node) DeepCopy.copy(child);
-
- replaceChildVariables(defClone, clone);
-
- mixinNode.getParentNode().appendChild(clone, previous);
-
- previous = clone;
-
+ for (final Node child : new ArrayList<Node>(defClone.getChildren())) {
+ replaceChildVariables(defClone, child);
+ mixinNode.getParentNode().appendChild(child, previous);
+ previous = child;
}
}