diff options
author | Henri Sara <henri.sara@itmill.com> | 2011-07-27 08:15:35 +0000 |
---|---|---|
committer | Henri Sara <henri.sara@itmill.com> | 2011-07-27 08:15:35 +0000 |
commit | ca96dca574f2412c760b0b70a72b3166e9f813fc (patch) | |
tree | b2ff4a57d3fef72eb6bb56d0d1b52eb415a3a5f1 /src | |
parent | 4adc69a6e80b2320952b7658171ca170bfaa251f (diff) | |
download | vaadin-framework-ca96dca574f2412c760b0b70a72b3166e9f813fc.tar.gz vaadin-framework-ca96dca574f2412c760b0b70a72b3166e9f813fc.zip |
Merged changes to 6.7
svn changeset:19972/svn branch:6.7
Diffstat (limited to 'src')
7 files changed, 80 insertions, 62 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java index 4b6194b79b..6787b36022 100644 --- a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java +++ b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java @@ -223,7 +223,6 @@ public class ApplicationConfiguration implements EntryPoint { } } - deferredWidgetLoadLoop.scheduleRepeating(100); } /** @@ -257,6 +256,7 @@ public class ApplicationConfiguration implements EntryPoint { runningApplications.add(a); return true; } else { + deferredWidgetLoader = new DeferredWidgetLoader(); return false; } } @@ -361,6 +361,8 @@ public class ApplicationConfiguration implements EntryPoint { cmd.execute(); } callbacks.clear(); + } else if(widgetsLoading == 0 && deferredWidgetLoader != null) { + deferredWidgetLoader.trigger(); } } @@ -368,22 +370,44 @@ public class ApplicationConfiguration implements EntryPoint { /* * This loop loads widget implementation that should be loaded deferred. */ - private static final Timer deferredWidgetLoadLoop = new Timer() { + static class DeferredWidgetLoader extends Timer { private static final int FREE_LIMIT = 4; + private static final int FREE_CHECK_TIMEOUT = 100; int communicationFree = 0; int nextWidgetIndex = 0; + private boolean pending; + + public DeferredWidgetLoader() { + schedule(5000); + } + + public void trigger() { + if(!pending) { + schedule(FREE_CHECK_TIMEOUT); + } + } + + @Override + public void schedule(int delayMillis) { + super.schedule(delayMillis); + pending = true; + } @Override public void run() { + pending = false; if (!isBusy()) { Class<? extends Paintable> nextType = getNextType(); if (nextType == null) { // ensured that all widgets are loaded - cancel(); + deferredWidgetLoader = null; } else { + communicationFree = 0; widgetSet.loadImplementation(nextType); } + } else { + schedule(FREE_CHECK_TIMEOUT); } } @@ -400,21 +424,23 @@ public class ApplicationConfiguration implements EntryPoint { private boolean isBusy() { if (widgetsLoading > 0) { communicationFree = 0; - return false; + return true; } for (ApplicationConnection app : runningApplications) { if (app.hasActiveRequest()) { // if an UIDL request or widget loading is active, mark as // busy communicationFree = 0; - return false; + return true; } } communicationFree++; return communicationFree < FREE_LIMIT; } - }; - + } + + private static DeferredWidgetLoader deferredWidgetLoader; + public void onModuleLoad() { // Enable IE6 Background image caching diff --git a/src/com/vaadin/terminal/gwt/client/CSSRule.java b/src/com/vaadin/terminal/gwt/client/CSSRule.java index 5c7758e0dd..97604d242e 100644 --- a/src/com/vaadin/terminal/gwt/client/CSSRule.java +++ b/src/com/vaadin/terminal/gwt/client/CSSRule.java @@ -72,7 +72,7 @@ public class CSSRule { var j = theRules.length; for(var i=0; i<j; i++) { var r = theRules[i]; - if(r.type == 1 || sheet.imports) { + if(r.type == 1 || sheet.imports) { var selectors = r.selectorText.toLowerCase().split(","); var n = selectors.length; for(var m=0; m<n; m++) { diff --git a/src/com/vaadin/terminal/gwt/client/VDebugConsole.java b/src/com/vaadin/terminal/gwt/client/VDebugConsole.java index ec172f67f8..5d7c0be437 100755 --- a/src/com/vaadin/terminal/gwt/client/VDebugConsole.java +++ b/src/com/vaadin/terminal/gwt/client/VDebugConsole.java @@ -56,7 +56,7 @@ import com.vaadin.terminal.gwt.client.ui.VOverlay; * This implementation can be overridden with GWT deferred binding. * */ -public final class VDebugConsole extends VOverlay implements Console { +public class VDebugConsole extends VOverlay implements Console { private static final String POS_COOKIE_NAME = "VDebugConsolePos"; @@ -287,11 +287,7 @@ public final class VDebugConsole extends VOverlay implements Console { protected void remoteLog(String msg) { msgQueue.add(msg); - if (msg.length() > 4) { - doSend.execute(); - } else { - sendToRemoteLog.trigger(); - } + sendToRemoteLog.trigger(); } /** diff --git a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java index 1226c5ae79..8f8958d365 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java @@ -807,6 +807,18 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler, enabled = !uidl.hasAttribute("disabled"); + if (BrowserInfo.get().isIE8() && !enabled) { + /* + * The disabled shim will not cover the table body if it is + * relative in IE8. See #7324 + */ + scrollBodyPanel.getElement().getStyle() + .setPosition(Position.STATIC); + } else if (BrowserInfo.get().isIE8()) { + scrollBodyPanel.getElement().getStyle() + .setPosition(Position.RELATIVE); + } + this.client = client; paintableId = uidl.getStringAttribute("id"); immediate = uidl.getBooleanAttribute("immediate"); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTree.java b/src/com/vaadin/terminal/gwt/client/ui/VTree.java index ef08e81e10..eb8a2e63c5 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTree.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTree.java @@ -511,9 +511,27 @@ public class VTree extends FocusElementPanel implements Paintable, * Sends the selection to the server */ private void sendSelectionToServer() { - client.updateVariable(paintableId, "selected", selectedIds - .toArray(new String[selectedIds.size()]), immediate); - selectionHasChanged = false; + Command command = new Command() { + public void execute() { + client.updateVariable(paintableId, "selected", + selectedIds.toArray(new String[selectedIds.size()]), + immediate); + selectionHasChanged = false; + } + }; + + /* + * Delaying the sending of the selection in webkit to ensure the + * selection is always sent when the tree has focus and after click + * events have been processed. This is due to the focusing + * implementation in FocusImplSafari which uses timeouts when focusing + * and blurring. + */ + if (BrowserInfo.get().isWebkit()) { + Scheduler.get().scheduleDeferred(command); + } else { + command.execute(); + } } /** diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java index a3f1c59846..7ad790e25e 100644 --- a/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java +++ b/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.TreeSet; @@ -244,10 +245,16 @@ public class WidgetMapGenerator extends Generator { boolean first = true; ArrayList<Class<? extends Paintable>> lazyLoadedWidgets = new ArrayList<Class<? extends Paintable>>(); + + HashSet<Class<? extends com.vaadin.terminal.gwt.client.Paintable>> widgetsWithInstantiator = new HashSet<Class<? extends com.vaadin.terminal.gwt.client.Paintable>>(); + for (Class<? extends Paintable> class1 : paintablesHavingWidgetAnnotation) { ClientWidget annotation = class1.getAnnotation(ClientWidget.class); Class<? extends com.vaadin.terminal.gwt.client.Paintable> clientClass = annotation .value(); + if(widgetsWithInstantiator.contains(clientClass)) { + continue; + } if (clientClass == VView.class) { // VView's are not instantiated by widgetset continue; @@ -288,6 +295,7 @@ public class WidgetMapGenerator extends Generator { sourceWriter.print(");"); } sourceWriter.print("}"); + widgetsWithInstantiator.add(clientClass); } sourceWriter.println("}"); diff --git a/src/com/vaadin/ui/AbstractTextField.java b/src/com/vaadin/ui/AbstractTextField.java index 622b8d18d9..4ed76d367b 100644 --- a/src/com/vaadin/ui/AbstractTextField.java +++ b/src/com/vaadin/ui/AbstractTextField.java @@ -1,4 +1,4 @@ -/* +/* @ITMillApache2LicenseForJavaFiles@ */ @@ -123,20 +123,7 @@ public abstract class AbstractTextField extends AbstractField implements throw new IllegalStateException( "Null values are not allowed if the null-representation is null"); } - - if (requestRepaintInTextChangeEvent && !valueChangeInTextChangeEvent) { - /* - * If the repaint occurred in a text change event then we do not - * want to send back the old value since it will just overwrite the - * typed value so we send the last known value instead which is - * updated by the text change event. - */ - target.addVariable(this, "text", lastKnownTextContent); - } else { - target.addVariable(this, "text", value); - } - requestRepaintInTextChangeEvent = false; - valueChangeInTextChangeEvent = false; + target.addVariable(this, "text", value); if (selectionPosition != -1) { target.addAttribute("selpos", selectionPosition); @@ -184,22 +171,6 @@ public abstract class AbstractTextField extends AbstractField implements } } - /** - * Flag for monitoring if a repaint gets requested in a text change event - */ - private boolean requestRepaintInTextChangeEvent = false; - - @Override - public void requestRepaint() { - if (textChangeEventPending) { - /* - * Textchange event listener triggered this repaint - */ - requestRepaintInTextChangeEvent = true; - } - super.requestRepaint(); - } - @Override public void changeVariables(Object source, Map<String, Object> variables) { changingVariables = true; @@ -467,26 +438,13 @@ public abstract class AbstractTextField extends AbstractField implements private void firePendingTextChangeEvent() { if (textChangeEventPending) { - fireEvent(new TextChangeEventImpl(this)); textChangeEventPending = false; + fireEvent(new TextChangeEventImpl(this)); } } - /** - * Flag for monitoring if the value got changed in a TextChangeEvent - * listener - */ - protected boolean valueChangeInTextChangeEvent = false; - @Override protected void setInternalValue(Object newValue) { - if (textChangeEventPending) { - /* - * Value changed in a TextChangeEvent listener - */ - valueChangeInTextChangeEvent = true; - } - if (changingVariables && !textChangeEventPending) { /* * Fire a "simulated" text change event before value change event if |