Revert "Reverted change in how hack works (#12727, #12736)" Revert "Fixes the handling of the scroll position of a Window (#12736)" Revert "Recovering scroll position after regression problems. (#12727)" Revert "Ticket #12727 - Panels get unnecessary scroll bars in WebKit when content is 100% wide." This reverts committags/7.1.96a63d12afc
. This reverts commitc48c94dc23
. This reverts commit017bd0684c
. This reverts commit51a46a038f
. This reverts commitab5b20cf50
. Test cases were left as-is as the issue (#12736) still needs a workaround Change-Id: I0b6c2afb4a9be8629f2a8f880a8ae8d0a6d5088f
@@ -32,7 +32,6 @@ import com.google.gwt.dom.client.Node; | |||
import com.google.gwt.dom.client.NodeList; | |||
import com.google.gwt.dom.client.Style; | |||
import com.google.gwt.dom.client.Style.Display; | |||
import com.google.gwt.dom.client.Style.Unit; | |||
import com.google.gwt.dom.client.Touch; | |||
import com.google.gwt.user.client.Command; | |||
import com.google.gwt.user.client.DOM; | |||
@@ -555,56 +554,6 @@ public class Util { | |||
} | |||
/** | |||
* Prevents some browsers from adding scroll bars to a component (such as a | |||
* Window) whose contents fit in the component. | |||
* <p> | |||
* See: bugs #11994 and #12736. | |||
* | |||
* @param contentNode | |||
* an element that is scrollable | |||
* | |||
* @since 7.1.8 | |||
*/ | |||
public static void removeUnneededScrollbars(final Element scrollable) { | |||
if (BrowserInfo.get().isWebkit()) { | |||
/* | |||
* Shake up the DOM a bit to make the window shed unnecessary | |||
* scrollbars and resize correctly afterwards. This resulting code | |||
* took over a week to summon forth, and involved some pretty hairy | |||
* black magic. Don't touch it unless you know what you're doing! | |||
* Fixes ticket #11994. Later modified to fix ticket #12736. | |||
*/ | |||
Scheduler.get().scheduleFinally(new ScheduledCommand() { | |||
@Override | |||
public void execute() { | |||
// Adjusting the width or height may change the scroll | |||
// position, so store the current position | |||
int horizontalScrollPosition = scrollable.getScrollLeft(); | |||
int verticalScrollPosition = scrollable.getScrollTop(); | |||
final String oldWidth = scrollable.getStyle().getWidth(); | |||
final String oldHeight = scrollable.getStyle().getHeight(); | |||
scrollable.getStyle().setWidth(110, Unit.PCT); | |||
scrollable.getOffsetWidth(); | |||
scrollable.getStyle().setProperty("width", oldWidth); | |||
scrollable.getStyle().setHeight(110, Unit.PCT); | |||
scrollable.getOffsetHeight(); | |||
scrollable.getStyle().setProperty("height", oldHeight); | |||
// Restore the scroll position | |||
scrollable.setScrollLeft(horizontalScrollPosition); | |||
scrollable.setScrollTop(verticalScrollPosition); | |||
} | |||
}); | |||
} | |||
} | |||
/** | |||
* Parses shared state and fetches the relative size of the component. If a | |||
* dimension is not specified as relative it will return -1. If the shared |
@@ -24,7 +24,6 @@ import com.google.gwt.user.client.Event; | |||
import com.google.gwt.user.client.ui.SimplePanel; | |||
import com.vaadin.client.ApplicationConnection; | |||
import com.vaadin.client.Focusable; | |||
import com.vaadin.client.Util; | |||
import com.vaadin.client.ui.ShortcutActionHandler.ShortcutActionHandlerOwner; | |||
import com.vaadin.client.ui.TouchScrollDelegate.TouchScrollHandler; | |||
@@ -207,6 +206,5 @@ public class VPanel extends SimplePanel implements ShortcutActionHandlerOwner, | |||
touchScrollHandler = TouchScrollDelegate.enableTouchScrolling(this); | |||
} | |||
touchScrollHandler.addElement(contentNode); | |||
Util.removeUnneededScrollbars(contentNode); | |||
} | |||
} |
@@ -345,11 +345,36 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner, | |||
if (!visibilityChangesDisabled) { | |||
super.setVisible(visible); | |||
} | |||
if (visible && BrowserInfo.get().isWebkit()) { | |||
Util.removeUnneededScrollbars((Element) contents | |||
.getFirstChildElement()); | |||
updateContentsSize(); | |||
positionOrSizeUpdated(); | |||
/* | |||
* Shake up the DOM a bit to make the window shed unnecessary | |||
* scrollbars and resize correctly afterwards. This resulting code | |||
* took over a week to summon forth, and involved some pretty hairy | |||
* black magic. Don't touch it unless you know what you're doing! | |||
* Fixes ticket #11994 | |||
*/ | |||
Scheduler.get().scheduleFinally(new ScheduledCommand() { | |||
@Override | |||
public void execute() { | |||
final com.google.gwt.dom.client.Element scrollable = contents | |||
.getFirstChildElement(); | |||
final String oldWidth = scrollable.getStyle().getWidth(); | |||
final String oldHeight = scrollable.getStyle().getHeight(); | |||
scrollable.getStyle().setWidth(110, Unit.PCT); | |||
scrollable.getOffsetWidth(); | |||
scrollable.getStyle().setProperty("width", oldWidth); | |||
scrollable.getStyle().setHeight(110, Unit.PCT); | |||
scrollable.getOffsetHeight(); | |||
scrollable.getStyle().setProperty("height", oldHeight); | |||
updateContentsSize(); | |||
positionOrSizeUpdated(); | |||
} | |||
}); | |||
} | |||
} | |||