Bug 474964: fix tabbrowser mousewheel scrolling (tabbrowser needs to override default scrollbox behavior since bug 457651), r=mano/Natch

This commit is contained in:
Gavin Sharp 2009-01-25 03:06:45 -05:00
Родитель daac235263
Коммит 7ba94e5174
3 изменённых файлов: 33 добавлений и 18 удалений

Просмотреть файл

@ -6,11 +6,9 @@
-moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser-tab"); -moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser-tab");
} }
%ifdef XP_MACOSX
.tabbrowser-arrowscrollbox { .tabbrowser-arrowscrollbox {
-moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser-arrowscrollbox"); -moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser-arrowscrollbox");
} }
%endif
.tab-close-button, .tabs-closebutton { .tab-close-button, .tabs-closebutton {
-moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser-close-tab-button"); -moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser-close-tab-button");

Просмотреть файл

@ -2813,8 +2813,27 @@
</handlers> </handlers>
</binding> </binding>
#ifdef XP_MACOSX
<binding id="tabbrowser-arrowscrollbox" extends="chrome://global/content/bindings/scrollbox.xml#arrowscrollbox-clicktoscroll"> <binding id="tabbrowser-arrowscrollbox" extends="chrome://global/content/bindings/scrollbox.xml#arrowscrollbox-clicktoscroll">
<implementation>
<!-- Override scrollbox.xml method, since our scrollbox's children are
inherited from the binding parent -->
<method name="_getScrollableElements">
<body><![CDATA[
return document.getBindingParent(this).childNodes;
]]></body>
</method>
#ifndef XP_MACOSX
</implementation>
#else
<field name="_scrollButtonDownBox">
document.getAnonymousElementByAttribute(this, "anonid", "down-box");
</field>
<field name="_scrollButtonDownBoxAnimate">
document.getAnonymousElementByAttribute(this, "anonid", "down-box-animate");
</field>
</implementation>
<content> <content>
<xul:toolbarbutton class="scrollbutton-up" collapsed="true" <xul:toolbarbutton class="scrollbutton-up" collapsed="true"
xbl:inherits="orient" xbl:inherits="orient"
@ -2844,14 +2863,7 @@
chromedir="&locale.dir;"/> chromedir="&locale.dir;"/>
</xul:stack> </xul:stack>
</content> </content>
<implementation>
<field name="_scrollButtonDownBox">
document.getAnonymousElementByAttribute(this, "anonid", "down-box");
</field>
<field name="_scrollButtonDownBoxAnimate">
document.getAnonymousElementByAttribute(this, "anonid", "down-box-animate");
</field>
</implementation>
<handlers> <handlers>
<handler event="underflow"><![CDATA[ <handler event="underflow"><![CDATA[
// filter underflow events which were dispatched on nested scrollboxes // filter underflow events which were dispatched on nested scrollboxes
@ -2899,8 +2911,8 @@
]]></handler> ]]></handler>
</handlers> </handlers>
</binding>
#endif #endif
</binding>
<binding id="tabbrowser-tabs" <binding id="tabbrowser-tabs"
extends="chrome://global/content/bindings/tabbox.xml#tabs"> extends="chrome://global/content/bindings/tabbox.xml#tabs">

Просмотреть файл

@ -247,12 +247,17 @@
]]></body> ]]></body>
</method> </method>
<method name="_getScrollableElements">
<body><![CDATA[
return this.hasChildNodes() ?
this.childNodes : document.getBindingParent(this).childNodes;
]]></body>
</method>
<method name="_elementFromPoint"> <method name="_elementFromPoint">
<parameter name="aX"/> <parameter name="aX"/>
<body><![CDATA[ <body><![CDATA[
var elements = this.hasChildNodes() ? var elements = this._getScrollableElements();
this.childNodes :
document.getBindingParent(this).childNodes;
if (!this._isLTRScrollbox) { if (!this._isLTRScrollbox) {
elements = Array.slice(elements); elements = Array.slice(elements);
elements.reverse(); elements.reverse();
@ -620,10 +625,10 @@
if (!targetElement) { if (!targetElement) {
// scroll to the first resp. last element // scroll to the first resp. last element
var container = this.hasChildNodes() ? this : document.getBindingParent(this); var elements = this._getScrollableElements();
targetElement = (this._isLTRScrollbox ? scrollLeft : !scrollLeft) ? targetElement = (this._isLTRScrollbox ? scrollLeft : !scrollLeft) ?
container.firstChild : elements.item(0) :
container.lastChild; elements.item(elements.length-1);
} }
this.ensureElementIsVisible(targetElement); this.ensureElementIsVisible(targetElement);