[PALEMOON] Fix the Findbar - open when you press "/" or "'" keys

Issue #430
This commit is contained in:
janekptacijarabaci 2018-06-03 20:11:54 +02:00 • committed by Roy Tam
commit de5b649680
4 changed files with 60 additions and 9 deletions

View file

@ -64,7 +64,7 @@ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() {
// Force a style flush to ensure that our binding is attached. // Force a style flush to ensure that our binding is attached.
findbar.clientTop; findbar.clientTop;
findbar.browser = gBrowser; findbar.browser = gBrowser.mCurrentBrowser;
window.gFindBarInitialized = true; window.gFindBarInitialized = true;
return findbar; return findbar;
}); });

View file

@ -3093,13 +3093,25 @@
break; break;
} }
case "Findbar:Keypress": case "Findbar:Keypress":
if (!gFindBarInitialized) { // If the find bar for this tab is not yet alive, only initialize
// If the find bar for this tab is not yet alive, change that, // it if there's a possibility FindAsYouType will be used.
// and make sure we return the result: // There's no point in doing it for most random keypresses.
return gFindBar.receiveMessage(aMessage); if (!gFindBarInitialized && aMessage.data.shouldFastFind) {
let shouldFastFind = this._findAsYouType;
if (!shouldFastFind) {
// Please keep in sync with toolkit/content/widgets/findbar.xml
const FAYT_LINKS_KEY = "'";
const FAYT_TEXT_KEY = "/";
let charCode = aMessage.data.fakeEvent.charCode;
let key = charCode ? String.fromCharCode(charCode) : null;
shouldFastFind = key == FAYT_LINKS_KEY || key == FAYT_TEXT_KEY;
}
if (shouldFastFind) {
// Make sure we return the result.
return gFindBar.receiveMessage(aMessage);
}
} }
break; break;
} }
]]></body> ]]></body>
</method> </method>
@ -3166,6 +3178,10 @@
this.mCurrentBrowser); this.mCurrentBrowser);
} }
messageManager.addMessageListener("DOMWebNotificationClicked", this); messageManager.addMessageListener("DOMWebNotificationClicked", this);
// To correctly handle keypresses for potential FindAsYouType, while
// the tab's find bar is not yet initialized.
this._findAsYouType = Services.prefs.getBoolPref("accessibility.typeaheadfind");
messageManager.addMessageListener("Findbar:Keypress", this); messageManager.addMessageListener("Findbar:Keypress", this);
]]> ]]>
</constructor> </constructor>
@ -3421,6 +3437,7 @@
tab.setAttribute("onerror", "this.removeAttribute('image');"); tab.setAttribute("onerror", "this.removeAttribute('image');");
this.adjustTabstrip(); this.adjustTabstrip();
Services.prefs.addObserver("accessibility.typeaheadfind", this._prefObserver, false);
Services.prefs.addObserver("browser.tabs.", this._prefObserver, false); Services.prefs.addObserver("browser.tabs.", this._prefObserver, false);
window.addEventListener("resize", this, false); window.addEventListener("resize", this, false);
window.addEventListener("load", this, false); window.addEventListener("load", this, false);
@ -3436,6 +3453,7 @@
<destructor> <destructor>
<![CDATA[ <![CDATA[
Services.prefs.removeObserver("accessibility.typeaheadfind", this._prefObserver);
Services.prefs.removeObserver("browser.tabs.", this._prefObserver); Services.prefs.removeObserver("browser.tabs.", this._prefObserver);
]]> ]]>
</destructor> </destructor>
@ -3501,6 +3519,9 @@
observe: function (subject, topic, data) { observe: function (subject, topic, data) {
switch (data) { switch (data) {
case "accessibility.typeaheadfind":
this._findAsYouType = Services.prefs.getBoolPref(data);
break;
case "browser.tabs.closeButtons": case "browser.tabs.closeButtons":
this.tabContainer.mCloseButtons = Services.prefs.getIntPref(data); this.tabContainer.mCloseButtons = Services.prefs.getIntPref(data);
this.tabContainer.adjustTabstrip(); this.tabContainer.adjustTabstrip();

View file

@ -841,6 +841,36 @@ var FindBar = {
fakeEvent[k] = event[k]; fakeEvent[k] = event[k];
} }
} }
#ifdef MC_PALEMOON
let findBarId = "FindToolbar";
// The FindBar is in the chrome window's context, not in tabbrowser
// - see also bug 537013
let chromeWin = null;
try {
chromeWin = content
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow)
.QueryInterface(Ci.nsIDOMChromeWindow);
} catch (e) {
Cu.reportError(
"The FindBar - the chrome window's context was not detected:\n" + e);
}
if (chromeWin && chromeWin.document.getElementById(findBarId)) {
try {
chromeWin.document.getElementById(findBarId)
.browser = Services.wm.getMostRecentWindow("navigator:browser")
.gBrowser.mCurrentBrowser;
} catch (e) {
Cu.reportError(
"The FindBar - cannot set the property 'browser':\n" + e);
}
}
#endif
// sendSyncMessage returns an array of the responses from all listeners // sendSyncMessage returns an array of the responses from all listeners
let rv = sendSyncMessage("Findbar:Keypress", { let rv = sendSyncMessage("Findbar:Keypress", {
fakeEvent: fakeEvent, fakeEvent: fakeEvent,

View file

@ -37,8 +37,8 @@ toolkit.jar:
content/global/plugins.html content/global/plugins.html
content/global/plugins.css content/global/plugins.css
content/global/browser-child.js content/global/browser-child.js
content/global/browser-content.js * content/global/browser-content.js
* content/global/buildconfig.html * content/global/buildconfig.html
content/global/contentAreaUtils.js content/global/contentAreaUtils.js
#ifndef MOZ_FENNEC #ifndef MOZ_FENNEC
content/global/customizeToolbar.css content/global/customizeToolbar.css
@ -56,7 +56,7 @@ toolkit.jar:
content/global/filepicker.properties content/global/filepicker.properties
content/global/globalOverlay.js content/global/globalOverlay.js
content/global/memoriam.xhtml content/global/memoriam.xhtml
* content/global/mozilla.css * content/global/mozilla.css
content/global/mozilla.xhtml content/global/mozilla.xhtml
#ifdef MOZ_PHOENIX #ifdef MOZ_PHOENIX
content/global/logopage.xhtml content/global/logopage.xhtml