From 321c69c95b9e5319ba7df92afa512f73e50f1b83 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 10 Nov 2008 10:58:57 +0000 Subject: [PATCH] Fix for #2195 - TabSheet problems in Safari svn changeset:5838/svn branch:trunk --- WebContent/ITMILL/themes/default/styles.css | 9 ++-- .../themes/default/tabsheet/tabsheet.css | 1 + .../gwt/client/ui/ICustomComponent.java | 12 +++++- .../terminal/gwt/client/ui/ITabsheet.java | 41 ++++++++++--------- .../gwt/client/ui/ITabsheetPanel.java | 35 +++++++++++++--- 5 files changed, 67 insertions(+), 31 deletions(-) diff --git a/WebContent/ITMILL/themes/default/styles.css b/WebContent/ITMILL/themes/default/styles.css index ad0782b827..0ea9b65850 100644 --- a/WebContent/ITMILL/themes/default/styles.css +++ b/WebContent/ITMILL/themes/default/styles.css @@ -358,10 +358,10 @@ input.i-modified, * Link component styles * (useless to move into a separate file) */ - -.i-link span { - text-decoration: underline; - cursor:pointer; +.i-link a { + font-size: 13px; + line-height: 18px; + color: #464f52; } /** @@ -1974,6 +1974,7 @@ input.i-modified, background-color: #fff; border-bottom: 1px solid #dee2e3; border-top: none; + position: relative; } .i-tabsheet-hidetabs .i-tabsheet-content { diff --git a/WebContent/ITMILL/themes/default/tabsheet/tabsheet.css b/WebContent/ITMILL/themes/default/tabsheet/tabsheet.css index 90dcbbbbb5..fee91776a8 100644 --- a/WebContent/ITMILL/themes/default/tabsheet/tabsheet.css +++ b/WebContent/ITMILL/themes/default/tabsheet/tabsheet.css @@ -138,6 +138,7 @@ background-color: #fff; border-bottom: 1px solid #dee2e3; border-top: none; + position: relative; } .i-tabsheet-hidetabs .i-tabsheet-content { diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ICustomComponent.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ICustomComponent.java index b0124809fc..4bf30467b7 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ICustomComponent.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ICustomComponent.java @@ -22,6 +22,7 @@ public class ICustomComponent extends SimplePanel implements Container { private Paintable component; private boolean rendering; private String width; + private RenderSpace renderSpace = new RenderSpace(); public ICustomComponent() { super(); @@ -49,6 +50,10 @@ public class ICustomComponent extends SimplePanel implements Container { } p.updateFromUIDL(child, client); } + + renderSpace.setWidth(getElement().getOffsetWidth()); + renderSpace.setHeight(getElement().getOffsetHeight()); + rendering = false; } @@ -79,13 +84,14 @@ public class ICustomComponent extends SimplePanel implements Container { } public RenderSpace getAllocatedSpace(Widget child) { - return new RenderSpace(getElement().getOffsetWidth(), getElement() - .getOffsetHeight()); + return renderSpace; } @Override public void setHeight(String height) { super.setHeight(height); + renderSpace.setHeight(getElement().getOffsetHeight()); + if (!height.equals(this.height)) { this.height = height; if (!rendering) { @@ -97,6 +103,8 @@ public class ICustomComponent extends SimplePanel implements Container { @Override public void setWidth(String width) { super.setWidth(width); + renderSpace.setWidth(getElement().getOffsetWidth()); + if (!width.equals(this.width)) { this.width = width; if (!rendering) { diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java index 04531d3034..9dc38c4f66 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java @@ -399,7 +399,7 @@ public class ITabsheet extends ITabsheetBase implements ITabsheet.this.iLayout(); (content).updateFromUIDL(contentUIDL, client); - fixHeight(); + fixVisibleTabSize(); ITabsheet.this.removeStyleDependentName("loading"); if (previousVisibleWidget != null) { DOM.setStyleAttribute(previousVisibleWidget.getElement(), @@ -422,11 +422,10 @@ public class ITabsheet extends ITabsheetBase implements // Set proper values for content element DOM.setStyleAttribute(contentNode, "height", contentHeight + "px"); renderSpace.setHeight(contentHeight); - contentNode.getStyle().setProperty("position", "relative"); } else { DOM.setStyleAttribute(contentNode, "height", ""); renderSpace.setHeight(0); - fixHeight(); + fixVisibleTabSize(); } iLayout(); } @@ -458,24 +457,28 @@ public class ITabsheet extends ITabsheetBase implements updateTabScroller(); - if (tp.getVisibleWidget() >= 0) { - Util.runWebkitOverflowAutoFix(DOM.getParent(tp.getWidget( - tp.getVisibleWidget()).getElement())); - } + tp.runWebkitOverflowAutoFix(); } - private void fixHeight() { - if (isDynamicHeight()) { - if (tp.getVisibleWidget() >= 0) { - Widget widget = tp.getWidget(tp.getVisibleWidget()); - int widgetHeight = widget.getOffsetHeight(); - DOM.setStyleAttribute(tp.getElement(), "height", widgetHeight - + "px"); - tp.setVisibleWidgetHeight(widgetHeight); - } - } else { - DOM.setStyleAttribute(tp.getElement(), "height", ""); + /** + * Sets the size of the visible tab (component). As the tab is set to + * position: absolute (to work around a firefox flickering bug) we must keep + * this up-to-date by hand. + */ + private void fixVisibleTabSize() { + /* + * The overflow=auto element must have a height specified, otherwise it + * will be just as high as the contents and no scrollbars will appear + */ + int height = -1; + int width = -1; + if (!isDynamicHeight()) { + height = renderSpace.getHeight(); + } + if (!isDynamicWidth()) { + width = renderSpace.getWidth(); } + tp.fixVisibleTabSize(width, height); } @@ -568,7 +571,7 @@ public class ITabsheet extends ITabsheetBase implements * Size has changed so we let the child components know about the * new size. */ - fixHeight(); + fixVisibleTabSize(); iLayout(); return false; diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheetPanel.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheetPanel.java index b5eff5b122..bae3b10c8c 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheetPanel.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheetPanel.java @@ -8,6 +8,7 @@ import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.ComplexPanel; import com.google.gwt.user.client.ui.Widget; +import com.itmill.toolkit.terminal.gwt.client.Util; /** * A panel that displays all of its child widgets in a 'deck', where only one @@ -116,16 +117,38 @@ public class ITabsheetPanel extends ComplexPanel { } private void unHide(Element e) { - DOM.setStyleAttribute(e, "top", ""); - DOM.setStyleAttribute(e, "left", ""); + DOM.setStyleAttribute(e, "top", "0px"); + DOM.setStyleAttribute(e, "left", "0px"); DOM.setStyleAttribute(e, "visibility", ""); - } - public void setVisibleWidgetHeight(int widgetHeight) { - DOM.setStyleAttribute(DOM.getParent(visibleWidget.getElement()), - "height", widgetHeight + "px"); + public void fixVisibleTabSize(int width, int height) { + if (visibleWidget == null) { + return; + } + + if (height < 0) { + height = visibleWidget.getOffsetHeight(); + } + if (width < 0) { + width = visibleWidget.getOffsetWidth(); + } + // i-tabsheet-tabsheetpanel height + getElement().getStyle().setPropertyPx("height", height); + getElement().getStyle().setPropertyPx("width", width); + + // widget wrapper height + Element wrapperDiv = DOM.getParent(visibleWidget.getElement()); + wrapperDiv.getStyle().setPropertyPx("height", height); + wrapperDiv.getStyle().setPropertyPx("width", width); } + public void runWebkitOverflowAutoFix() { + if (visibleWidget != null) { + Util.runWebkitOverflowAutoFix(DOM.getParent(visibleWidget + .getElement())); + } + + } } -- 2.39.5