зеркало из https://github.com/mozilla/gecko-dev.git
Bug 528440 - Should skip windows that are closed but not yet destroyed when using nsIWindowMediator. r=zeniko
This commit is contained in:
Родитель
50543d8818
Коммит
c164850eaa
|
@ -110,6 +110,10 @@ const CAPABILITIES = [
|
||||||
"DNSPrefetch", "Auth"
|
"DNSPrefetch", "Auth"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
#ifndef XP_WIN
|
||||||
|
#define BROKEN_WM_Z_ORDER
|
||||||
|
#endif
|
||||||
|
|
||||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||||
|
|
||||||
function debug(aMsg) {
|
function debug(aMsg) {
|
||||||
|
@ -2598,7 +2602,7 @@ SessionStoreService.prototype = {
|
||||||
|
|
||||||
while (windowsEnum.hasMoreElements()) {
|
while (windowsEnum.hasMoreElements()) {
|
||||||
var window = windowsEnum.getNext();
|
var window = windowsEnum.getNext();
|
||||||
if (window.__SSi) {
|
if (window.__SSi && !window.closed) {
|
||||||
aFunc.call(this, window);
|
aFunc.call(this, window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2609,9 +2613,34 @@ SessionStoreService.prototype = {
|
||||||
* @returns Window reference
|
* @returns Window reference
|
||||||
*/
|
*/
|
||||||
_getMostRecentBrowserWindow: function sss_getMostRecentBrowserWindow() {
|
_getMostRecentBrowserWindow: function sss_getMostRecentBrowserWindow() {
|
||||||
var windowMediator = Cc["@mozilla.org/appshell/window-mediator;1"].
|
var wm = Cc["@mozilla.org/appshell/window-mediator;1"].
|
||||||
getService(Ci.nsIWindowMediator);
|
getService(Ci.nsIWindowMediator);
|
||||||
return windowMediator.getMostRecentWindow("navigator:browser");
|
|
||||||
|
var win = wm.getMostRecentWindow("navigator:browser");
|
||||||
|
if (!win)
|
||||||
|
return null;
|
||||||
|
if (!win.closed)
|
||||||
|
return win;
|
||||||
|
|
||||||
|
#ifdef BROKEN_WM_Z_ORDER
|
||||||
|
win = null;
|
||||||
|
var windowsEnum = wm.getEnumerator("navigator:browser");
|
||||||
|
// this is oldest to newest, so this gets a bit ugly
|
||||||
|
while (windowsEnum.hasMoreElements()) {
|
||||||
|
let nextWin = windowsEnum.getNext();
|
||||||
|
if (!nextWin.closed)
|
||||||
|
win = nextWin;
|
||||||
|
}
|
||||||
|
return win;
|
||||||
|
#else
|
||||||
|
var windowsEnum = wm.getZOrderDOMWindowEnumerator("navigator:browser", true);
|
||||||
|
while (windowsEnum.hasMoreElements()) {
|
||||||
|
win = windowsEnum.getNext();
|
||||||
|
if (!win.closed)
|
||||||
|
return win;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
#endif
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Загрузка…
Ссылка в новой задаче