merge
authorDão Gottwald <dao@mozilla.com>
Sat, 15 Aug 2009 00:52:06 +0200
changeset 31576 6d99ad3d9e9a94f300384e638b8963164499d845
parent 31574 fc7d931fd75bf19ad3402cbc7d1261b6a5feeadd (current diff)
parent 31575 d62b429af1648e72209b2dce223b48bc6e2c6f7a (diff)
child 31577 fb8e2e65e9170750cf34f699203316053149fb24
push id1
push userroot
push dateTue, 26 Apr 2011 22:38:44 +0000
treeherdermozilla-beta@bfdb6e623a36 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone1.9.3a1pre
merge
toolkit/content/tests/widgets/test_richlist_direction.xul
--- a/toolkit/content/tests/widgets/Makefile.in
+++ b/toolkit/content/tests/widgets/Makefile.in
@@ -107,17 +107,16 @@ include $(topsrcdir)/config/rules.mk
 		test_tabindex.xul \
  		test_mousescroll.xul \
 		test_scrollbar.xul \
 		test_sorttemplate.xul \
 		test_contextmenu_list.xul \
 		test_videocontrols.html \
 		test_videocontrols_video_direction.html \
 		test_videocontrols_audio_direction.html \
-		test_richlist_direction.xul \
 		videocontrols_direction-1-ref.html \
 		videocontrols_direction-1a.html \
 		videocontrols_direction-1b.html \
 		videocontrols_direction-1c.html \
 		videocontrols_direction-1d.html \
 		videocontrols_direction-1e.html \
 		videocontrols_direction-2-ref.html \
 		videocontrols_direction-2a.html \
deleted file mode 100644
--- a/toolkit/content/tests/widgets/test_richlist_direction.xul
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
-<!--
-  XUL Widget Test for listbox direction
-  -->
-<window title="Listbox direction test"
-        onload="test_richlistbox()"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" 
-          src="/MochiKit/packed.js"></script>
-  <script type="application/javascript"
-          src="/tests/SimpleTest/SimpleTest.js"></script>      
-  <script type="application/javascript"
-          src="/tests/SimpleTest/EventUtils.js"></script>      
-
-  <richlistbox seltype="multiple" id="richlistbox" flex="1" maxheight="80" height="80" maxwidth="150"/>
-
-  <!-- test results are displayed in the html:body -->
-  <body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;"/>
-
-<script type="application/javascript">
-<![CDATA[
-
-SimpleTest.waitForExplicitFinish();
-
-var richListBox = document.getElementById("richlistbox");
-
-function getScrollIndexAmount(aDirection) {
-  return (4 * aDirection + richListBox.currentIndex);
-}
-
-function test_richlistbox()
-{
-  var height = richListBox.scrollBoxObject.height;
-  var item;
-  do {
-    item = richListBox.appendItem("Test", "");
-    item.height = item.maxHeight = Math.floor(height / 4);
-  } while (item.getBoundingClientRect().bottom < (height * 2))
-  richListBox.appendItem("Test", "");
-  richListBox.firstChild.nextSibling.id = "list-box-first";
-  richListBox.lastChild.previousSibling.id = "list-box-last";
-
-  // direction = "reverse", the values here are backwards due to the fact that
-  // richlistboxes respond differently when a user initiates a selection
-  richListBox.dir = "reverse";
-  var count = richListBox.itemCount;
-  richListBox.selectedIndex = count - 1;
-  sendKey("DOWN", richListBox);
-  is(richListBox.currentIndex, count - 2, "Selection should move to the next item");
-  sendKey("UP", richListBox);
-  is(richListBox.currentIndex, count - 1, "Selection should move to the previous item");
-  sendKey("END", richListBox);
-  is(richListBox.currentIndex, 0, "Selection should move to the last item");
-  sendKey("HOME", richListBox);
-  is(richListBox.currentIndex, count - 1, "Selection should move to the first item");
-  var currentIndex = richListBox.currentIndex;
-  var index = getScrollIndexAmount(-1);
-  sendKey("PAGE_DOWN", richListBox);
-  is(richListBox.currentIndex, index, "Selection should move to one page down");
-  ok(richListBox.currentIndex < currentIndex, "Selection should move downwards");
-  sendKey("END", richListBox);
-  currentIndex = richListBox.currentIndex;
-  index = getScrollIndexAmount(1);
-  sendKey("PAGE_UP", richListBox);
-  is(richListBox.currentIndex, index, "Selection should move to one page up");
-  ok(richListBox.currentIndex > currentIndex, "Selection should move upwards");
-  richListBox.selectedItem = richListBox.lastChild;
-  richListBox.focus();
-  synthesizeKey("VK_DOWN", {shiftKey: true, type: "keypress"}, window);
-  let items = [richListBox.selectedItems[0],
-               richListBox.selectedItems[1]];
-  is(items[0], richListBox.lastChild, "The last element should still be selected");
-  is(items[1], richListBox.lastChild.previousSibling, "Both elements should now be selected");
-  richListBox.clearSelection();
-  richListBox.selectedItem = richListBox.lastChild;
-  sendMouseEvent({type: "click", shiftKey: true, clickCount: 1},
-                 "list-box-last",
-                 window);
-  items = [richListBox.selectedItems[0],
-           richListBox.selectedItems[1]];
-  is(items[0], richListBox.lastChild, "The last element should still be selected");
-  is(items[1], richListBox.lastChild.previousSibling, "Both elements should now be selected");
-
-  // direction = "normal"
-  richListBox.dir = "normal";
-  richListBox.selectedIndex = 0;
-  sendKey("DOWN", richListBox);
-  is(richListBox.currentIndex, 1, "Selection should move to the next item");
-  sendKey("UP", richListBox);
-  is(richListBox.currentIndex, 0, "Selection should move to the previous item");
-  sendKey("END", richListBox);
-  is(richListBox.currentIndex, count - 1, "Selection should move to the last item");
-  sendKey("HOME", richListBox);
-  is(richListBox.currentIndex, 0, "Selection should move to the first item");
-  var currentIndex = richListBox.currentIndex;
-  var index = richListBox.scrollOnePage(1);
-  sendKey("PAGE_DOWN", richListBox);
-  is(richListBox.currentIndex, index, "Selection should move to one page down");
-  ok(richListBox.currentIndex > currentIndex, "Selection should move downwards");
-  sendKey("END", richListBox);
-  currentIndex = richListBox.currentIndex;
-  index = richListBox.scrollOnePage(-1) + richListBox.currentIndex;
-  sendKey("PAGE_UP", richListBox);
-  is(richListBox.currentIndex, index, "Selection should move to one page up");
-  ok(richListBox.currentIndex < currentIndex, "Selection should move upwards");
-  richListBox.selectedItem = richListBox.firstChild;
-  richListBox.focus();
-  synthesizeKey("VK_DOWN", {shiftKey: true, type: "keypress"}, window);
-  items = [richListBox.selectedItems[0],
-           richListBox.selectedItems[1]];
-  is(items[0], richListBox.firstChild, "The last element should still be selected");
-  is(items[1], richListBox.firstChild.nextSibling, "Both elements should now be selected");
-  richListBox.clearSelection();
-  richListBox.selectedItem = richListBox.firstChild;
-  sendMouseEvent({type: "click", shiftKey: true, clickCount: 1},
-                 "list-box-first",
-                 window);
-  items = [richListBox.selectedItems[0],
-           richListBox.selectedItems[1]];
-  is(items[0], richListBox.firstChild, "The last element should still be selected");
-  is(items[1], richListBox.firstChild.nextSibling, "Both elements should now be selected");
-  SimpleTest.finish();
-}
-
-]]>
-</script>
-
-</window>
--- a/toolkit/content/widgets/listbox.xml
+++ b/toolkit/content/widgets/listbox.xml
@@ -542,20 +542,18 @@
 
       <method name="_moveByOffsetFromUserEvent">
         <parameter name="aOffset"/>
         <parameter name="aEvent"/>
         <body>
         <![CDATA[
           if (!aEvent.getPreventDefault()) {
             this._userSelecting = true;
-            this._mayReverse = true;
             this.moveByOffset(aOffset, !aEvent.ctrlKey, aEvent.shiftKey);
             this._userSelecting = false;
-            this._mayReverse = false;
             aEvent.preventDefault();
           }
         ]]>
         </body>
       </method>
 
       <method name="_canUserSelect">
         <parameter name="aItem"/>
@@ -572,57 +570,40 @@
         <body>
           aMe._fireOnSelect();
           aMe._selectTimeout = null;
         </body>
       </method>
 
       <field name="_suppressOnSelect">false</field>
       <field name="_userSelecting">false</field>
-      <field name="_mayReverse">false</field>
       <field name="_selectTimeout">null</field>
       <field name="_currentItem">null</field>
       <field name="_selectionStart">null</field>
     </implementation>
 
     <handlers>
       <handler event="keypress" keycode="VK_UP" modifiers="control shift any"
                action="this._moveByOffsetFromUserEvent(-1, event);"
                group="system"/>
       <handler event="keypress" keycode="VK_DOWN" modifiers="control shift any"
                action="this._moveByOffsetFromUserEvent(1, event);"
                group="system"/>
       <handler event="keypress" keycode="VK_HOME" modifiers="control shift any"
-               group="system">
-        <![CDATA[
-          this._mayReverse = true;
-          this._moveByOffsetFromUserEvent(-this.currentIndex, event);
-        ]]>
-      </handler>
+               action="this._moveByOffsetFromUserEvent(-this.currentIndex, event);"
+               group="system"/>
       <handler event="keypress" keycode="VK_END" modifiers="control shift any"
-               group="system">
-        <![CDATA[
-          this._mayReverse = true;
-          this._moveByOffsetFromUserEvent(this.getRowCount() - this.currentIndex - 1, event);
-        ]]>
-      </handler>
+               action="this._moveByOffsetFromUserEvent(this.getRowCount() - this.currentIndex - 1, event);"
+               group="system"/>
       <handler event="keypress" keycode="VK_PAGE_UP" modifiers="control shift any"
-               group="system">
-        <![CDATA[
-          this._mayReverse = true;
-          this._moveByOffsetFromUserEvent(this.scrollOnePage(-1), event);
-        ]]>
-      </handler>
+               action="this._moveByOffsetFromUserEvent(this.scrollOnePage(-1), event);"
+               group="system"/>
       <handler event="keypress" keycode="VK_PAGE_DOWN" modifiers="control shift any"
-               group="system">
-        <![CDATA[
-          this._mayReverse = true;
-          this._moveByOffsetFromUserEvent(this.scrollOnePage(1), event);
-        ]]>
-      </handler>
+               action="this._moveByOffsetFromUserEvent(this.scrollOnePage(1), event);"
+               group="system"/>
       <handler event="keypress" key=" " modifiers="control" phase="target">
       <![CDATA[
         if (this.currentItem && this.selType == "multiple")
           this.toggleItemSelection(this.currentItem);
       ]]>
       </handler>
       <handler event="focus">
       <![CDATA[
--- a/toolkit/content/widgets/richlistbox.xml
+++ b/toolkit/content/widgets/richlistbox.xml
@@ -47,17 +47,17 @@
            extends="chrome://global/content/bindings/listbox.xml#listbox-base">
     <resources>
       <stylesheet src="chrome://global/skin/richlistbox.css"/>
     </resources>
 
     <content>
       <children includes="listheader"/>
       <xul:scrollbox allowevents="true" orient="vertical" anonid="main-box"
-                     flex="1" style="overflow: auto;" xbl:inherits="dir,pack">
+                     flex="1" style="overflow: auto;">
         <children/>
       </xul:scrollbox>
     </content>
 
     <implementation>
       <field name="_scrollbox">
         document.getAnonymousElementByAttribute(this, "anonid", "main-box");
       </field>
@@ -111,63 +111,16 @@
             this.dispatchEvent(event);
 
             // always call this (allows a commandupdater without controller)
             document.commandDispatcher.updateCommands("richlistbox-select");
           ]]>
         </body>
       </method>
 
-      <!-- We override base-listbox here because those methods don't take dir
-           into account on listbox (which doesn't support dir yet) -->
-      <method name="getNextItem">
-        <parameter name="aStartItem"/>
-        <parameter name="aDelta"/>
-        <body>
-        <![CDATA[
-          var prop = this.dir == "reverse" && this._mayReverse ?
-                                                "previousSibling" :
-                                                "nextSibling";
-          while (aStartItem) {
-            aStartItem = aStartItem[prop];
-            if (aStartItem && aStartItem instanceof
-                Components.interfaces.nsIDOMXULSelectControlItemElement &&
-                (!this._userSelecting || this._canUserSelect(aStartItem))) {
-              --aDelta;
-              if (aDelta == 0)
-                return aStartItem;
-            }
-          }
-          return null;
-        ]]></body>
-      </method>
-
-      <method name="getPreviousItem">
-        <parameter name="aStartItem"/>
-        <parameter name="aDelta"/>
-        <body>
-        <![CDATA[
-          var prop = this.dir == "reverse" && this._mayReverse ?
-                                                "previousSibling" :
-                                                "nextSibling";
-          while (aStartItem) {
-            aStartItem = aStartItem[prop];
-            if (aStartItem && aStartItem instanceof
-                Components.interfaces.nsIDOMXULSelectControlItemElement &&
-                (!this._userSelecting || this._canUserSelect(aStartItem))) {
-              --aDelta;
-              if (aDelta == 0)
-                return aStartItem;
-            }
-          }
-          return null;
-        ]]>
-        </body>
-      </method>
-
       <method name="appendItem">
         <parameter name="aLabel"/>
         <parameter name="aValue"/>
         <body>
           return this.insertItemAt(-1, aLabel, aValue);
         </body>
       </method>
 
@@ -345,23 +298,19 @@
         </body>
       </method>
 
     <!-- richlistbox specific -->
       <property name="children" readonly="true">
         <getter>
           <![CDATA[
             var childNodes = [];
-            var isReverse = this.dir == "reverse" && this._mayReverse;
-            var child = isReverse ? this.lastChild : this.firstChild;
-            var prop = isReverse ? "previousSibling" : "nextSibling";
-            while (child) {
+            for (var child = this.firstChild; child; child = child.nextSibling) {
               if (child instanceof Components.interfaces.nsIDOMXULSelectControlItemElement)
                 childNodes.push(child);
-              child = child[prop];
             }
             return childNodes;
           ]]>
         </getter>
       </property>
 
       <field name="_builderListener" readonly="true">
         <![CDATA[
@@ -401,26 +350,20 @@
               if (!currentItem && this._currentIndex)
                 currentItem = this.getItemAtIndex(Math.min(
                   this._currentIndex - 1, this.getRowCount()));
               if (currentItem) {
                 this.currentItem = currentItem;
                 if (this.selType != "multiple" && this.selectedCount == 0)
                   this.selectedItem = currentItem;
 
-                if (this.scrollBoxObject.height) {
+                if (this.scrollBoxObject.height)
                   this.ensureElementIsVisible(currentItem);
-                }
-                else {
-                  // XXX hack around a bug in ensureElementIsVisible as it will
-                  // scroll beyond the last element, bug 493645.
-                  var previousElement = this.dir == "reverse" ? currentItem.nextSibling :
-                                                                currentItem.previousSibling;
-                  this.ensureElementIsVisible(previousElement);
-                }
+                else // XXX hack around a bug in ensureElementIsVisible
+                  this.ensureElementIsVisible(currentItem.previousSibling);
               }
               this._suppressOnSelect = suppressSelect;
               // XXX actually it's just a refresh, but at least
               // the Extensions manager expects this:
               this._fireOnSelect();
               return;
             }