mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-24 18:55:30 +00:00
Bug 950159: Save state of other desktop windows to be restored when switching back from Metro. r=mbrubeck
This commit is contained in:
parent
e2f55195b2
commit
414f242156
@ -15,6 +15,9 @@ XPCOMUtils.defineLazyServiceGetter(this, "CrashReporter",
|
||||
"@mozilla.org/xre/app-info;1", "nsICrashReporter");
|
||||
#endif
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "gUUIDGenerator",
|
||||
"@mozilla.org/uuid-generator;1", "nsIUUIDGenerator");
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "NetUtil", function() {
|
||||
Cu.import("resource://gre/modules/NetUtil.jsm");
|
||||
return NetUtil;
|
||||
@ -39,6 +42,8 @@ SessionStore.prototype = {
|
||||
Ci.nsISupportsWeakReference]),
|
||||
|
||||
_windows: {},
|
||||
_selectedWindow: 1,
|
||||
_orderedWindows: [],
|
||||
_lastSaveTime: 0,
|
||||
_lastSessionTime: 0,
|
||||
_interval: 10000,
|
||||
@ -284,8 +289,8 @@ SessionStore.prototype = {
|
||||
if (aWindow.document.documentElement.getAttribute("windowtype") != "navigator:browser" || this._loadState == STATE_QUITTING)
|
||||
return;
|
||||
|
||||
// Assign it a unique identifier (timestamp) and create its data object
|
||||
aWindow.__SSID = "window" + Date.now();
|
||||
// Assign it a unique identifier and create its data object
|
||||
aWindow.__SSID = "window" + gUUIDGenerator.generateUUID().toString();
|
||||
this._windows[aWindow.__SSID] = { tabs: [], selected: 0, _closedTabs: [] };
|
||||
|
||||
// Perform additional initialization when the first window is loading
|
||||
@ -472,9 +477,9 @@ SessionStore.prototype = {
|
||||
});
|
||||
|
||||
let data = { windows: [] };
|
||||
let index;
|
||||
for (index in this._windows)
|
||||
data.windows.push(this._windows[index]);
|
||||
for (let i = 0; i < this._orderedWindows.length; i++)
|
||||
data.windows.push(this._windows[this._orderedWindows[i]]);
|
||||
data.selectedWindow = this._selectedWindow;
|
||||
return data;
|
||||
},
|
||||
|
||||
@ -724,11 +729,24 @@ SessionStore.prototype = {
|
||||
|
||||
let window = Services.wm.getMostRecentWindow("navigator:browser");
|
||||
|
||||
let tabs = data.windows[0].tabs;
|
||||
let selected = data.windows[0].selected;
|
||||
this._selectedWindow = data.selectedWindow;
|
||||
let windowIndex = this._selectedWindow - 1;
|
||||
let tabs = data.windows[windowIndex].tabs;
|
||||
let selected = data.windows[windowIndex].selected;
|
||||
|
||||
if (data.windows[0]._closedTabs)
|
||||
this._windows[window.__SSID]._closedTabs = data.windows[0]._closedTabs;
|
||||
// Move all window data from sessionstore.js to this._windows.
|
||||
for (let i = 0; i < data.windows.length; i++) {
|
||||
let SSID;
|
||||
if (i != windowIndex) {
|
||||
SSID = "window" + gUUIDGenerator.generateUUID().toString();
|
||||
this._windows[SSID] = data.windows[i];
|
||||
} else {
|
||||
SSID = window.__SSID;
|
||||
this._windows[SSID]._closedTabs =
|
||||
this._windows[SSID]._closedTabs.concat(data.windows[windowIndex]._closedTabs);
|
||||
}
|
||||
this._orderedWindows.push(SSID);
|
||||
}
|
||||
|
||||
if (selected > tabs.length) // Clamp the selected index if it's bogus
|
||||
selected = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user