mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 595020 - Group name isn't displayed in title before TabView is loaded the first time; r=dao
This commit is contained in:
parent
48ce689e6c
commit
6c45d28111
@ -44,7 +44,9 @@ let TabView = {
|
||||
_browserKeyHandlerInitialized: false,
|
||||
_isFrameLoading: false,
|
||||
_initFrameCallbacks: [],
|
||||
_lastSessionGroupName: null,
|
||||
VISIBILITY_IDENTIFIER: "tabview-visibility",
|
||||
LAST_SESSION_GROUP_NAME_IDENTIFIER: "tabview-last-session-group-name",
|
||||
|
||||
// ----------
|
||||
get windowTitle() {
|
||||
@ -98,6 +100,10 @@ let TabView = {
|
||||
};
|
||||
gBrowser.tabContainer.addEventListener(
|
||||
"TabShow", this._tabShowEventListener, true);
|
||||
|
||||
// grab the last used group title
|
||||
this._lastSessionGroupName = sessionstore.getWindowValue(window,
|
||||
this.LAST_SESSION_GROUP_NAME_IDENTIFIER);
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -216,18 +222,28 @@ let TabView = {
|
||||
},
|
||||
|
||||
getActiveGroupName: function TabView_getActiveGroupName() {
|
||||
if (!this._window)
|
||||
return this._lastSessionGroupName;
|
||||
|
||||
// We get the active group this way, instead of querying
|
||||
// GroupItems.getActiveGroupItem() because the tabSelect event
|
||||
// will not have happened by the time the browser tries to
|
||||
// update the title.
|
||||
let groupItem = null;
|
||||
let activeTab = window.gBrowser.selectedTab;
|
||||
if (activeTab._tabViewTabItem && activeTab._tabViewTabItem.parent){
|
||||
let groupName = activeTab._tabViewTabItem.parent.getTitle();
|
||||
if (groupName)
|
||||
return groupName;
|
||||
let activeTabItem = activeTab._tabViewTabItem;
|
||||
|
||||
if (activeTab.pinned) {
|
||||
// It's an app tab, so it won't have a .tabItem. However, its .parent
|
||||
// will already be set as the active group.
|
||||
groupItem = this._window.GroupItems.getActiveGroupItem();
|
||||
} else if (activeTabItem) {
|
||||
groupItem = activeTabItem.parent;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
// groupItem may still be null, if the active tab is an orphan.
|
||||
return groupItem ? groupItem.getTitle() : "";
|
||||
},
|
||||
|
||||
// ----------
|
||||
updateContextMenu: function(tab, popup) {
|
||||
|
@ -381,6 +381,15 @@ let Storage = {
|
||||
win, win.TabView.VISIBILITY_IDENTIFIER, data);
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: saveActiveGroupName
|
||||
// Saves the active group's name for the given window.
|
||||
saveActiveGroupName: function Storage_saveActiveGroupName(win) {
|
||||
let groupName = win.TabView.getActiveGroupName();
|
||||
this._sessionStore.setWindowValue(
|
||||
win, win.TabView.LAST_SESSION_GROUP_NAME_IDENTIFIER, groupName);
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: saveData
|
||||
// Generic routine for saving data to a window.
|
||||
|
@ -258,6 +258,7 @@ let UI = {
|
||||
function domWinClosedObserver(subject, topic, data) {
|
||||
if (topic == "domwindowclosed" && subject == gWindow) {
|
||||
self.isDOMWindowClosing = true;
|
||||
Storage.saveActiveGroupName(gWindow);
|
||||
if (self.isTabViewVisible())
|
||||
GroupItems.removeHiddenGroups();
|
||||
TabItems.saveAll(true);
|
||||
|
@ -59,6 +59,7 @@ _BROWSER_FILES = \
|
||||
browser_tabview_bug590606.js \
|
||||
browser_tabview_bug591706.js \
|
||||
browser_tabview_bug594958.js \
|
||||
browser_tabview_bug595020.js \
|
||||
browser_tabview_bug595191.js \
|
||||
browser_tabview_bug595436.js \
|
||||
browser_tabview_bug595518.js \
|
||||
|
@ -0,0 +1,66 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
|
||||
|
||||
let stateStartup = {windows:[
|
||||
{tabs:[{entries:[{url:"about:home"}]}], extData:{"tabview-last-session-group-name":"title"}}
|
||||
]};
|
||||
|
||||
function test() {
|
||||
let assertWindowTitle = function (win, title) {
|
||||
let browser = win.gBrowser.tabs[0].linkedBrowser;
|
||||
let winTitle = win.gBrowser.getWindowTitleForBrowser(browser);
|
||||
is(winTitle.indexOf(title), 0, "title starts with '" + title + "'");
|
||||
};
|
||||
|
||||
let testGroupNameChange = function (win) {
|
||||
showTabView(function () {
|
||||
let cw = win.TabView.getContentWindow();
|
||||
let groupItem = cw.GroupItems.groupItems[0];
|
||||
groupItem.setTitle("new-title");
|
||||
|
||||
hideTabView(function () {
|
||||
assertWindowTitle(win, "new-title");
|
||||
waitForFocus(finish);
|
||||
}, win);
|
||||
}, win);
|
||||
};
|
||||
|
||||
waitForExplicitFinish();
|
||||
|
||||
newWindowWithState(stateStartup, function (win) {
|
||||
registerCleanupFunction(function () win.close());
|
||||
assertWindowTitle(win, "title");
|
||||
testGroupNameChange(win);
|
||||
});
|
||||
}
|
||||
|
||||
function newWindowWithState(state, callback) {
|
||||
let opts = "chrome,all,dialog=no,height=800,width=800";
|
||||
let win = window.openDialog(getBrowserURL(), "_blank", opts);
|
||||
|
||||
whenWindowLoaded(win, function () {
|
||||
ss.setWindowState(win, JSON.stringify(state), true);
|
||||
});
|
||||
|
||||
whenWindowStateReady(win, function () {
|
||||
win.close();
|
||||
win = ss.undoCloseWindow(0);
|
||||
whenWindowLoaded(win, function () callback(win));
|
||||
});
|
||||
}
|
||||
|
||||
function whenWindowLoaded(win, callback) {
|
||||
win.addEventListener("load", function onLoad() {
|
||||
win.removeEventListener("load", onLoad, false);
|
||||
executeSoon(callback);
|
||||
}, false);
|
||||
}
|
||||
|
||||
function whenWindowStateReady(win, callback) {
|
||||
win.addEventListener("SSWindowStateReady", function onReady() {
|
||||
win.removeEventListener("SSWindowStateReady", onReady, false);
|
||||
executeSoon(callback);
|
||||
}, false);
|
||||
}
|
Loading…
Reference in New Issue
Block a user