From 9959cd6296e8f788bafb3d8db5c45b067f463ecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20Desr=C3=A9?= Date: Tue, 7 Aug 2012 16:41:41 -0700 Subject: [PATCH] # User Timothy Guan-tin Chien Bug 780487 - [b2g] All |oveflow:hidden| became scrollable, r=roc --- .../BrowserElementScrolling.js | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/dom/browser-element/BrowserElementScrolling.js b/dom/browser-element/BrowserElementScrolling.js index c07a759daf16..c17f27daddaa 100644 --- a/dom/browser-element/BrowserElementScrolling.js +++ b/dom/browser-element/BrowserElementScrolling.js @@ -117,12 +117,26 @@ const ContentPanning = { let nodeContent = node.ownerDocument.defaultView; while (!(node instanceof Ci.nsIDOMHTMLBodyElement)) { - if (node.scrollHeight > node.clientHeight || - node.scrollWidth > node.clientWidth || - ('scrollLeftMax' in node && node.scrollLeftMax > 0) || - ('scrollTopMax' in node && node.scrollTopMax > 0)) { + let style = nodeContent.getComputedStyle(node, null); + + let overflow = [style.getPropertyValue('overflow'), + style.getPropertyValue('overflow-x'), + style.getPropertyValue('overflow-y')]; + + let rect = node.getBoundingClientRect(); + let isAuto = (overflow.indexOf('auto') != -1 && + (rect.height < node.scrollHeight || + rect.width < node.scrollWidth)); + + let isScroll = (overflow.indexOf('scroll') != -1); + + let isScrollableTextarea = (node.tagName == 'TEXTAREA' && + (node.scrollHeight > node.clientHeight || + node.scrollWidth > node.clientWidth || + ('scrollLeftMax' in node && node.scrollLeftMax > 0) || + ('scrollTopMax' in node && node.scrollTopMax > 0))); + if (isScroll || isAuto || isScrollableTextarea) return [node, this._generateCallback(node)]; - } node = node.parentNode; }