From a5bcb15d220b65af5c5a331c350427a849a5fea3 Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Sat, 12 Feb 2011 13:32:30 -0500 Subject: [PATCH] Automagically hidden popup panels. This probably includes those horrible "door hanger" panels when the location bar is hidden. --- common/content/events.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/common/content/events.js b/common/content/events.js index 3c508f53..632a1c6e 100644 --- a/common/content/events.js +++ b/common/content/events.js @@ -1036,12 +1036,8 @@ var Events = Module("events", { let elem = event.originalTarget; if (event.target instanceof Ci.nsIDOMXULTextBoxElement) - for (let e = elem; e instanceof Element; e = e.parentNode) - if (util.computedStyle(e).visibility !== "visible" || - e.boxObject && e.boxObject.height === 0) { - elem.blur(); - break; - } + if (Events.isHidden(elem)) + elem.blur(); let win = (elem.ownerDocument || elem).defaultView || elem; @@ -1233,7 +1229,11 @@ var Events = Module("events", { popupshown: function onPopupShown(event) { if (event.originalTarget.localName !== "tooltip" && event.originalTarget.id !== "dactyl-visualbell") - if (modes.main != modes.MENU) + if (Events.isHidden(event.originalTarget)) { + if (event.originalTarget.hidePopup) + event.originalTarget.hidePopup(); + } + else if (modes.main != modes.MENU) modes.push(modes.MENU); }, @@ -1353,6 +1353,14 @@ var Events = Module("events", { let (key = isString(event) ? event : events.toString(event)) key === "" || key === "", + isHidden: function isHidden(elem) { + for (let e = elem; e instanceof Element; e = e.parentNode) + if (util.computedStyle(e).visibility !== "visible" || + e.boxObject && e.boxObject.height === 0) + return true; + return false; + }, + isInputElement: function isInputElement(elem) { return elem instanceof HTMLInputElement && set.has(util.editableInputs, elem.type) || isinstance(elem, [HTMLIsIndexElement, HTMLEmbedElement,