diff --git a/mozilla/toolkit/content/widgets/scrollbox.xml b/mozilla/toolkit/content/widgets/scrollbox.xml index 93b94a47cf6..e3ff5f715a6 100644 --- a/mozilla/toolkit/content/widgets/scrollbox.xml +++ b/mozilla/toolkit/content/widgets/scrollbox.xml @@ -197,28 +197,14 @@ } if (!this._isLTRScrollbox) index *= -1; - var nextElement; - var elements = this.hasChildNodes() ? - this.childNodes : - document.getBindingParent(this).childNodes; + var scrollBox = this.scrollBoxObject; var edge = scrollBox.screenX; - if (index < 0) { - for (var i = 0; nextElement = elements[i]; i++) { - var x = nextElement.boxObject.screenX; - if (x < edge && - x + nextElement.boxObject.width + 1 >= edge) - break; - } - } else { + if (index > 0) edge += scrollBox.width; - for (var i = 0; nextElement = elements[i]; i++) { - var x = nextElement.boxObject.screenX; - if (x <= edge && - x + nextElement.boxObject.width > edge) - break; - } - } + else + edge--; + var nextElement = this._elementFromPoint(edge); if (!nextElement) return; @@ -239,6 +225,32 @@ ]]> + + + aX) + high = mid - 1; + else if (x + bO.width < aX) + low = mid + 1; + else + return element; + } + + return null; + ]]> + + = edge) - break; - } - if (!targetElement) - return; - edge = targetElement.boxObject.screenX + - targetElement.boxObject.width - scrollBox.width; - while ((targetElement = targetElement.previousSibling)) - if (targetElement.boxObject.screenX < edge) - break; - if (targetElement) - targetElement = targetElement.nextSibling; - } else { - edge += scrollBox.width; - for (var i = 0; targetElement = elements[i]; i++) { - var x = targetElement.boxObject.screenX; - if (x <= edge && - x + targetElement.boxObject.width > edge) - break; - } - if (!targetElement) - return; - edge = targetElement.boxObject.screenX + scrollBox.width; - while ((targetElement = targetElement.nextSibling)) - if (targetElement.boxObject.screenX + targetElement.boxObject.width > edge) - break; - if (targetElement) - targetElement = targetElement.previousSibling; - } + if (scrollLeft) + edge -= scrollBox.width; + else + edge += scrollBox.width * 2; + targetElement = this._elementFromPoint(edge); + + if (targetElement) + targetElement = scrollLeft ? + targetElement.nextSibling : + targetElement.previousSibling; } - if (!targetElement) + if (!targetElement) { // scroll to the first resp. last element - targetElement = scrollLeft ? elements[0] : elements[elements.length - 1]; + var container = this.hasChildNodes() ? this : document.getBindingParent(this); + targetElement = scrollLeft ? container.firstChild : container.lastChild; + } this.ensureElementIsVisible(targetElement); ]]>