☠☠ backed out by ee1973d27f13 ☠ ☠ | |
author | Gijs Kruitbosch <gijskruitbosch@gmail.com> |
Tue, 19 Jul 2016 15:56:15 +0100 | |
changeset 305556 | 3696a22ff7a09bcc27296c0a5648e2e9afd32f67 |
parent 305555 | c0ab769be276bf670f47d77ab470708beba15488 |
child 305557 | 3436cd5b4928abb0c33225ba04548631d152c735 |
push id | 30466 |
push user | cbook@mozilla.com |
push date | Wed, 20 Jul 2016 09:18:48 +0000 |
treeherder | mozilla-central@a6ca57085257 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | Enn |
bugs | 1286389 |
milestone | 50.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/toolkit/content/widgets/popup.xml +++ b/toolkit/content/widgets/popup.xml @@ -311,37 +311,45 @@ <handler event="popuphiding"><![CDATA[ try { this._currentFocus = document.commandDispatcher.focusedElement; } catch (e) { this._currentFocus = document.activeElement; } ]]></handler> <handler event="popuphidden"><![CDATA[ + function doFocus() { + // Focus was set on an element inside this panel, + // so we need to move it back to where it was previously + try { + let fm = Components.classes["@mozilla.org/focus-manager;1"] + .getService(Components.interfaces.nsIFocusManager); + fm.setFocus(prevFocus, fm.FLAG_NOSCROLL); + } catch(e) { + prevFocus.focus(); + } + } var currentFocus = this._currentFocus; var prevFocus = this._prevFocus ? this._prevFocus.get() : null; this._currentFocus = null; this._prevFocus = null; - if (prevFocus && currentFocus && this.getAttribute("norestorefocus") != "true") { + if (prevFocus && this.getAttribute("norestorefocus") != "true") { // Try to restore focus try { if (document.commandDispatcher.focusedWindow != window) return; // Focus has already been set to a window outside of this panel } catch(ex) {} + + if (!currentFocus) { + doFocus(); + return; + } while (currentFocus) { if (currentFocus == this) { - // Focus was set on an element inside this panel, - // so we need to move it back to where it was previously - try { - let fm = Components.classes["@mozilla.org/focus-manager;1"] - .getService(Components.interfaces.nsIFocusManager); - fm.setFocus(prevFocus, fm.FLAG_NOSCROLL); - } catch(e) { - prevFocus.focus(); - } + doFocus(); return; } currentFocus = currentFocus.parentNode; } } ]]></handler> </handlers> </binding>