aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VUpload.java10
-rw-r--r--src/com/vaadin/ui/Upload.java23
2 files changed, 29 insertions, 4 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VUpload.java b/src/com/vaadin/terminal/gwt/client/ui/VUpload.java
index d164de79db..ce3012b3b0 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VUpload.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VUpload.java
@@ -99,6 +99,8 @@ public class VUpload extends SimplePanel implements Paintable {
private com.google.gwt.dom.client.Element synthesizedFrame;
+ private int nextUploadId;
+
public VUpload() {
super(com.google.gwt.dom.client.Document.get().createFormElement());
@@ -136,9 +138,14 @@ public class VUpload extends SimplePanel implements Paintable {
if (client.updateComponent(this, uidl, true)) {
return;
}
+ if (uidl.hasAttribute("notStarted")) {
+ t.schedule(400);
+ return;
+ }
setImmediate(uidl.getBooleanAttribute("immediate"));
this.client = client;
paintableId = uidl.getId();
+ nextUploadId = uidl.getIntAttribute("nextid");
element.setAction(client.getAppUri());
submitButton.setText(uidl.getStringAttribute("buttoncaption"));
fu.setName(paintableId + "_file");
@@ -265,7 +272,8 @@ public class VUpload extends SimplePanel implements Paintable {
.getConsole()
.log(
"Visiting server to see if upload started event changed UI.");
- client.sendPendingVariableChanges();
+ client.updateVariable(paintableId, "pollForStart",
+ nextUploadId, true);
}
};
t.schedule(800);
diff --git a/src/com/vaadin/ui/Upload.java b/src/com/vaadin/ui/Upload.java
index 49cf159e0a..0e2f022561 100644
--- a/src/com/vaadin/ui/Upload.java
+++ b/src/com/vaadin/ui/Upload.java
@@ -100,6 +100,10 @@ public class Upload extends AbstractComponent implements Component.Focusable {
private boolean interrupted = false;
+ private boolean notStarted;
+
+ private int nextid;
+
/* TODO: Add a default constructor, receive to temp file. */
/**
@@ -219,8 +223,14 @@ public class Upload extends AbstractComponent implements Component.Focusable {
*/
@Override
public void changeVariables(Object source, Map variables) {
- // NOP
-
+ if (variables.containsKey("pollForStart")) {
+ int id = (Integer) variables.get("pollForStart");
+ if (!isUploading && id == nextid) {
+ notStarted = true;
+ requestRepaint();
+ } else {
+ }
+ }
}
/**
@@ -233,6 +243,11 @@ public class Upload extends AbstractComponent implements Component.Focusable {
*/
@Override
public void paintContent(PaintTarget target) throws PaintException {
+ if (notStarted) {
+ target.addAttribute("notStarted", true);
+ notStarted = false;
+ return;
+ }
// The field should be focused
if (focus) {
target.addAttribute("focus", true);
@@ -247,7 +262,8 @@ public class Upload extends AbstractComponent implements Component.Focusable {
target.addAttribute("buttoncaption", buttonCaption);
- target.addUploadStreamVariable(this, "stream");
+ target.addAttribute("nextid", nextid);
+
}
/**
@@ -906,6 +922,7 @@ public class Upload extends AbstractComponent implements Component.Focusable {
throw new IllegalStateException("uploading already started");
}
isUploading = true;
+ nextid++;
}
/**