Changeset 4a3f767d in vaadin
- Timestamp:
- 03/14/12 14:00:53 (14 months ago)
- Branches:
- master, 7.0, 7.1
- Children:
- 07c94092
- Parents:
- f38942e0
- git-author:
- Artur Signell <artur@…> (03/13/12 18:39:00)
- git-committer:
- Artur Signell <artur@…> (03/14/12 14:00:53)
- Location:
- src/com/vaadin
- Files:
-
- 5 edited
-
terminal/gwt/client/ui/TabsheetBaseConnector.java (modified) (4 diffs)
-
terminal/gwt/client/ui/VTabsheet.java (modified) (1 diff)
-
terminal/gwt/server/AbstractCommunicationManager.java (modified) (2 diffs)
-
ui/AbstractComponent.java (modified) (2 diffs)
-
ui/TabSheet.java (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/com/vaadin/terminal/gwt/client/ui/TabsheetBaseConnector.java
r6548c896 r4a3f767d 10 10 import com.vaadin.terminal.gwt.client.ApplicationConnection; 11 11 import com.vaadin.terminal.gwt.client.ComponentConnector; 12 import com.vaadin.terminal.gwt.client.ConnectorMap;13 12 import com.vaadin.terminal.gwt.client.UIDL; 14 13 … … 38 37 final UIDL tabs = uidl.getChildUIDL(0); 39 38 40 // Paintables in the TabSheet before update39 // Widgets in the TabSheet before update 41 40 ArrayList<Widget> oldWidgets = new ArrayList<Widget>(); 42 41 for (Iterator<Widget> iterator = getWidget().getWidgetIterator(); iterator … … 76 75 for (int i = 0; i < getWidget().getTabCount(); i++) { 77 76 ComponentConnector p = getWidget().getTab(i); 78 // During the initial rendering the paintable might be null (this is 79 // weird...) 77 // null for PlaceHolder widgets 80 78 if (p != null) { 81 79 oldWidgets.remove(p.getWidget()); … … 83 81 } 84 82 85 // Perform unregister for any paintables removed during update83 // Detach any old tab widget, should be max 1 86 84 for (Iterator<Widget> iterator = oldWidgets.iterator(); iterator 87 85 .hasNext();) { 88 86 Widget oldWidget = iterator.next(); 89 ComponentConnector oldPaintable = ConnectorMap.get(client)90 .getConnector(oldWidget);91 87 if (oldWidget.isAttached()) { 92 88 oldWidget.removeFromParent(); 93 89 } 94 ConnectorMap.get(client).unregisterConnector(oldPaintable);95 90 } 96 91 -
src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java
r2bd14891 r4a3f767d 897 897 private void renderContent(final UIDL contentUIDL) { 898 898 final ComponentConnector content = client.getPaintable(contentUIDL); 899 Widget newWidget = content.getWidget(); 899 900 if (tp.getWidgetCount() > activeTabIndex) { 900 901 Widget old = tp.getWidget(activeTabIndex); 901 if (old != content) {902 if (old != newWidget) { 902 903 tp.remove(activeTabIndex); 903 904 ConnectorMap paintableMap = ConnectorMap.get(client); -
src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
r79871340 r4a3f767d 952 952 953 953 for (Component child : getChildComponents(parent)) { 954 if (child.getState().isVisible() 955 && parent.isComponentVisible(child)) { 954 if (child.isVisible()) { 956 955 String childConnectorId = getPaintableId(child); 957 956 children.put(childConnectorId); … … 963 962 throw new PaintException( 964 963 "Failed to send hierarchy information about " 965 + parentConnectorId + " to the client: "966 + e.getMessage());964 + parentConnectorId 965 + " to the client: " + e.getMessage()); 967 966 } 968 967 } -
src/com/vaadin/ui/AbstractComponent.java
re248adc2 r4a3f767d 410 410 */ 411 411 public boolean isVisible() { 412 return getState().isVisible() 413 && (getParent() == null || getParent().isVisible()); 412 if (getParent() == null) { 413 return getState().isVisible(); 414 } else { 415 return getState().isVisible() && getParent().isVisible() 416 && ((HasComponents) getParent()).isComponentVisible(this); 417 } 414 418 } 415 419 … … 1700 1704 } 1701 1705 } 1706 1707 public String getConnectorId() { 1708 throw new RuntimeException( 1709 "TODO: Move connector id handling to AbstractComponent"); 1710 } 1702 1711 } -
src/com/vaadin/ui/TabSheet.java
r79871340 r4a3f767d 8 8 import java.lang.reflect.Method; 9 9 import java.util.ArrayList; 10 import java.util.Collection;11 10 import java.util.Collections; 12 11 import java.util.HashMap; 13 import java.util.HashSet;14 12 import java.util.Iterator; 15 13 import java.util.Map; … … 29 27 import com.vaadin.terminal.gwt.client.ui.TabsheetConnector; 30 28 import com.vaadin.terminal.gwt.client.ui.VTabsheet; 31 import com.vaadin.terminal.gwt.server.CommunicationManager;32 29 import com.vaadin.ui.Component.Focusable; 33 30 import com.vaadin.ui.themes.Reindeer; … … 96 93 97 94 /** 98 * Tabs that have been shown to the user (have been painted as selected).99 */100 private HashSet<Component> paintedTabs = new HashSet<Component>();101 102 /**103 95 * Handler to be called when a tab is closed. 104 96 */ … … 381 373 target.startTag("tabs"); 382 374 383 Collection<Component> orphaned = new HashSet<Component>(paintedTabs);384 385 375 for (final Iterator<Component> i = getComponentIterator(); i.hasNext();) { 386 376 final Component component = i.next(); 387 388 orphaned.remove(component);389 377 390 378 Tab tab = tabs.get(component); … … 437 425 if (component.equals(selected)) { 438 426 target.addAttribute("selected", true); 439 if (!paintedTabs.contains(component)) {440 // Ensure the component is painted if it hasn't already been441 // painted in this tabsheet442 component.requestRepaint();443 paintedTabs.add(component);444 }445 427 component.paint(target); 446 } else if (paintedTabs.contains(component)) {447 component.paint(target);448 } else {449 component.requestRepaintRequests();450 428 } 451 429 target.endTag("tab"); … … 458 436 } 459 437 460 // clean possibly orphaned entries in paintedTabs461 for (Component component2 : orphaned) {462 paintedTabs.remove(component2);463 }464 438 } 465 439 … … 600 574 fireSelectedTabChange(); 601 575 requestRepaint(); 576 // Repaint of the selected component is needed as only the selected 577 // component is communicated to the client. Otherwise this will be a 578 // "cached" update even though the client knows nothing about the 579 // connector 580 if (selected instanceof ComponentContainer) { 581 ((ComponentContainer) selected).requestRepaintAll(); 582 } else { 583 selected.requestRepaint(); 584 } 602 585 } 603 586 } … … 881 864 } 882 865 883 @Override884 public void removeListener(RepaintRequestListener listener) {885 super.removeListener(listener);886 if (listener instanceof CommunicationManager) {887 // clean the paintedTabs here instead of detach to avoid subtree888 // caching issues when detached-attached without render889 paintedTabs.clear();890 }891 }892 893 866 /** 894 867 * Tab meta-data for a component in a {@link TabSheet}.
Note: See TracChangeset
for help on using the changeset viewer.
