From 5efc842094c837b3396aab35f855ca899ee1b74b Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Wed, 21 Mar 2012 14:33:58 +0200 Subject: [PATCH] Unified logic in getting dirty connectors to ensure invisible connectors are never sent to the client. Also fixed isVisibleInContext to take parent restrictions into account and removed extra code. --- .../server/AbstractCommunicationManager.java | 11 +++------- src/com/vaadin/ui/AbstractComponent.java | 20 +++++++++---------- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java index 0c073f71b4..c41c41b4c2 100644 --- a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java +++ b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java @@ -780,19 +780,14 @@ public abstract class AbstractCommunicationManager implements rootConnectorTracker.markAllComponentsDirty(); - dirtyVisibleConnectors.addAll(rootConnectorTracker - .getDirtyComponents()); - // Reset sent locales locales = null; requireLocale(application.getLocale().toString()); - - } else { - // TODO second list/stack for those whose state needs to be sent? - dirtyVisibleConnectors - .addAll(getDirtyVisibleComponents(rootConnectorTracker)); } + dirtyVisibleConnectors + .addAll(getDirtyVisibleComponents(rootConnectorTracker)); + System.out.println("* Found " + dirtyVisibleConnectors.size() + " dirty connectors to paint"); rootConnectorTracker.markAllComponentsClean(); diff --git a/src/com/vaadin/ui/AbstractComponent.java b/src/com/vaadin/ui/AbstractComponent.java index ad91f342ba..0bf4d935d4 100644 --- a/src/com/vaadin/ui/AbstractComponent.java +++ b/src/com/vaadin/ui/AbstractComponent.java @@ -739,6 +739,7 @@ public abstract class AbstractComponent implements Component, MethodEventSource * if the paint operation failed. */ public void paint(PaintTarget target) throws PaintException { + // Only paint content of visible components. if (!isVisibleInContext()) { return; } @@ -751,18 +752,11 @@ public abstract class AbstractComponent implements Component, MethodEventSource target.addAttribute("deferred", true); } else { // Paint the contents of the component + paintContent(target); - // Only paint content of visible components. - if (isVisibleInContext()) { - - paintContent(target); - - final ErrorMessage error = getErrorMessage(); - if (error != null) { - error.paint(target); - } - } else { - target.addAttribute("invisible", true); + final ErrorMessage error = getErrorMessage(); + if (error != null) { + error.paint(target); } } target.endPaintable(this); @@ -786,6 +780,10 @@ public abstract class AbstractComponent implements Component, MethodEventSource } p = p.getParent(); } + if (getParent() != null && !getParent().isComponentVisible(this)) { + return false; + } + // All parents visible, return this state return isVisible(); } -- 2.39.5