From 35735b3e35a7b097cf5d3872a7d4c5b3610303db Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Fri, 21 Aug 2009 07:35:53 +0000 Subject: [PATCH] fixes #3195 svn changeset:8519/svn branch:6.1 --- .../gwt/client/ui/layout/CellBasedLayout.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ui/layout/CellBasedLayout.java b/src/com/vaadin/terminal/gwt/client/ui/layout/CellBasedLayout.java index c9bacadcce..538d4f8c9f 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/layout/CellBasedLayout.java +++ b/src/com/vaadin/terminal/gwt/client/ui/layout/CellBasedLayout.java @@ -1,6 +1,7 @@ package com.vaadin.terminal.gwt.client.ui.layout; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import com.google.gwt.dom.client.DivElement; @@ -311,12 +312,37 @@ public abstract class CellBasedLayout extends ComplexPanel implements Container int toRemove = getChildren().size() - pos; while (toRemove-- > 0) { + /* flag to not if widget has been moved and rendered elsewhere */ + boolean relocated = false; ChildComponentContainer child = (ChildComponentContainer) getChildren() .get(pos); - widgetToComponentContainer.remove(child.getWidget()); + Widget widget = child.getWidget(); + if (widget == null) { + // a rare case where child component has been relocated and + // rendered elsewhere + // clean widgetToComponentContainer map by iterating the correct + // mapping + Iterator iterator = widgetToComponentContainer.keySet() + .iterator(); + while (iterator.hasNext()) { + Widget key = iterator.next(); + if (widgetToComponentContainer.get(key) == child) { + widget = key; + relocated = true; + break; + } + } + if (widget == null) { + throw new NullPointerException(); + } + } + ChildComponentContainer remove = widgetToComponentContainer + .remove(widget); remove(child); - Paintable p = (Paintable) child.getWidget(); - client.unregisterPaintable(p); + if (!relocated) { + Paintable p = (Paintable) widget; + client.unregisterPaintable(p); + } } } -- 2.39.5