summaryrefslogtreecommitdiffstats
path: root/comm/suite/components/bindings/findbar.xml
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--comm/suite/components/bindings/findbar.xml162
1 files changed, 162 insertions, 0 deletions
diff --git a/comm/suite/components/bindings/findbar.xml b/comm/suite/components/bindings/findbar.xml
new file mode 100644
index 0000000000..dde9c5ebd9
--- /dev/null
+++ b/comm/suite/components/bindings/findbar.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<!--
+ SeaMonkey Flexible Findbar
+
+ The binding implemented here mostly works like its toolkit ancestor,
+ except that it will not appear during a manually triggered type ahead find
+ if accessibility.typeaheadfind.usefindbar is false, and the automatic
+ typeahead find is controlled by the accessibility.typeaheadfind.autostart
+ preference instead of the accessibility.typeaheadfind preference.
+
+ This allows the in status bar type ahead find to be used in place of the
+ findbar implementation and allows the in status bar type ahead find
+ to only need to cache the accessibility.typeaheadfind preference branch.
+-->
+
+<!DOCTYPE bindings>
+
+<bindings id="findbarBindings"
+ xmlns="http://www.mozilla.org/xbl">
+
+ <binding id="findbar"
+ extends="chrome://global/content/bindings/findbar.xml#findbar">
+ <implementation>
+ <constructor><![CDATA[
+ var prefsvc =
+ Cc["@mozilla.org/preferences-service;1"]
+ .getService(Ci.nsIPrefBranch);
+
+ prefsvc.removeObserver("accessibility.typeaheadfind",
+ this._observer);
+ prefsvc.addObserver("accessibility.typeaheadfind.autostart",
+ this._suiteObserver);
+ prefsvc.addObserver("accessibility.typeaheadfind.usefindbar",
+ this._suiteObserver);
+
+ this._findAsYouType =
+ prefsvc.getBoolPref("accessibility.typeaheadfind.autostart");
+ this._useFindbar =
+ prefsvc.getBoolPref("accessibility.typeaheadfind.usefindbar");
+ ]]></constructor>
+
+ <field name="_suiteObserver"><![CDATA[({
+ _self: this,
+
+ QueryInterface: function(aIID) {
+ if (aIID.equals(Ci.nsIObserver) ||
+ aIID.equals(Ci.nsISupportsWeakReference) ||
+ aIID.equals(Ci.nsISupports))
+ return this;
+
+ throw Cr.NS_ERROR_NO_INTERFACE;
+ },
+
+ observe: function(aSubject, aTopic, aPrefName) {
+ if (aTopic != "nsPref:changed")
+ return;
+
+ var prefsvc =
+ aSubject.QueryInterface(Ci.nsIPrefBranch);
+
+ switch (aPrefName) {
+ case "accessibility.typeaheadfind.autostart":
+ this._self._findAsYouType = prefsvc.getBoolPref(aPrefName);
+ this._self._updateBrowserWithState();
+ break;
+ case "accessibility.typeaheadfind.usefindbar":
+ this._self._useFindbar = prefsvc.getBoolPref(aPrefName);
+ break;
+ }
+ }
+ })]]></field>
+
+ <!-- This is necessary because the destructor isn't called when
+ we are removed from a document that is not destroyed. This
+ needs to be explicitly called in this case -->
+ <method name="destroy">
+ <body><![CDATA[
+ if (this._destroyed)
+ return;
+ this._destroyed = true;
+
+ this.browser = null;
+
+ var prefsvc =
+ Cc["@mozilla.org/preferences-service;1"]
+ .getService(Ci.nsIPrefBranch);
+ prefsvc.removeObserver("accessibility.typeaheadfind.linksonly",
+ this._observer);
+ prefsvc.removeObserver("accessibility.typeaheadfind.casesensitive",
+ this._observer);
+ prefsvc.removeObserver("findbar.entireword", this._observer);
+ prefsvc.removeObserver("findbar.highlightAll", this._observer);
+ prefsvc.removeObserver("findbar.modalHighlight", this._observer);
+
+ prefsvc.removeObserver("accessibility.typeaheadfind.usefindbar",
+ this._suiteObserver);
+ prefsvc.removeObserver("accessibility.typeaheadfind.autostart",
+ this._suiteObserver);
+
+ // Clear all timers that might still be running.
+ this._cancelTimers();
+ ]]></body>
+ </method>
+
+ <method name="_updateBrowserWithState">
+ <body><![CDATA[
+ window.messageManager.broadcastAsyncMessage("Findbar:UpdateState", {
+ findMode: this._findMode,
+ findAsYouType: this._findAsYouType,
+ });
+ ]]></body>
+ </method>
+
+ <method name="receiveMessage">
+ <parameter name="aMessage"/>
+ <body><![CDATA[
+ switch (aMessage.name) {
+ case "Findbar:Mouseup":
+ if (!this.hidden && this._findMode != this.FIND_NORMAL)
+ this.close();
+ break;
+
+ case "Findbar:Keypress":
+ if (this._useFindbar)
+ return this._onBrowserKeypress(aMessage.data.fakeEvent,
+ aMessage.data.shouldFastFind);
+ break;
+ }
+ return undefined;
+ ]]></body>
+ </method>
+
+ <method name="startFastFind">
+ <parameter name="aMode"/>
+ <body><![CDATA[
+ if (this._findMode == aMode && this._quickFindTimeout) {
+ this._findField.select();
+ this._findField.focus();
+ return;
+ }
+
+ // Clear bar first, so that when openFindBar() calls setCaseSensitivity()
+ // it doesn't get confused by a lingering value
+ this._findField.value = "";
+
+ if (this._quickFindTimeout)
+ clearTimeout(this._quickFindTimeout);
+ this.open(aMode);
+ this._setFindCloseTimeout();
+ this._findField.select();
+ this._findField.focus();
+
+ this._updateStatusUI(this.nsITypeAheadFind.FIND_FOUND);
+ ]]></body>
+ </method>
+ </implementation>
+ </binding>
+</bindings>