From ca96dca574f2412c760b0b70a72b3166e9f813fc Mon Sep 17 00:00:00 2001 From: Henri Sara Date: Wed, 27 Jul 2011 08:15:35 +0000 Subject: Merged changes to 6.7 svn changeset:19972/svn branch:6.7 --- .../gwt/client/ApplicationConfiguration.java | 40 ++++++++++++++---- src/com/vaadin/terminal/gwt/client/CSSRule.java | 2 +- .../vaadin/terminal/gwt/client/VDebugConsole.java | 8 +--- .../terminal/gwt/client/ui/VScrollTable.java | 12 ++++++ src/com/vaadin/terminal/gwt/client/ui/VTree.java | 24 +++++++++-- .../gwt/widgetsetutils/WidgetMapGenerator.java | 8 ++++ src/com/vaadin/ui/AbstractTextField.java | 48 ++-------------------- 7 files changed, 80 insertions(+), 62 deletions(-) (limited to 'src') 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 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 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> lazyLoadedWidgets = new ArrayList>(); + + HashSet> widgetsWithInstantiator = new HashSet>(); + for (Class class1 : paintablesHavingWidgetAnnotation) { ClientWidget annotation = class1.getAnnotation(ClientWidget.class); Class 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 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 -- cgit v1.2.3