Bug 1427363 - Part 2 - Flatten inheritance for "autocomplete-rich-result-popup". r=mak
MozReview-Commit-ID: 1uW2K2KbJU8
--- a/toolkit/content/widgets/autocomplete.xml
+++ b/toolkit/content/widgets/autocomplete.xml
@@ -664,21 +664,34 @@
}
if (!this.ignoreBlurWhileSearching)
this.detachController();
}
]]></handler>
</handlers>
</binding>
- <binding id="autocomplete-base-popup" role="none"
-extends="chrome://global/content/bindings/popup.xml#popup">
+ <binding id="autocomplete-rich-result-popup" extends="chrome://global/content/bindings/popup.xml#popup">
+ <resources>
+ <stylesheet src="chrome://global/content/autocomplete.css"/>
+ <stylesheet src="chrome://global/skin/autocomplete.css"/>
+ </resources>
+
+ <content ignorekeys="true" level="top" consumeoutsideclicks="never">
+ <xul:richlistbox anonid="richlistbox" class="autocomplete-richlistbox" flex="1"/>
+ <xul:hbox>
+ <children/>
+ </xul:hbox>
+ </content>
+
<implementation implements="nsIAutoCompletePopup">
<field name="mInput">null</field>
<field name="mPopupOpen">false</field>
+ <field name="_currentIndex">0</field>
+ <field name="_rlbAnimated">false</field>
<!-- =================== nsIAutoCompletePopup =================== -->
<property name="input" readonly="true"
onget="return this.mInput"/>
<property name="overrideValue" readonly="true"
onget="return null;"/>
@@ -747,96 +760,16 @@ extends="chrome://global/content/binding
<method name="onPopupClick">
<parameter name="aEvent"/>
<body><![CDATA[
var controller = this.view.QueryInterface(Components.interfaces.nsIAutoCompleteController);
controller.handleEnter(true, aEvent);
]]></body>
</method>
- </implementation>
-
- <handlers>
- <handler event="popupshowing"><![CDATA[
- // If normalMaxRows wasn't already set by the input, then set it here
- // so that we restore the correct number when the popup is hidden.
-
- // Null-check this.mInput; see bug 1017914
- if (this._normalMaxRows < 0 && this.mInput) {
- this._normalMaxRows = this.mInput.maxRows;
- }
-
- // Set an attribute for styling the popup based on the input.
- let inputID = "";
- if (this.mInput && this.mInput.ownerDocument &&
- this.mInput.ownerDocument.documentURIObject.schemeIs("chrome")) {
- inputID = this.mInput.id;
- // Take care of elements with no id that are inside xbl bindings
- if (!inputID) {
- let bindingParent = this.mInput.ownerDocument.getBindingParent(this.mInput);
- if (bindingParent) {
- inputID = bindingParent.id;
- }
- }
- }
- this.setAttribute("autocompleteinput", inputID);
-
- this.mPopupOpen = true;
- ]]></handler>
-
- <handler event="popuphiding"><![CDATA[
- var isListActive = true;
- if (this.selectedIndex == -1)
- isListActive = false;
- var controller = this.view.QueryInterface(Components.interfaces.nsIAutoCompleteController);
- controller.stopSearch();
-
- this.removeAttribute("autocompleteinput");
- this.mPopupOpen = false;
-
- // Reset the maxRows property to the cached "normal" value (if there's
- // any), and reset normalMaxRows so that we can detect whether it was set
- // by the input when the popupshowing handler runs.
-
- // Null-check this.mInput; see bug 1017914
- if (this.mInput && this._normalMaxRows > 0) {
- this.mInput.maxRows = this._normalMaxRows;
- }
- this._normalMaxRows = -1;
- // If the list was being navigated and then closed, make sure
- // we fire accessible focus event back to textbox
-
- // Null-check this.mInput; see bug 1017914
- if (isListActive && this.mInput) {
- this.mInput.mIgnoreFocus = true;
- this.mInput._focus();
- this.mInput.mIgnoreFocus = false;
- }
- ]]></handler>
- </handlers>
- </binding>
-
- <binding id="autocomplete-rich-result-popup" extends="chrome://global/content/bindings/autocomplete.xml#autocomplete-base-popup">
- <resources>
- <stylesheet src="chrome://global/content/autocomplete.css"/>
- <stylesheet src="chrome://global/skin/autocomplete.css"/>
- </resources>
-
- <content ignorekeys="true" level="top" consumeoutsideclicks="never">
- <xul:richlistbox anonid="richlistbox" class="autocomplete-richlistbox" flex="1"/>
- <xul:hbox>
- <children/>
- </xul:hbox>
- </content>
-
- <implementation implements="nsIAutoCompletePopup">
- <field name="_currentIndex">0</field>
- <field name="_rlbAnimated">false</field>
-
- <!-- =================== nsIAutoCompletePopup =================== -->
<property name="selectedIndex"
onget="return this.richlistbox.selectedIndex;">
<setter>
<![CDATA[
this.richlistbox.selectedIndex = val;
// Since ensureElementIsVisible may cause an expensive Layout flush,
// invoke it only if there may be a scrollbar, so if we could fetch
@@ -1208,24 +1141,81 @@ extends="chrome://global/content/binding
</field>
<property name="view"
onget="return this.mInput.controller;"
onset="return val;"/>
</implementation>
<handlers>
+ <handler event="popupshowing"><![CDATA[
+ // If normalMaxRows wasn't already set by the input, then set it here
+ // so that we restore the correct number when the popup is hidden.
+
+ // Null-check this.mInput; see bug 1017914
+ if (this._normalMaxRows < 0 && this.mInput) {
+ this._normalMaxRows = this.mInput.maxRows;
+ }
+
+ // Set an attribute for styling the popup based on the input.
+ let inputID = "";
+ if (this.mInput && this.mInput.ownerDocument &&
+ this.mInput.ownerDocument.documentURIObject.schemeIs("chrome")) {
+ inputID = this.mInput.id;
+ // Take care of elements with no id that are inside xbl bindings
+ if (!inputID) {
+ let bindingParent = this.mInput.ownerDocument.getBindingParent(this.mInput);
+ if (bindingParent) {
+ inputID = bindingParent.id;
+ }
+ }
+ }
+ this.setAttribute("autocompleteinput", inputID);
+
+ this.mPopupOpen = true;
+ ]]></handler>
+
<handler event="popupshown">
<![CDATA[
if (this._adjustHeightOnPopupShown) {
delete this._adjustHeightOnPopupShown;
this.adjustHeight();
}
]]>
</handler>
+
+ <handler event="popuphiding"><![CDATA[
+ var isListActive = true;
+ if (this.selectedIndex == -1)
+ isListActive = false;
+ var controller = this.view.QueryInterface(Components.interfaces.nsIAutoCompleteController);
+ controller.stopSearch();
+
+ this.removeAttribute("autocompleteinput");
+ this.mPopupOpen = false;
+
+ // Reset the maxRows property to the cached "normal" value (if there's
+ // any), and reset normalMaxRows so that we can detect whether it was set
+ // by the input when the popupshowing handler runs.
+
+ // Null-check this.mInput; see bug 1017914
+ if (this.mInput && this._normalMaxRows > 0) {
+ this.mInput.maxRows = this._normalMaxRows;
+ }
+ this._normalMaxRows = -1;
+ // If the list was being navigated and then closed, make sure
+ // we fire accessible focus event back to textbox
+
+ // Null-check this.mInput; see bug 1017914
+ if (isListActive && this.mInput) {
+ this.mInput.mIgnoreFocus = true;
+ this.mInput._focus();
+ this.mInput.mIgnoreFocus = false;
+ }
+ ]]></handler>
</handlers>
</binding>
<binding id="autocomplete-richlistitem-insecure-field" extends="chrome://global/content/bindings/autocomplete.xml#autocomplete-richlistitem">
<content align="center"
onoverflow="this._onOverflow();"
onunderflow="this._onUnderflow();">
<xul:image anonid="type-icon"