mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1222490 - part 2: remove traces of tabview from XUL/XBL/JS in other parts of browser/, r=ttaubert
This commit is contained in:
parent
84c88f298f
commit
08741b2ce2
@ -82,7 +82,6 @@
|
||||
<command id="Browser:NextTab" oncommand="gBrowser.tabContainer.advanceSelectedTab(1, true);" reserved="true"/>
|
||||
<command id="Browser:PrevTab" oncommand="gBrowser.tabContainer.advanceSelectedTab(-1, true);" reserved="true"/>
|
||||
<command id="Browser:ShowAllTabs" oncommand="allTabs.open();"/>
|
||||
<command id="Browser:ToggleTabView" oncommand="TabView.toggle();"/>
|
||||
<command id="cmd_fullZoomReduce" oncommand="FullZoom.reduce()"/>
|
||||
<command id="cmd_fullZoomEnlarge" oncommand="FullZoom.enlarge()"/>
|
||||
<command id="cmd_fullZoomReset" oncommand="FullZoom.reset()"/>
|
||||
@ -178,7 +177,6 @@
|
||||
<broadcaster id="isFrameImage"/>
|
||||
<broadcaster id="singleFeedMenuitemState" disabled="true"/>
|
||||
<broadcaster id="multipleFeedsMenuState" hidden="true"/>
|
||||
<broadcaster id="tabviewGroupsNumber" groups="1"/>
|
||||
<broadcaster id="sync-setup-state"/>
|
||||
<broadcaster id="sync-syncnow-state" hidden="true"/>
|
||||
<broadcaster id="sync-reauth-state" hidden="true"/>
|
||||
@ -428,8 +426,6 @@
|
||||
|
||||
<key id="key_switchTextDirection" key="&bidiSwitchTextDirectionItem.commandkey;" command="cmd_switchTextDirection" modifiers="accel,shift" />
|
||||
|
||||
<key id="key_tabview" key="&tabView.commandkey;" command="Browser:ToggleTabView" modifiers="accel,shift"/>
|
||||
|
||||
<key id="key_privatebrowsing" command="Tools:PrivateBrowsing" key="&privateBrowsingCmd.commandkey;" modifiers="accel,shift"/>
|
||||
<key id="key_sanitize" command="Tools:Sanitize" keycode="VK_DELETE" modifiers="accel,shift"/>
|
||||
#ifdef XP_MACOSX
|
||||
|
@ -1,490 +0,0 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
var TabView = {
|
||||
_deck: null,
|
||||
_iframe: null,
|
||||
_window: null,
|
||||
_initialized: false,
|
||||
_browserKeyHandlerInitialized: false,
|
||||
_closedLastVisibleTabBeforeFrameInitialized: false,
|
||||
_isFrameLoading: false,
|
||||
_initFrameCallbacks: [],
|
||||
PREF_BRANCH: "browser.panorama.",
|
||||
PREF_FIRST_RUN: "browser.panorama.experienced_first_run",
|
||||
PREF_STARTUP_PAGE: "browser.startup.page",
|
||||
PREF_RESTORE_ENABLED_ONCE: "browser.panorama.session_restore_enabled_once",
|
||||
GROUPS_IDENTIFIER: "tabview-groups",
|
||||
VISIBILITY_IDENTIFIER: "tabview-visibility",
|
||||
|
||||
// ----------
|
||||
get windowTitle() {
|
||||
delete this.windowTitle;
|
||||
let brandBundle = document.getElementById("bundle_brand");
|
||||
let brandShortName = brandBundle.getString("brandShortName");
|
||||
let title = gNavigatorBundle.getFormattedString("tabview.title", [brandShortName]);
|
||||
return this.windowTitle = title;
|
||||
},
|
||||
|
||||
// ----------
|
||||
get firstUseExperienced() {
|
||||
let pref = this.PREF_FIRST_RUN;
|
||||
if (Services.prefs.prefHasUserValue(pref))
|
||||
return Services.prefs.getBoolPref(pref);
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
// ----------
|
||||
set firstUseExperienced(val) {
|
||||
Services.prefs.setBoolPref(this.PREF_FIRST_RUN, val);
|
||||
},
|
||||
|
||||
// ----------
|
||||
get sessionRestoreEnabledOnce() {
|
||||
let pref = this.PREF_RESTORE_ENABLED_ONCE;
|
||||
if (Services.prefs.prefHasUserValue(pref))
|
||||
return Services.prefs.getBoolPref(pref);
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
// ----------
|
||||
set sessionRestoreEnabledOnce(val) {
|
||||
Services.prefs.setBoolPref(this.PREF_RESTORE_ENABLED_ONCE, val);
|
||||
},
|
||||
|
||||
// ----------
|
||||
init: function TabView_init() {
|
||||
// disable the ToggleTabView command for popup windows
|
||||
goSetCommandEnabled("Browser:ToggleTabView", window.toolbar.visible);
|
||||
if (!window.toolbar.visible)
|
||||
return;
|
||||
|
||||
if (this._initialized)
|
||||
return;
|
||||
|
||||
if (this.firstUseExperienced) {
|
||||
// ___ visibility
|
||||
|
||||
let data = SessionStore.getWindowValue(window, this.VISIBILITY_IDENTIFIER);
|
||||
if (data && data == "true") {
|
||||
this.show();
|
||||
} else {
|
||||
try {
|
||||
data = SessionStore.getWindowValue(window, this.GROUPS_IDENTIFIER);
|
||||
if (data) {
|
||||
let parsedData = JSON.parse(data);
|
||||
this.updateGroupNumberBroadcaster(parsedData.totalNumber || 1);
|
||||
}
|
||||
} catch (e) { }
|
||||
|
||||
let self = this;
|
||||
// if a tab is changed from hidden to unhidden and the iframe is not
|
||||
// initialized, load the iframe and setup the tab.
|
||||
this._tabShowEventListener = function(event) {
|
||||
if (!self._window)
|
||||
self._initFrame(function() {
|
||||
self._window.UI.onTabSelect(gBrowser.selectedTab);
|
||||
if (self._closedLastVisibleTabBeforeFrameInitialized) {
|
||||
self._closedLastVisibleTabBeforeFrameInitialized = false;
|
||||
self._window.UI.showTabView(false);
|
||||
}
|
||||
});
|
||||
};
|
||||
this._tabCloseEventListener = function(event) {
|
||||
if (!self._window && gBrowser.visibleTabs.length == 0)
|
||||
self._closedLastVisibleTabBeforeFrameInitialized = true;
|
||||
};
|
||||
gBrowser.tabContainer.addEventListener(
|
||||
"TabShow", this._tabShowEventListener, false);
|
||||
gBrowser.tabContainer.addEventListener(
|
||||
"TabClose", this._tabCloseEventListener, false);
|
||||
|
||||
if (this._tabBrowserHasHiddenTabs()) {
|
||||
this._setBrowserKeyHandlers();
|
||||
} else {
|
||||
// for restoring last session and undoing recently closed window
|
||||
this._SSWindowStateReadyListener = function (event) {
|
||||
if (this._tabBrowserHasHiddenTabs())
|
||||
this._setBrowserKeyHandlers();
|
||||
}.bind(this);
|
||||
window.addEventListener(
|
||||
"SSWindowStateReady", this._SSWindowStateReadyListener, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Services.prefs.addObserver(this.PREF_BRANCH, this, false);
|
||||
|
||||
this._initialized = true;
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Observes topic changes.
|
||||
observe: function TabView_observe(subject, topic, data) {
|
||||
if (data == this.PREF_FIRST_RUN && this.firstUseExperienced) {
|
||||
this._addToolbarButton();
|
||||
this.enableSessionRestore();
|
||||
}
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Uninitializes TabView.
|
||||
uninit: function TabView_uninit() {
|
||||
if (!this._initialized)
|
||||
return;
|
||||
|
||||
Services.prefs.removeObserver(this.PREF_BRANCH, this);
|
||||
|
||||
if (this._tabShowEventListener)
|
||||
gBrowser.tabContainer.removeEventListener(
|
||||
"TabShow", this._tabShowEventListener, false);
|
||||
|
||||
if (this._tabCloseEventListener)
|
||||
gBrowser.tabContainer.removeEventListener(
|
||||
"TabClose", this._tabCloseEventListener, false);
|
||||
|
||||
if (this._SSWindowStateReadyListener)
|
||||
window.removeEventListener(
|
||||
"SSWindowStateReady", this._SSWindowStateReadyListener, false);
|
||||
|
||||
this._initialized = false;
|
||||
|
||||
if (this._window) {
|
||||
this._window = null;
|
||||
}
|
||||
|
||||
if (this._iframe) {
|
||||
this._iframe.remove();
|
||||
this._iframe = null;
|
||||
}
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Creates the frame and calls the callback once it's loaded.
|
||||
// If the frame already exists, calls the callback immediately.
|
||||
_initFrame: function TabView__initFrame(callback) {
|
||||
let hasCallback = typeof callback == "function";
|
||||
|
||||
// prevent frame to be initialized for popup windows
|
||||
if (!window.toolbar.visible)
|
||||
return;
|
||||
|
||||
if (this._window) {
|
||||
if (hasCallback)
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
if (hasCallback)
|
||||
this._initFrameCallbacks.push(callback);
|
||||
|
||||
if (this._isFrameLoading)
|
||||
return;
|
||||
|
||||
this._isFrameLoading = true;
|
||||
|
||||
TelemetryStopwatch.start("PANORAMA_INITIALIZATION_TIME_MS");
|
||||
|
||||
// ___ find the deck
|
||||
this._deck = document.getElementById("tab-view-deck");
|
||||
|
||||
// ___ create the frame
|
||||
this._iframe = document.createElement("iframe");
|
||||
this._iframe.id = "tab-view";
|
||||
this._iframe.setAttribute("transparent", "true");
|
||||
this._iframe.setAttribute("tooltip", "tab-view-tooltip");
|
||||
this._iframe.flex = 1;
|
||||
|
||||
let self = this;
|
||||
|
||||
window.addEventListener("tabviewframeinitialized", function onInit() {
|
||||
window.removeEventListener("tabviewframeinitialized", onInit, false);
|
||||
|
||||
TelemetryStopwatch.finish("PANORAMA_INITIALIZATION_TIME_MS");
|
||||
|
||||
self._isFrameLoading = false;
|
||||
self._window = self._iframe.contentWindow;
|
||||
self._setBrowserKeyHandlers();
|
||||
|
||||
if (self._tabShowEventListener) {
|
||||
gBrowser.tabContainer.removeEventListener(
|
||||
"TabShow", self._tabShowEventListener, false);
|
||||
self._tabShowEventListener = null;
|
||||
}
|
||||
if (self._tabCloseEventListener) {
|
||||
gBrowser.tabContainer.removeEventListener(
|
||||
"TabClose", self._tabCloseEventListener, false);
|
||||
self._tabCloseEventListener = null;
|
||||
}
|
||||
if (self._SSWindowStateReadyListener) {
|
||||
window.removeEventListener(
|
||||
"SSWindowStateReady", self._SSWindowStateReadyListener, false);
|
||||
self._SSWindowStateReadyListener = null;
|
||||
}
|
||||
|
||||
self._initFrameCallbacks.forEach(cb => cb());
|
||||
self._initFrameCallbacks = [];
|
||||
}, false);
|
||||
|
||||
this._iframe.setAttribute("src", "chrome://browser/content/tabview.html");
|
||||
this._deck.appendChild(this._iframe);
|
||||
|
||||
// ___ create tooltip
|
||||
let tooltip = document.createElement("tooltip");
|
||||
tooltip.id = "tab-view-tooltip";
|
||||
tooltip.setAttribute("onpopupshowing", "return TabView.fillInTooltip(document.tooltipNode);");
|
||||
document.getElementById("mainPopupSet").appendChild(tooltip);
|
||||
},
|
||||
|
||||
// ----------
|
||||
getContentWindow: function TabView_getContentWindow() {
|
||||
return this._window;
|
||||
},
|
||||
|
||||
// ----------
|
||||
isVisible: function TabView_isVisible() {
|
||||
return (this._deck ? this._deck.selectedPanel == this._iframe : false);
|
||||
},
|
||||
|
||||
// ----------
|
||||
show: function TabView_show() {
|
||||
if (this.isVisible())
|
||||
return;
|
||||
|
||||
let self = this;
|
||||
this._initFrame(function() {
|
||||
self._window.UI.showTabView(true);
|
||||
});
|
||||
},
|
||||
|
||||
// ----------
|
||||
hide: function TabView_hide() {
|
||||
if (this.isVisible() && this._window) {
|
||||
this._window.UI.exit();
|
||||
}
|
||||
},
|
||||
|
||||
// ----------
|
||||
toggle: function TabView_toggle() {
|
||||
if (this.isVisible())
|
||||
this.hide();
|
||||
else
|
||||
this.show();
|
||||
},
|
||||
|
||||
// ----------
|
||||
_tabBrowserHasHiddenTabs: function TabView_tabBrowserHasHiddenTabs() {
|
||||
return (gBrowser.tabs.length - gBrowser.visibleTabs.length) > 0;
|
||||
},
|
||||
|
||||
// ----------
|
||||
updateContextMenu: function TabView_updateContextMenu(tab, popup) {
|
||||
let separator = document.getElementById("context_tabViewNamedGroups");
|
||||
let isEmpty = true;
|
||||
|
||||
while (popup.firstChild && popup.firstChild != separator)
|
||||
popup.removeChild(popup.firstChild);
|
||||
|
||||
let self = this;
|
||||
this._initFrame(function() {
|
||||
let activeGroup = tab._tabViewTabItem.parent;
|
||||
let groupItems = self._window.GroupItems.groupItems;
|
||||
|
||||
groupItems.forEach(function(groupItem) {
|
||||
// if group has title, it's not hidden and there is no active group or
|
||||
// the active group id doesn't match the group id, a group menu item
|
||||
// would be added.
|
||||
if (!groupItem.hidden &&
|
||||
(groupItem.getTitle().trim() || groupItem.getChildren().length) &&
|
||||
(!activeGroup || activeGroup.id != groupItem.id)) {
|
||||
let menuItem = self._createGroupMenuItem(groupItem);
|
||||
popup.insertBefore(menuItem, separator);
|
||||
isEmpty = false;
|
||||
}
|
||||
});
|
||||
separator.hidden = isEmpty;
|
||||
});
|
||||
},
|
||||
|
||||
// ----------
|
||||
_createGroupMenuItem: function TabView__createGroupMenuItem(groupItem) {
|
||||
let menuItem = document.createElement("menuitem");
|
||||
let title = groupItem.getTitle();
|
||||
|
||||
if (!title.trim()) {
|
||||
let topChildLabel = groupItem.getTopChild().tab.label;
|
||||
let childNum = groupItem.getChildren().length;
|
||||
|
||||
if (childNum > 1) {
|
||||
let num = childNum - 1;
|
||||
title =
|
||||
gNavigatorBundle.getString("tabview.moveToUnnamedGroup.label");
|
||||
title = PluralForm.get(num, title).replace("#1", topChildLabel).replace("#2", num);
|
||||
} else {
|
||||
title = topChildLabel;
|
||||
}
|
||||
}
|
||||
|
||||
menuItem.setAttribute("label", title);
|
||||
menuItem.setAttribute("tooltiptext", title);
|
||||
menuItem.setAttribute("crop", "center");
|
||||
menuItem.setAttribute("class", "tabview-menuitem");
|
||||
menuItem.setAttribute(
|
||||
"oncommand",
|
||||
"TabView.moveTabTo(TabContextMenu.contextTab,'" + groupItem.id + "')");
|
||||
|
||||
return menuItem;
|
||||
},
|
||||
|
||||
// ----------
|
||||
moveTabTo: function TabView_moveTabTo(tab, groupItemId) {
|
||||
if (this._window) {
|
||||
this._window.GroupItems.moveTabToGroupItem(tab, groupItemId);
|
||||
} else {
|
||||
let self = this;
|
||||
this._initFrame(function() {
|
||||
self._window.GroupItems.moveTabToGroupItem(tab, groupItemId);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Adds new key commands to the browser, for invoking the Tab Candy UI
|
||||
// and for switching between groups of tabs when outside of the Tab Candy UI.
|
||||
_setBrowserKeyHandlers: function TabView__setBrowserKeyHandlers() {
|
||||
if (this._browserKeyHandlerInitialized)
|
||||
return;
|
||||
|
||||
this._browserKeyHandlerInitialized = true;
|
||||
|
||||
let self = this;
|
||||
window.addEventListener("keypress", function(event) {
|
||||
if (self.isVisible() || !self._tabBrowserHasHiddenTabs())
|
||||
return;
|
||||
|
||||
let charCode = event.charCode;
|
||||
// Control (+ Shift) + `
|
||||
if (event.ctrlKey && !event.metaKey && !event.altKey &&
|
||||
(charCode == 96 || charCode == 126)) {
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
|
||||
self._initFrame(function() {
|
||||
let groupItems = self._window.GroupItems;
|
||||
let tabItem = groupItems.getNextGroupItemTab(event.shiftKey);
|
||||
if (!tabItem)
|
||||
return;
|
||||
|
||||
if (gBrowser.selectedTab.pinned)
|
||||
groupItems.updateActiveGroupItemAndTabBar(tabItem, {dontSetActiveTabInGroup: true});
|
||||
else
|
||||
gBrowser.selectedTab = tabItem.tab;
|
||||
});
|
||||
}
|
||||
}, true);
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Prepares the tab view for undo close tab.
|
||||
prepareUndoCloseTab: function TabView_prepareUndoCloseTab(blankTabToRemove) {
|
||||
if (this._window) {
|
||||
this._window.UI.restoredClosedTab = true;
|
||||
|
||||
if (blankTabToRemove && blankTabToRemove._tabViewTabItem)
|
||||
blankTabToRemove._tabViewTabItem.isRemovedAfterRestore = true;
|
||||
}
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Cleans up the tab view after undo close tab.
|
||||
afterUndoCloseTab: function TabView_afterUndoCloseTab() {
|
||||
if (this._window)
|
||||
this._window.UI.restoredClosedTab = false;
|
||||
},
|
||||
|
||||
// ----------
|
||||
// On move to group pop showing.
|
||||
moveToGroupPopupShowing: function TabView_moveToGroupPopupShowing(event) {
|
||||
// Update the context menu only if Panorama was already initialized or if
|
||||
// there are hidden tabs.
|
||||
let numHiddenTabs = gBrowser.tabs.length - gBrowser.visibleTabs.length;
|
||||
if (this._window || numHiddenTabs > 0)
|
||||
this.updateContextMenu(TabContextMenu.contextTab, event.target);
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: _addToolbarButton
|
||||
// Adds the TabView button to the TabsToolbar.
|
||||
_addToolbarButton: function TabView__addToolbarButton() {
|
||||
let buttonId = "tabview-button";
|
||||
|
||||
if (CustomizableUI.getPlacementOfWidget(buttonId))
|
||||
return;
|
||||
|
||||
let allTabsBtnPlacement = CustomizableUI.getPlacementOfWidget("alltabs-button");
|
||||
// allTabsBtnPlacement can never be null because the button isn't removable
|
||||
let desiredPosition = allTabsBtnPlacement.position + 1;
|
||||
CustomizableUI.addWidgetToArea(buttonId, "TabsToolbar", desiredPosition);
|
||||
// NB: this is for backwards compatibility, and should be removed by
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=976041
|
||||
document.persist("TabsToolbar", "currentset");
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: updateGroupNumberBroadcaster
|
||||
// Updates the group number broadcaster.
|
||||
updateGroupNumberBroadcaster: function TabView_updateGroupNumberBroadcaster(number) {
|
||||
let groupsNumber = document.getElementById("tabviewGroupsNumber");
|
||||
groupsNumber.setAttribute("groups", number);
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: enableSessionRestore
|
||||
// Enables automatic session restore when the browser is started. Does
|
||||
// nothing if we already did that once in the past.
|
||||
enableSessionRestore: function TabView_enableSessionRestore() {
|
||||
if (!this._window || !this.firstUseExperienced)
|
||||
return;
|
||||
|
||||
// do nothing if we already enabled session restore once
|
||||
if (this.sessionRestoreEnabledOnce)
|
||||
return;
|
||||
|
||||
this.sessionRestoreEnabledOnce = true;
|
||||
|
||||
// enable session restore if necessary
|
||||
if (Services.prefs.getIntPref(this.PREF_STARTUP_PAGE) != 3) {
|
||||
Services.prefs.setIntPref(this.PREF_STARTUP_PAGE, 3);
|
||||
|
||||
// show banner
|
||||
this._window.UI.notifySessionRestoreEnabled();
|
||||
}
|
||||
},
|
||||
|
||||
// ----------
|
||||
// Function: fillInTooltip
|
||||
// Fills in the tooltip text.
|
||||
fillInTooltip: function fillInTooltip(tipElement) {
|
||||
let retVal = false;
|
||||
let titleText = null;
|
||||
let direction = tipElement.ownerDocument.dir;
|
||||
|
||||
while (!titleText && tipElement) {
|
||||
if (tipElement.nodeType == Node.ELEMENT_NODE)
|
||||
titleText = tipElement.getAttribute("title");
|
||||
tipElement = tipElement.parentNode;
|
||||
}
|
||||
let tipNode = document.getElementById("tab-view-tooltip");
|
||||
tipNode.style.direction = direction;
|
||||
|
||||
if (titleText) {
|
||||
tipNode.setAttribute("label", titleText);
|
||||
retVal = true;
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
};
|
@ -1388,7 +1388,6 @@ var gBrowserInit = {
|
||||
RestoreLastSessionObserver.init();
|
||||
|
||||
SocialUI.init();
|
||||
TabView.init();
|
||||
|
||||
// Telemetry for master-password - we do this after 5 seconds as it
|
||||
// can cause IO if NSS/PSM has not already initialized.
|
||||
@ -1509,7 +1508,6 @@ var gBrowserInit = {
|
||||
|
||||
gPrefService.removeObserver(ctrlTab.prefName, ctrlTab);
|
||||
ctrlTab.uninit();
|
||||
TabView.uninit();
|
||||
SocialUI.uninit();
|
||||
gBrowserThumbnails.uninit();
|
||||
FullZoom.destroy();
|
||||
@ -1564,7 +1562,7 @@ var gBrowserInit = {
|
||||
'viewToolbarsMenu', 'viewSidebarMenuMenu', 'Browser:Reload',
|
||||
'viewFullZoomMenu', 'pageStyleMenu', 'charsetMenu', 'View:PageSource', 'View:FullScreen',
|
||||
'viewHistorySidebar', 'Browser:AddBookmarkAs', 'Browser:BookmarkAllTabs',
|
||||
'View:PageInfo', 'Browser:ToggleTabView'];
|
||||
'View:PageInfo'];
|
||||
var element;
|
||||
|
||||
for (let disabledItem of disabledItems) {
|
||||
@ -5521,7 +5519,6 @@ const nodeToTooltipMap = {
|
||||
"new-tab-button": "newTabButton.tooltip",
|
||||
"tabs-newtab-button": "newTabButton.tooltip",
|
||||
"fullscreen-button": "fullscreenButton.tooltip",
|
||||
"tabview-button": "tabviewButton.tooltip",
|
||||
"downloads-button": "downloads.tooltip",
|
||||
};
|
||||
const nodeToShortcutMap = {
|
||||
@ -5533,7 +5530,6 @@ const nodeToShortcutMap = {
|
||||
"new-tab-button": "key_newNavigatorTab",
|
||||
"tabs-newtab-button": "key_newNavigatorTab",
|
||||
"fullscreen-button": "key_fullScreen",
|
||||
"tabview-button": "key_tabview",
|
||||
"downloads-button": "key_openDownloads"
|
||||
};
|
||||
const gDynamicTooltipCache = new Map();
|
||||
@ -6534,11 +6530,6 @@ function CanCloseWindow()
|
||||
|
||||
function WindowIsClosing()
|
||||
{
|
||||
if (TabView.isVisible()) {
|
||||
TabView.hide();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!closeWindow(false, warnAboutClosingWindow))
|
||||
return false;
|
||||
|
||||
@ -6758,9 +6749,7 @@ function undoCloseTab(aIndex) {
|
||||
|
||||
var tab = null;
|
||||
if (SessionStore.getClosedTabCount(window) > (aIndex || 0)) {
|
||||
TabView.prepareUndoCloseTab(blankTabToRemove);
|
||||
tab = SessionStore.undoCloseTab(window, aIndex || 0);
|
||||
TabView.afterUndoCloseTab();
|
||||
|
||||
if (blankTabToRemove)
|
||||
gBrowser.removeTab(blankTabToRemove);
|
||||
@ -7854,10 +7843,6 @@ var TabContextMenu = {
|
||||
if (!bookmarkAllTabs.hidden)
|
||||
PlacesCommandHook.updateBookmarkAllTabsCommand();
|
||||
|
||||
// Hide "Move to Group" if it's a pinned tab.
|
||||
document.getElementById("context_tabViewMenu").hidden =
|
||||
(this.contextTab.pinned || !TabView.firstUseExperienced);
|
||||
|
||||
// Adjust the state of the toggle mute menu item.
|
||||
let toggleMute = document.getElementById("context_toggleMuteTab");
|
||||
if (this.contextTab.hasAttribute("muted")) {
|
||||
|
@ -91,15 +91,6 @@
|
||||
<menuitem id="context_unpinTab" label="&unpinTab.label;" hidden="true"
|
||||
accesskey="&unpinTab.accesskey;"
|
||||
oncommand="gBrowser.unpinTab(TabContextMenu.contextTab);"/>
|
||||
<menu id="context_tabViewMenu" label="&moveToGroup.label;"
|
||||
accesskey="&moveToGroup.accesskey;">
|
||||
<menupopup id="context_tabViewMenuPopup"
|
||||
onpopupshowing="if (event.target == this) TabView.moveToGroupPopupShowing(event);">
|
||||
<menuseparator id="context_tabViewNamedGroups" hidden="true"/>
|
||||
<menuitem id="context_tabViewNewGroup" label="&moveToNewGroup.label;"
|
||||
oncommand="TabView.moveTabTo(TabContextMenu.contextTab, null);"/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
<menuitem id="context_openTabInWindow" label="&moveToNewWindow.label;"
|
||||
accesskey="&moveToNewWindow.accesskey;"
|
||||
tbattr="tabbrowser-multiple"
|
||||
@ -590,12 +581,6 @@
|
||||
removable="false">
|
||||
<menupopup id="alltabs-popup"
|
||||
position="after_end">
|
||||
<menuitem id="menu_tabview"
|
||||
class="menuitem-iconic"
|
||||
key="key_tabview"
|
||||
label="&viewTabGroups.label;"
|
||||
command="Browser:ToggleTabView"
|
||||
observes="tabviewGroupsNumber"/>
|
||||
<menuitem id="alltabs_undoCloseTab"
|
||||
class="menuitem-iconic"
|
||||
key="key_undoCloseTab"
|
||||
@ -1058,12 +1043,6 @@
|
||||
class="toolbarbutton-1 chromeclass-toolbar-additional"
|
||||
label="&syncToolbarButton.label;"
|
||||
oncommand="gSyncUI.handleToolbarButton()"/>
|
||||
|
||||
<toolbarbutton id="tabview-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
|
||||
label="&tabGroupsButton.label;"
|
||||
command="Browser:ToggleTabView"
|
||||
tooltip="dynamic-shortcut-tooltip"
|
||||
observes="tabviewGroupsNumber"/>
|
||||
</toolbarpalette>
|
||||
</toolbox>
|
||||
|
||||
|
@ -56,8 +56,7 @@ var gChatWindow = {
|
||||
'key_selectTab4', 'key_selectTab5', 'key_selectTab6',
|
||||
'key_selectTab7', 'key_selectTab8', 'key_selectLastTab',
|
||||
'viewHistorySidebar', 'viewBookmarksSidebar',
|
||||
'Browser:AddBookmarkAs', 'Browser:BookmarkAllTabs',
|
||||
'Browser:ToggleTabView'];
|
||||
'Browser:AddBookmarkAs', 'Browser:BookmarkAllTabs'];
|
||||
|
||||
for (let disabledItem of disabledItems) {
|
||||
document.getElementById(disabledItem).setAttribute("disabled", "true");
|
||||
|
@ -1007,14 +1007,7 @@
|
||||
<method name="updateTitlebar">
|
||||
<body>
|
||||
<![CDATA[
|
||||
if ("TabView" in window && TabView.isVisible()) {
|
||||
// ToDo: this will be removed when we gain ability to draw to the menu bar.
|
||||
// Bug 586175
|
||||
this.ownerDocument.title = TabView.windowTitle;
|
||||
}
|
||||
else {
|
||||
this.ownerDocument.title = this.getWindowTitleForBrowser(this.mCurrentBrowser);
|
||||
}
|
||||
this.ownerDocument.title = this.getWindowTitleForBrowser(this.mCurrentBrowser);
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
@ -4374,11 +4367,9 @@
|
||||
if (tabForEvent.selected)
|
||||
return;
|
||||
|
||||
// If this is a tabprompt, and we're not in tabview/panorama with
|
||||
// the prompt being a beforeunload one, we won't switch tabs
|
||||
// (unless this behaviour has been disabled entirely using the pref).
|
||||
// If this is a tabprompt, we won't switch tabs
|
||||
// (unless this behaviour has been disabled entirely using the pref)
|
||||
if (event.detail && event.detail.tabPrompt &&
|
||||
!(event.detail.inPermitUnload && ("TabView" in window) && TabView.isVisible()) &&
|
||||
Services.prefs.getBoolPref("browser.tabs.dontfocusfordialogs")) {
|
||||
let docPrincipal = targetIsWindow ? event.target.document.nodePrincipal : null;
|
||||
// At least one of these should/will be non-null:
|
||||
@ -6224,7 +6215,7 @@
|
||||
var tabstripBO = tabContainer.mTabstrip.scrollBoxObject;
|
||||
for (var i = 0; i < this.childNodes.length; i++) {
|
||||
let curTab = this.childNodes[i].tab;
|
||||
if (!curTab) // "Tab Groups" menuitem and its menuseparator
|
||||
if (!curTab) // "Undo close tab", menuseparator, or entries put here by addons.
|
||||
continue;
|
||||
let curTabBO = curTab.boxObject;
|
||||
if (curTabBO.screenX >= tabstripBO.screenX &&
|
||||
|
@ -95,7 +95,6 @@ browser.jar:
|
||||
content/browser/browser-social.js (content/browser-social.js)
|
||||
* content/browser/browser-syncui.js (content/browser-syncui.js)
|
||||
* content/browser/browser-tabPreviews.xml (content/browser-tabPreviews.xml)
|
||||
content/browser/browser-tabview.js (content/browser-tabview.js)
|
||||
content/browser/browser-thumbnails.js (content/browser-thumbnails.js)
|
||||
content/browser/browser-trackingprotection.js (content/browser-trackingprotection.js)
|
||||
* content/browser/chatWindow.xul (content/chatWindow.xul)
|
||||
|
@ -32,7 +32,6 @@ var SessionMigrationInternal = {
|
||||
* - with tab group info (hidden + group id)
|
||||
* - with selected tab info
|
||||
* - with selected window info
|
||||
* - with tabgroups info
|
||||
*
|
||||
* The complete state is then wrapped into the "about:welcomeback" page as
|
||||
* form field info to be restored when restoring the state.
|
||||
@ -53,21 +52,8 @@ var SessionMigrationInternal = {
|
||||
tab.index = oldTab.index;
|
||||
tab.hidden = oldTab.hidden;
|
||||
tab.pinned = oldTab.pinned;
|
||||
// The tabgroup info is in the extData, so we need to get it out.
|
||||
if (oldTab.extData && "tabview-tab" in oldTab.extData) {
|
||||
tab.extData = {"tabview-tab": oldTab.extData["tabview-tab"]};
|
||||
}
|
||||
return tab;
|
||||
});
|
||||
// There are various tabgroup-related attributes that we need to get out
|
||||
// of the session restore data for the window, too.
|
||||
if (oldWin.extData) {
|
||||
for (let k of Object.keys(oldWin.extData)) {
|
||||
if (k.startsWith("tabview-")) {
|
||||
win.extData[k] = oldWin.extData[k];
|
||||
}
|
||||
}
|
||||
}
|
||||
win.selected = oldWin.selected;
|
||||
win._closedTabs = [];
|
||||
return win;
|
||||
|
@ -1770,7 +1770,8 @@ var SessionStoreInternal = {
|
||||
}
|
||||
|
||||
// Default delay of 2 seconds gives enough time to catch multiple TabShow
|
||||
// events due to changing groups in Panorama.
|
||||
// events. This used to be due to changing groups in 'tab groups'. We
|
||||
// might be able to get rid of this now?
|
||||
this.saveStateDelayed(aWindow);
|
||||
},
|
||||
|
||||
@ -1782,7 +1783,8 @@ var SessionStoreInternal = {
|
||||
}
|
||||
|
||||
// Default delay of 2 seconds gives enough time to catch multiple TabHide
|
||||
// events due to changing groups in Panorama.
|
||||
// events. This used to be due to changing groups in 'tab groups'. We
|
||||
// might be able to get rid of this now?
|
||||
this.saveStateDelayed(aWindow);
|
||||
},
|
||||
|
||||
@ -2290,10 +2292,7 @@ var SessionStoreInternal = {
|
||||
// Restore into that window - pretend it's a followup since we'll already
|
||||
// have a focused window.
|
||||
//XXXzpao This is going to merge extData together (taking what was in
|
||||
// winState over what is in the window already. The hack we have
|
||||
// in _preWindowToRestoreInto will prevent most (all?) Panorama
|
||||
// weirdness but we will still merge other extData.
|
||||
// Bug 588217 should make this go away by merging the group data.
|
||||
// winState over what is in the window already.
|
||||
let options = {overwriteTabs: canOverwriteTabs, isFollowUp: true};
|
||||
this.restoreWindow(windowToUse, winState, options);
|
||||
}
|
||||
@ -2501,25 +2500,10 @@ var SessionStoreInternal = {
|
||||
// the previous session's tabs to the end. This will be set if possible.
|
||||
let canOverwriteTabs = false;
|
||||
|
||||
// Step 1 of processing:
|
||||
// Inspect extData for Panorama identifiers. If found, then we want to
|
||||
// inspect further. If there is a single group, then we can use this
|
||||
// window. If there are multiple groups then we won't use this window.
|
||||
let groupsData = this.getWindowValue(aWindow, "tabview-groups");
|
||||
if (groupsData) {
|
||||
groupsData = JSON.parse(groupsData);
|
||||
|
||||
// If there are multiple groups, we don't want to use this window.
|
||||
if (groupsData.totalNumber > 1)
|
||||
return [false, false];
|
||||
}
|
||||
|
||||
// Step 2 of processing:
|
||||
// If we're still here, then the window is usable. Look at the open tabs in
|
||||
// comparison to home pages. If all the tabs are home pages then we'll end
|
||||
// up overwriting all of them. Otherwise we'll just close the tabs that
|
||||
// match home pages. Tabs with the about:blank URI will always be
|
||||
// overwritten.
|
||||
// Look at the open tabs in comparison to home pages. If all the tabs are
|
||||
// home pages then we'll end up overwriting all of them. Otherwise we'll
|
||||
// just close the tabs that match home pages. Tabs with the about:blank
|
||||
// URI will always be overwritten.
|
||||
let homePages = ["about:blank"];
|
||||
let removableTabs = [];
|
||||
let tabbrowser = aWindow.gBrowser;
|
||||
|
@ -92,7 +92,6 @@ XPCOMUtils.defineLazyGetter(this, "PALETTE_ITEMS", function() {
|
||||
"feed-button",
|
||||
"email-link-button",
|
||||
"sync-button",
|
||||
"tabview-button",
|
||||
"web-apps-button",
|
||||
];
|
||||
|
||||
|
@ -435,9 +435,6 @@ function TabWindow(win) {
|
||||
this.tabbrowser.tabContainer.addEventListener(this.tabEvents[i], this, false);
|
||||
this.tabbrowser.addTabsProgressListener(this);
|
||||
|
||||
for (let i = 0; i < this.winEvents.length; i++)
|
||||
this.win.addEventListener(this.winEvents[i], this, false);
|
||||
|
||||
AeroPeek.windows.push(this);
|
||||
let tabs = this.tabbrowser.tabs;
|
||||
for (let i = 0; i < tabs.length; i++)
|
||||
@ -450,7 +447,6 @@ function TabWindow(win) {
|
||||
TabWindow.prototype = {
|
||||
_enabled: false,
|
||||
tabEvents: ["TabOpen", "TabClose", "TabSelect", "TabMove"],
|
||||
winEvents: ["tabviewshown", "tabviewhidden"],
|
||||
|
||||
destroy: function () {
|
||||
this._destroying = true;
|
||||
@ -461,9 +457,6 @@ TabWindow.prototype = {
|
||||
for (let i = 0; i < this.tabEvents.length; i++)
|
||||
this.tabbrowser.tabContainer.removeEventListener(this.tabEvents[i], this, false);
|
||||
|
||||
for (let i = 0; i < this.winEvents.length; i++)
|
||||
this.win.removeEventListener(this.winEvents[i], this, false);
|
||||
|
||||
for (let i = 0; i < tabs.length; i++)
|
||||
this.removeTab(tabs[i]);
|
||||
|
||||
@ -579,14 +572,6 @@ TabWindow.prototype = {
|
||||
case "TabMove":
|
||||
this.updateTabOrdering();
|
||||
break;
|
||||
case "tabviewshown":
|
||||
this.enabled = false;
|
||||
break;
|
||||
case "tabviewhidden":
|
||||
if (!AeroPeek._prefenabled)
|
||||
return;
|
||||
this.enabled = true;
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user