Changeset cc74de9d3 in vaadin


Ignore:
Timestamp:
Mar 21, 2012 1:28:09 PM (3 years ago)
Author:
Artur Signell <artur@…>
Branches:
master, 7.0, 7.1, 7.2, 7.3
Children:
0ccbb6f7
Parents:
49c33ff2d
git-author:
Artur Signell <artur@…> (03/20/12 13:57:37)
git-committer:
Artur Signell <artur@…> (03/21/12 13:28:09)
Message:

Pass ManagedLayout to layout slot to avoid NPE when a child is detached
(getParent() returns null)

Location:
src/com/vaadin/terminal/gwt/client/ui
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java

    rce24fb4f rcc74de9d3  
    242242                // create a new slot. 
    243243                slot = new ComponentConnectorLayoutSlot(getWidget() 
    244                         .getStylePrimaryName(), child); 
     244                        .getStylePrimaryName(), child, this); 
    245245            } 
    246246            layout.addOrMove(slot, currentIndex++); 
  • src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java

    r6cf9afc8 rcc74de9d3  
    6060    } 
    6161 
    62     private ComponentConnector getPaintable() { 
    63         return ConnectorMap.get(client).getConnector(this); 
     62    private GridLayoutConnector getConnector() { 
     63        return (GridLayoutConnector) ConnectorMap.get(client) 
     64                .getConnector(this); 
    6465    } 
    6566 
     
    236237 
    237238    private boolean isUndefinedHeight() { 
    238         return getPaintable().isUndefinedHeight(); 
     239        return getConnector().isUndefinedHeight(); 
    239240    } 
    240241 
    241242    private boolean isUndefinedWidth() { 
    242         return getPaintable().isUndefinedWidth(); 
     243        return getConnector().isUndefinedWidth(); 
    243244    } 
    244245 
     
    456457        public boolean hasRelativeHeight() { 
    457458            if (slot != null) { 
    458                 return slot.getPaintable().isRelativeHeight(); 
     459                return slot.getChild().isRelativeHeight(); 
    459460            } else { 
    460461                return true; 
     
    514515        protected boolean hasRelativeWidth() { 
    515516            if (slot != null) { 
    516                 return slot.getPaintable().isRelativeWidth(); 
     517                return slot.getChild().isRelativeWidth(); 
    517518            } else { 
    518519                return true; 
     
    552553            hasContent = childUidl != null; 
    553554            if (hasContent) { 
    554                 ComponentConnector paintable = client.getPaintable(childUidl); 
    555  
    556                 if (slot == null || slot.getPaintable() != paintable) { 
     555                ComponentConnector childConnector = client 
     556                        .getPaintable(childUidl); 
     557 
     558                if (slot == null || slot.getChild() != childConnector) { 
    557559                    slot = new ComponentConnectorLayoutSlot(CLASSNAME, 
    558                             paintable); 
     560                            childConnector, getConnector()); 
    559561                    Element slotWrapper = slot.getWrapperElement(); 
    560562                    getElement().appendChild(slotWrapper); 
    561563 
    562                     Widget widget = paintable.getWidget(); 
     564                    Widget widget = childConnector.getWidget(); 
    563565                    insert(widget, slotWrapper, getWidgetCount(), false); 
    564566                    Cell oldCell = widgetToCell.put(widget, this); 
     
    569571                } 
    570572 
    571                 paintable.updateFromUIDL(childUidl, client); 
     573                childConnector.updateFromUIDL(childUidl, client); 
    572574            } 
    573575        } 
  • src/com/vaadin/terminal/gwt/client/ui/layout/ComponentConnectorLayoutSlot.java

    r6cf9afc8 rcc74de9d3  
    1111public class ComponentConnectorLayoutSlot extends VLayoutSlot { 
    1212 
    13     final ComponentConnector paintable; 
    14     private LayoutManager layoutManager; 
     13    final ComponentConnector child; 
     14    final ManagedLayout layout; 
    1515 
    1616    public ComponentConnectorLayoutSlot(String baseClassName, 
    17             ComponentConnector paintable) { 
    18         super(baseClassName, paintable.getWidget()); 
    19         this.paintable = paintable; 
    20         layoutManager = paintable.getLayoutManager(); 
     17            ComponentConnector child, ManagedLayout layout) { 
     18        super(baseClassName, child.getWidget()); 
     19        this.child = child; 
     20        this.layout = layout; 
    2121    } 
    2222 
    23     public ComponentConnector getPaintable() { 
    24         return paintable; 
     23    public ComponentConnector getChild() { 
     24        return child; 
    2525    } 
    2626 
     
    2828    protected int getCaptionHeight() { 
    2929        VCaption caption = getCaption(); 
    30         return caption != null ? layoutManager.getOuterHeight(caption 
    31                 .getElement()) : 0; 
     30        return caption != null ? getLayoutManager().getOuterHeight( 
     31                caption.getElement()) : 0; 
    3232    } 
    3333 
     
    3535    protected int getCaptionWidth() { 
    3636        VCaption caption = getCaption(); 
    37         return caption != null ? layoutManager.getOuterWidth(caption 
    38                 .getElement()) : 0; 
     37        return caption != null ? getLayoutManager().getOuterWidth( 
     38                caption.getElement()) : 0; 
     39    } 
     40 
     41    public LayoutManager getLayoutManager() { 
     42        return layout.getLayoutManager(); 
    3943    } 
    4044 
     
    4347        VCaption oldCaption = getCaption(); 
    4448        if (oldCaption != null) { 
    45             layoutManager.unregisterDependency( 
    46                     (ManagedLayout) paintable.getParent(), 
     49            getLayoutManager().unregisterDependency(layout, 
    4750                    oldCaption.getElement()); 
    4851        } 
    4952        super.setCaption(caption); 
    5053        if (caption != null) { 
    51             layoutManager 
    52                     .registerDependency((ManagedLayout) paintable.getParent(), 
    53                             caption.getElement()); 
     54            getLayoutManager().registerDependency( 
     55                    (ManagedLayout) child.getParent(), caption.getElement()); 
    5456        } 
    5557    } 
     
    5759    @Override 
    5860    public int getWidgetHeight() { 
    59         return layoutManager.getOuterHeight(paintable.getWidget().getElement()); 
     61        return getLayoutManager() 
     62                .getOuterHeight(child.getWidget().getElement()); 
    6063    } 
    6164 
    6265    @Override 
    6366    public int getWidgetWidth() { 
    64         return layoutManager.getOuterWidth(paintable.getWidget().getElement()); 
     67        return getLayoutManager().getOuterWidth(child.getWidget().getElement()); 
    6568    } 
    6669 
    6770    @Override 
    6871    public boolean isUndefinedHeight() { 
    69         return paintable.isUndefinedHeight(); 
     72        return child.isUndefinedHeight(); 
    7073    } 
    7174 
    7275    @Override 
    7376    public boolean isUndefinedWidth() { 
    74         return paintable.isUndefinedWidth(); 
     77        return child.isUndefinedWidth(); 
    7578    } 
    7679 
    7780    @Override 
    7881    public boolean isRelativeHeight() { 
    79         return paintable.isRelativeHeight(); 
     82        return child.isRelativeHeight(); 
    8083    } 
    8184 
    8285    @Override 
    8386    public boolean isRelativeWidth() { 
    84         return paintable.isRelativeWidth(); 
     87        return child.isRelativeWidth(); 
    8588    } 
    8689} 
Note: See TracChangeset for help on using the changeset viewer.