Bug 670684 - Remove all tabs panel code . r=gavin

This commit is contained in:
Dão Gottwald 2013-02-11 13:48:32 +01:00
Родитель 0c015e72d6
Коммит c61334344b
22 изменённых файлов: 31 добавлений и 957 удалений

Просмотреть файл

@ -425,7 +425,6 @@ pref("browser.tabs.closeButtons", 1);
// false return to the adjacent tab (old default)
pref("browser.tabs.selectOwnerOnClose", true);
pref("browser.allTabs.previews", false);
pref("browser.ctrlTab.previews", false);
pref("browser.ctrlTab.recentlyUsedLimit", 7);

Просмотреть файл

@ -256,6 +256,7 @@ var ctrlTab = {
var showAllLabel = gNavigatorBundle.getString("ctrlTab.showAll.label");
this.showAllButton.label =
PluralForm.get(this.tabCount, showAllLabel).replace("#1", this.tabCount);
this.showAllButton.hidden = !allTabs.canOpen;
},
updatePreview: function ctrlTab_updatePreview(aPreview, aTab) {
@ -362,8 +363,6 @@ var ctrlTab = {
if (this.isOpen)
return;
allTabs.close();
document.addEventListener("keyup", this, true);
this.updatePreviews();
@ -525,6 +524,10 @@ var ctrlTab = {
if (event.keyCode == event.DOM_VK_CONTROL)
this.pick();
break;
case "popupshowing":
if (event.target.id == "menu_viewPopup")
document.getElementById("menu_showAllTabs").hidden = !allTabs.canOpen;
break;
}
},
@ -543,6 +546,7 @@ var ctrlTab = {
// If we're not running, hide the "Show All Tabs" menu item,
// as Shift+Ctrl+Tab will be handled by the tab bar.
document.getElementById("menu_showAllTabs").hidden = !enable;
document.getElementById("menu_viewPopup")[toggleEventListener]("popupshowing", this);
// Also disable the <key> to ensure Shift+Ctrl+Tab never triggers
// Show All Tabs.
@ -556,497 +560,19 @@ var ctrlTab = {
/**
* All Tabs panel
* All Tabs menu
*/
var allTabs = {
get panel () {
delete this.panel;
return this.panel = document.getElementById("allTabs-panel");
},
get filterField () {
delete this.filterField;
return this.filterField = document.getElementById("allTabs-filter");
},
get container () {
delete this.container;
return this.container = document.getElementById("allTabs-container");
},
get tabCloseButton () {
delete this.tabCloseButton;
return this.tabCloseButton = document.getElementById("allTabs-tab-close-button");
},
get toolbarButton() document.getElementById("alltabs-button"),
get previews () this.container.getElementsByClassName("allTabs-preview"),
get isOpen () this.panel.state == "open" || this.panel.state == "showing",
init: function allTabs_init() {
if (this._initiated)
return;
this._initiated = true;
tabPreviews.init();
Array.forEach(gBrowser.tabs, function (tab) {
this._addPreview(tab);
}, this);
gBrowser.tabContainer.addEventListener("TabOpen", this, false);
gBrowser.tabContainer.addEventListener("TabAttrModified", this, false);
gBrowser.tabContainer.addEventListener("TabMove", this, false);
gBrowser.tabContainer.addEventListener("TabClose", this, false);
},
uninit: function allTabs_uninit() {
if (!this._initiated)
return;
gBrowser.tabContainer.removeEventListener("TabOpen", this, false);
gBrowser.tabContainer.removeEventListener("TabAttrModified", this, false);
gBrowser.tabContainer.removeEventListener("TabMove", this, false);
gBrowser.tabContainer.removeEventListener("TabClose", this, false);
while (this.container.hasChildNodes())
this.container.removeChild(this.container.firstChild);
this._initiated = false;
},
prefName: "browser.allTabs.previews",
readPref: function allTabs_readPref() {
var allTabsButton = this.toolbarButton;
if (!allTabsButton)
return;
if (gPrefService.getBoolPref(this.prefName)) {
allTabsButton.removeAttribute("type");
allTabsButton.setAttribute("command", "Browser:ShowAllTabs");
} else {
allTabsButton.setAttribute("type", "menu");
allTabsButton.removeAttribute("command");
allTabsButton.removeAttribute("oncommand");
}
},
observe: function (aSubject, aTopic, aPrefName) {
this.readPref();
},
pick: function allTabs_pick(aPreview) {
if (!aPreview)
aPreview = this._firstVisiblePreview;
if (aPreview)
this.tabToSelect = aPreview._tab;
this.close();
},
closeTab: function allTabs_closeTab(event) {
this.filterField.focus();
gBrowser.removeTab(event.currentTarget._targetPreview._tab);
},
filter: function allTabs_filter() {
if (this._currentFilter == this.filterField.value)
return;
this._currentFilter = this.filterField.value;
var filter = this._currentFilter.split(/\s+/g);
this._visible = 0;
Array.forEach(this.previews, function (preview) {
var tab = preview._tab;
var matches = 0;
if (filter.length && !tab.hidden) {
let tabstring = tab.linkedBrowser.currentURI.spec;
try {
tabstring = decodeURI(tabstring);
} catch (e) {}
tabstring = tab.label + " " + tab.label.toLocaleLowerCase() + " " + tabstring;
for (let i = 0; i < filter.length; i++)
matches += tabstring.contains(filter[i]);
}
if (matches < filter.length || tab.hidden) {
preview.hidden = true;
}
else {
this._visible++;
this._updatePreview(preview);
preview.hidden = false;
}
}, this);
this._reflow();
},
get canOpen() isElementVisible(this.toolbarButton),
open: function allTabs_open() {
var allTabsButton = this.toolbarButton;
if (allTabsButton &&
allTabsButton.getAttribute("type") == "menu") {
if (this.canOpen) {
// Without setTimeout, the menupopup won't stay open when invoking
// "View > Show All Tabs" and the menu bar auto-hides.
setTimeout(function () {
allTabsButton.open = true;
allTabs.toolbarButton.open = true;
}, 0);
return;
}
this.init();
if (this.isOpen)
return;
this._maxPanelHeight = Math.max(gBrowser.clientHeight, screen.availHeight / 2);
this._maxPanelWidth = Math.max(gBrowser.clientWidth, screen.availWidth / 2);
this.filter();
tabPreviewPanelHelper.opening(this);
this.panel.popupBoxObject.setConsumeRollupEvent(Ci.nsIPopupBoxObject.ROLLUP_NO_CONSUME);
this.panel.openPopup(gBrowser, "overlap", 0, 0, false, true);
},
close: function allTabs_close() {
this.panel.hidePopup();
},
setupGUI: function allTabs_setupGUI() {
this.filterField.focus();
this.filterField.placeholder = this.filterField.tooltipText;
this.panel.addEventListener("keypress", this, false);
this.panel.addEventListener("keypress", this, true);
this._browserCommandSet.addEventListener("command", this, false);
// When the panel is open, a second click on the all tabs button should
// close the panel but not re-open it.
document.getElementById("Browser:ShowAllTabs").setAttribute("disabled", "true");
},
suspendGUI: function allTabs_suspendGUI() {
this.filterField.placeholder = "";
this.filterField.value = "";
this._currentFilter = null;
this._updateTabCloseButton();
this.panel.removeEventListener("keypress", this, false);
this.panel.removeEventListener("keypress", this, true);
this._browserCommandSet.removeEventListener("command", this, false);
setTimeout(function () {
document.getElementById("Browser:ShowAllTabs").removeAttribute("disabled");
}, 300);
},
handleEvent: function allTabs_handleEvent(event) {
if (event.type.startsWith("Tab")) {
var tab = event.target;
if (event.type != "TabOpen")
var preview = this._getPreview(tab);
}
switch (event.type) {
case "TabAttrModified":
// tab attribute modified (e.g. label, crop, busy, image)
if (!preview.hidden)
this._updatePreview(preview);
break;
case "TabOpen":
if (this.isOpen)
this.close();
this._addPreview(tab);
break;
case "TabMove":
let siblingPreview = tab.nextSibling &&
this._getPreview(tab.nextSibling);
if (siblingPreview)
siblingPreview.parentNode.insertBefore(preview, siblingPreview);
else
this.container.lastChild.appendChild(preview);
if (this.isOpen && !preview.hidden) {
this._reflow();
preview.focus();
}
break;
case "TabClose":
this._removePreview(preview);
break;
case "keypress":
this._onKeyPress(event);
break;
case "command":
if (event.target.id != "Browser:ShowAllTabs") {
// Close the panel when there's a browser command executing in the background.
this.close();
}
break;
}
},
_visible: 0,
_currentFilter: null,
get _stack () {
delete this._stack;
return this._stack = document.getElementById("allTabs-stack");
},
get _browserCommandSet () {
delete this._browserCommandSet;
return this._browserCommandSet = document.getElementById("mainCommandSet");
},
get _previewLabelHeight () {
delete this._previewLabelHeight;
return this._previewLabelHeight = parseInt(getComputedStyle(this.previews[0], "").lineHeight);
},
get _visiblePreviews ()
Array.filter(this.previews, function (preview) !preview.hidden),
get _firstVisiblePreview () {
if (this._visible == 0)
return null;
var previews = this.previews;
for (let i = 0; i < previews.length; i++) {
if (!previews[i].hidden)
return previews[i];
}
return null;
},
_reflow: function allTabs_reflow() {
this._updateTabCloseButton();
const CONTAINER_MAX_WIDTH = this._maxPanelWidth * .95;
const CONTAINER_MAX_HEIGHT = this._maxPanelHeight - 35;
// the size of the whole preview relative to the thumbnail
const REL_PREVIEW_THUMBNAIL = 1.2;
const REL_PREVIEW_HEIGHT_WIDTH = tabPreviews.height / tabPreviews.width;
const PREVIEW_MAX_WIDTH = tabPreviews.width * REL_PREVIEW_THUMBNAIL;
var rows, previewHeight, previewWidth, outerHeight;
this._columns = Math.floor(CONTAINER_MAX_WIDTH / PREVIEW_MAX_WIDTH);
do {
rows = Math.ceil(this._visible / this._columns);
previewWidth = Math.min(PREVIEW_MAX_WIDTH,
Math.round(CONTAINER_MAX_WIDTH / this._columns));
previewHeight = Math.round(previewWidth * REL_PREVIEW_HEIGHT_WIDTH);
outerHeight = previewHeight + this._previewLabelHeight;
} while (rows * outerHeight > CONTAINER_MAX_HEIGHT && ++this._columns);
var outerWidth = previewWidth;
{
let innerWidth = Math.ceil(previewWidth / REL_PREVIEW_THUMBNAIL);
let innerHeight = Math.ceil(previewHeight / REL_PREVIEW_THUMBNAIL);
var canvasStyle = "max-width:" + innerWidth + "px;" +
"min-width:" + innerWidth + "px;" +
"max-height:" + innerHeight + "px;" +
"min-height:" + innerHeight + "px;";
}
var previews = Array.slice(this.previews);
while (this.container.hasChildNodes())
this.container.removeChild(this.container.firstChild);
for (let i = rows || 1; i > 0; i--)
this.container.appendChild(document.createElement("hbox"));
var row = this.container.firstChild;
var colCount = 0;
previews.forEach(function (preview) {
if (!preview.hidden &&
++colCount > this._columns) {
row = row.nextSibling;
colCount = 1;
}
preview.setAttribute("minwidth", outerWidth);
preview.setAttribute("height", outerHeight);
preview.setAttribute("canvasstyle", canvasStyle);
preview.removeAttribute("closebuttonhover");
row.appendChild(preview);
}, this);
this._stack.width = this._maxPanelWidth;
this.container.width = Math.ceil(outerWidth * Math.min(this._columns, this._visible));
this.container.left = Math.round((this._maxPanelWidth - this.container.width) / 2);
this.container.maxWidth = this._maxPanelWidth - this.container.left;
this.container.maxHeight = rows * outerHeight;
},
_addPreview: function allTabs_addPreview(aTab) {
var preview = document.createElement("button");
preview.className = "allTabs-preview";
preview._tab = aTab;
this.container.lastChild.appendChild(preview);
},
_removePreview: function allTabs_removePreview(aPreview) {
var updateUI = (this.isOpen && !aPreview.hidden);
aPreview._tab = null;
aPreview.parentNode.removeChild(aPreview);
if (updateUI) {
this._visible--;
this._reflow();
this.filterField.focus();
}
},
_getPreview: function allTabs_getPreview(aTab) {
var previews = this.previews;
for (let i = 0; i < previews.length; i++)
if (previews[i]._tab == aTab)
return previews[i];
return null;
},
_updateTabCloseButton: function allTabs_updateTabCloseButton(event) {
if (event && event.target == this.tabCloseButton)
return;
if (this.tabCloseButton._targetPreview) {
if (event && event.target == this.tabCloseButton._targetPreview)
return;
this.tabCloseButton._targetPreview.removeAttribute("closebuttonhover");
}
if (event &&
event.target.parentNode.parentNode == this.container &&
(event.target._tab.previousSibling || event.target._tab.nextSibling)) {
let canvas = event.target.firstChild.getBoundingClientRect();
let container = this.container.getBoundingClientRect();
let tabCloseButton = this.tabCloseButton.getBoundingClientRect();
let alignLeft = getComputedStyle(this.panel, "").direction == "rtl";
#ifdef XP_MACOSX
alignLeft = !alignLeft;
#endif
this.tabCloseButton.left = canvas.left -
container.left +
parseInt(this.container.left) +
(alignLeft ? 0 :
canvas.width - tabCloseButton.width);
this.tabCloseButton.top = canvas.top - container.top;
this.tabCloseButton._targetPreview = event.target;
this.tabCloseButton.style.visibility = "visible";
event.target.setAttribute("closebuttonhover", "true");
} else {
this.tabCloseButton.style.visibility = "hidden";
this.tabCloseButton.left = this.tabCloseButton.top = 0;
this.tabCloseButton._targetPreview = null;
}
},
_updatePreview: function allTabs_updatePreview(aPreview) {
aPreview.setAttribute("label", aPreview._tab.label);
aPreview.setAttribute("tooltiptext", aPreview._tab.label);
aPreview.setAttribute("crop", aPreview._tab.crop);
if (aPreview._tab.image)
aPreview.setAttribute("image", aPreview._tab.image);
else
aPreview.removeAttribute("image");
var thumbnail = tabPreviews.get(aPreview._tab);
if (aPreview.firstChild) {
if (aPreview.firstChild == thumbnail)
return;
aPreview.removeChild(aPreview.firstChild);
}
aPreview.appendChild(thumbnail);
},
_onKeyPress: function allTabs_onKeyPress(event) {
if (event.eventPhase == event.CAPTURING_PHASE) {
this._onCapturingKeyPress(event);
return;
}
if (event.keyCode == event.DOM_VK_ESCAPE) {
this.close();
event.preventDefault();
event.stopPropagation();
return;
}
if (event.target == this.filterField) {
switch (event.keyCode) {
case event.DOM_VK_UP:
if (this._visible) {
let previews = this._visiblePreviews;
let columns = Math.min(previews.length, this._columns);
previews[Math.floor(previews.length / columns) * columns - 1].focus();
event.preventDefault();
event.stopPropagation();
}
break;
case event.DOM_VK_DOWN:
if (this._visible) {
this._firstVisiblePreview.focus();
event.preventDefault();
event.stopPropagation();
}
break;
}
}
},
_onCapturingKeyPress: function allTabs_onCapturingKeyPress(event) {
switch (event.keyCode) {
case event.DOM_VK_UP:
case event.DOM_VK_DOWN:
if (event.target != this.filterField)
this._advanceFocusVertically(event);
break;
case event.DOM_VK_RETURN:
if (event.target == this.filterField) {
this.filter();
this.pick();
event.preventDefault();
event.stopPropagation();
}
break;
}
},
_advanceFocusVertically: function allTabs_advanceFocusVertically(event) {
var preview = document.activeElement;
if (!preview || preview.parentNode.parentNode != this.container)
return;
event.stopPropagation();
var up = (event.keyCode == event.DOM_VK_UP);
var previews = this._visiblePreviews;
if (up && preview == previews[0]) {
this.filterField.focus();
return;
}
var i = previews.indexOf(preview);
var columns = Math.min(previews.length, this._columns);
var column = i % columns;
var row = Math.floor(i / columns);
function newIndex() row * columns + column;
function outOfBounds() newIndex() >= previews.length;
if (up) {
row--;
if (row < 0) {
let rows = Math.ceil(previews.length / columns);
row = rows - 1;
column--;
if (outOfBounds())
row--;
}
} else {
row++;
if (outOfBounds()) {
if (column == columns - 1) {
this.filterField.focus();
return;
}
row = 0;
column++;
}
}
previews[newIndex()].focus();
}
};

Просмотреть файл

@ -34,42 +34,4 @@
#endif
</handlers>
</binding>
<binding id="allTabs-preview" extends="chrome://global/content/bindings/button.xml#button-base">
<content pack="center" align="center">
<xul:stack>
<xul:vbox class="allTabs-preview-inner" align="center" pack="center">
<xul:hbox class="tabPreview-canvas" xbl:inherits="style=canvasstyle">
<children/>
</xul:hbox>
<xul:label flex="1" xbl:inherits="value=label,crop" class="allTabs-preview-label plain"/>
</xul:vbox>
<xul:hbox class="allTabs-favicon-container">
<xul:image class="allTabs-favicon" xbl:inherits="src=image"/>
</xul:hbox>
</xul:stack>
</content>
<handlers>
<handler event="command" action="allTabs.pick(this);"/>
<handler event="click" button="1" action="gBrowser.removeTab(this._tab);"/>
<handler event="dragstart"><![CDATA[
event.dataTransfer.mozSetDataAt("application/x-moz-node", this._tab, 0);
]]></handler>
<handler event="dragover"><![CDATA[
let tab = event.dataTransfer.mozGetDataAt("application/x-moz-node", 0);
if (tab && tab.parentNode == gBrowser.tabContainer)
event.preventDefault();
]]></handler>
<handler event="drop"><![CDATA[
let tab = event.dataTransfer.mozGetDataAt("application/x-moz-node", 0);
if (tab && tab.parentNode == gBrowser.tabContainer) {
let newIndex = Array.indexOf(gBrowser.tabs, this._tab);
gBrowser.moveTabTo(tab, newIndex);
}
]]></handler>
</handlers>
</binding>
</bindings>

Просмотреть файл

@ -418,21 +418,17 @@ window[chromehidden~="toolbar"] toolbar:not(.toolbar-primary):not(.chromeclass-m
display: none;
}
/* ::::: Keyboard UI Panel ::::: */
.KUI-panel-closebutton {
-moz-binding: url("chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton-image");
}
/* ::::: Ctrl-Tab Panel ::::: */
:-moz-any(.ctrlTab-preview, .allTabs-preview) > html|img,
:-moz-any(.ctrlTab-preview, .allTabs-preview) > html|canvas {
.ctrlTab-preview > html|img,
.ctrlTab-preview > html|canvas {
min-width: inherit;
max-width: inherit;
min-height: inherit;
max-height: inherit;
}
.ctrlTab-favicon-container,
.allTabs-favicon-container {
.ctrlTab-favicon-container {
-moz-box-align: start;
%ifdef XP_MACOSX
-moz-box-pack: end;
@ -441,27 +437,15 @@ window[chromehidden~="toolbar"] toolbar:not(.toolbar-primary):not(.chromeclass-m
%endif
}
.ctrlTab-favicon,
.allTabs-favicon {
.ctrlTab-favicon {
width: 16px;
height: 16px;
}
/* ::::: Ctrl-Tab Panel ::::: */
.ctrlTab-preview {
-moz-binding: url("chrome://browser/content/browser-tabPreviews.xml#ctrlTab-preview");
}
/* ::::: All Tabs Panel ::::: */
.allTabs-preview {
-moz-binding: url("chrome://browser/content/browser-tabPreviews.xml#allTabs-preview");
}
#allTabs-tab-close-button {
-moz-binding: url("chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton-image");
margin: 0;
}
/* notification anchors should only be visible when their associated
notifications are */

Просмотреть файл

@ -1297,7 +1297,6 @@ var gBrowserInit = {
// Misc. inits.
CombinedStopReload.init();
allTabs.readPref();
TabsOnTop.init();
BookmarksMenuButton.init();
gPrivateBrowsingUI.init();
@ -1459,7 +1458,6 @@ var gBrowserInit = {
ctrlTab.readPref();
gPrefService.addObserver(ctrlTab.prefName, ctrlTab, false);
gPrefService.addObserver(allTabs.prefName, allTabs, false);
// Initialize the download manager some time after the app starts so that
// auto-resume downloads begin (such as after crashing or quitting with
@ -1650,7 +1648,6 @@ var gBrowserInit = {
// First clean up services initialized in gBrowserInit.onLoad (or those whose
// uninit methods don't depend on the services having been initialized).
allTabs.uninit();
CombinedStopReload.uninit();
@ -1690,7 +1687,6 @@ var gBrowserInit = {
Win7Features.onCloseWindow();
gPrefService.removeObserver(ctrlTab.prefName, ctrlTab);
gPrefService.removeObserver(allTabs.prefName, allTabs);
ctrlTab.uninit();
TabView.uninit();
gBrowserThumbnails.uninit();
@ -3799,7 +3795,6 @@ function BrowserToolboxCustomizeChange(aType) {
default:
gHomeButton.updatePersonalToolbarStyle();
BookmarksMenuButton.customizeChange();
allTabs.readPref();
}
}

Просмотреть файл

@ -396,29 +396,6 @@
</hbox>
</panel>
<panel id="allTabs-panel" hidden="true" norestorefocus="true" ignorekeys="true"
onmouseover="allTabs._updateTabCloseButton(event);">
<hbox id="allTabs-meta" align="center">
<spacer flex="1"/>
<textbox id="allTabs-filter"
tooltiptext="&allTabs.filter.emptyText;"
type="search"
oncommand="allTabs.filter();"/>
<spacer flex="1"/>
<toolbarbutton class="KUI-panel-closebutton"
oncommand="allTabs.close()"
tooltiptext="&closeCmd.label;"/>
</hbox>
<stack id="allTabs-stack">
<vbox id="allTabs-container"><hbox/></vbox>
<toolbarbutton id="allTabs-tab-close-button"
class="tabs-closebutton"
oncommand="allTabs.closeTab(event);"
tooltiptext="&closeCmd.label;"
style="visibility:hidden"/>
</stack>
</panel>
<!-- Bookmarks and history tooltip -->
<tooltip id="bhTooltip"/>

Просмотреть файл

@ -72,7 +72,6 @@ _BROWSER_FILES = \
head.js \
browser_typeAheadFind.js \
browser_keywordSearch.js \
browser_allTabsPanel.js \
browser_alltabslistener.js \
browser_bug304198.js \
title_test.svg \

Просмотреть файл

@ -1,162 +0,0 @@
function test() {
waitForExplicitFinish();
Services.prefs.setBoolPref(allTabs.prefName, true);
registerCleanupFunction(function () {
Services.prefs.clearUserPref(allTabs.prefName);
});
allTabs.init();
nextSequence();
}
var sequences = 3;
var chars = "ABCDEFGHI";
var closedTabs;
var history;
var steps;
var whenOpen = [
startSearch,
clearSearch, clearSearch,
closeTab,
moveTab,
closePanel,
];
var whenClosed = [
openPanel, openPanel, openPanel, openPanel, openPanel, openPanel,
closeTab, closeTab, closeTab,
moveTab, moveTab, moveTab,
selectTab, selectTab,
undoCloseTab,
openTab,
];
function rand(min, max) {
return min + Math.floor(Math.random() * (max - min + 1));
}
function pickOne(array) {
return array[rand(0, array.length - 1)];
}
function pickOneTab() {
var tab = pickOne(gBrowser.tabs);
return [tab, Array.indexOf(gBrowser.tabs, tab)];
}
function nextSequence() {
while (gBrowser.browsers.length > 1)
gBrowser.removeCurrentTab();
if (sequences-- <= 0) {
allTabs.close();
gBrowser.addTab();
gBrowser.removeCurrentTab();
finish();
return;
}
closedTabs = 0;
steps = rand(10, 20);
var initialTabs = "";
while (gBrowser.browsers.length < rand(3, 20)) {
let tabChar = pickOne(chars);
initialTabs += tabChar;
gBrowser.addTab("data:text/plain," + tabChar);
}
history = [initialTabs];
gBrowser.removeCurrentTab();
next();
}
function next() {
executeSoon(function () {
is(allTabs.previews.length, gBrowser.browsers.length,
history.join(", "));
if (steps-- <= 0) {
nextSequence();
return;
}
var step;
var rv;
do {
step = pickOne(allTabs.isOpen ? whenOpen : whenClosed);
info(step.name);
rv = step();
} while (rv === false);
history.push(step.name + (rv !== true && rv !== undefined ? " " + rv : ""));
});
}
function openPanel() {
if (allTabs.isOpen)
return false;
allTabs.panel.addEventListener("popupshown", function () {
allTabs.panel.removeEventListener("popupshown", arguments.callee, false);
next();
}, false);
allTabs.open();
return true;
}
function closePanel() {
allTabs.panel.addEventListener("popuphidden", function () {
allTabs.panel.removeEventListener("popuphidden", arguments.callee, false);
next();
}, false);
allTabs.close();
}
function closeTab() {
if (gBrowser.browsers.length == 1)
return false;
var [tab, index] = pickOneTab();
gBrowser.removeTab(tab);
closedTabs++;
next();
return index;
}
function startSearch() {
allTabs.filterField.value = pickOne(chars);
info(allTabs.filterField.value);
allTabs.filter();
next();
return allTabs.filterField.value;
}
function clearSearch() {
if (!allTabs.filterField.value)
return false;
allTabs.filterField.value = "";
allTabs.filter();
next();
return true;
}
function undoCloseTab() {
if (!closedTabs)
return false;
window.undoCloseTab(0);
closedTabs--;
next();
return true;
}
function selectTab() {
var [tab, index] = pickOneTab();
gBrowser.selectedTab = tab;
next();
return index;
}
function openTab() {
BrowserOpenTab();
next();
}
function moveTab() {
if (gBrowser.browsers.length == 1)
return false;
var [tab, currentIndex] = pickOneTab();
do {
var [, newIndex] = pickOneTab();
} while (newIndex == currentIndex);
gBrowser.moveTabTo(tab, newIndex);
next();
return currentIndex + "->" + newIndex;
}

Просмотреть файл

@ -9,7 +9,7 @@ function test() {
ctrlTabTest([2] , 1, 0);
ctrlTabTest([2, 3, 1], 2, 2);
ctrlTabTest([] , 5, 2);
ctrlTabTest([] , 4, 2);
{
let selectedIndex = gBrowser.tabContainer.selectedIndex;
@ -39,7 +39,7 @@ function test() {
gBrowser.addTab();
checkTabs(3);
ctrlTabTest([2, 1, 0], 9, 1);
ctrlTabTest([2, 1, 0], 7, 1);
gBrowser.addTab();
checkTabs(4);

Просмотреть файл

@ -585,7 +585,6 @@ just addresses the organization to follow, e.g. "This site is run by " -->
<!ENTITY identity.moreInfoLinkText "More Information…">
<!ENTITY allTabs.filter.emptyText "Search Tabs">
<!-- Name for the tabs toolbar as spoken by screen readers.
The word "toolbar" is appended automatically and should not be contained below! -->
<!ENTITY tabsToolbar.label "Browser tabs">

Двоичные данные
browser/themes/gnomestripe/KUI-close.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 393 B

Просмотреть файл

@ -1773,16 +1773,11 @@ richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-
margin-bottom: -2px;
}
#alltabs-button > .toolbarbutton-icon {
list-style-image: url("chrome://browser/skin/tabbrowser/alltabs.png");
margin: 2px 0 1px;
}
#alltabs-button[type="menu"] > .toolbarbutton-menu-dropmarker {
#alltabs-button > .toolbarbutton-menu-dropmarker {
margin-bottom: -2px;
}
#alltabs-button[type="menu"] > .toolbarbutton-icon {
#alltabs-button > .toolbarbutton-icon {
display: none;
}
@ -1836,20 +1831,9 @@ toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon {
display: -moz-box; /* display chevron icon in text mode */
}
/* ::::: Keyboard UI Panel ::::: */
/* Ctrl-Tab */
.KUI-panel-closebutton {
list-style-image: url(KUI-close.png);
}
.KUI-panel-closebutton > .toolbarbutton-icon {
margin: 0;
}
/* ::::: Ctrl-Tab and All Tabs Panels ::::: */
.ctrlTab-preview,
.allTabs-preview {
.ctrlTab-preview {
-moz-appearance: toolbarbutton;
}
@ -1858,22 +1842,17 @@ toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon {
}
.ctrlTab-preview:focus .tabPreview-canvas,
.ctrlTab-preview:hover .tabPreview-canvas,
.allTabs-preview:focus .tabPreview-canvas,
.allTabs-preview:hover .tabPreview-canvas {
.ctrlTab-preview:hover .tabPreview-canvas {
box-shadow: none;
}
.ctrlTab-favicon[src],
.allTabs-favicon[src] {
.ctrlTab-favicon[src] {
background-color: white;
width: 20px;
height: 20px;
padding: 2px;
}
/* Ctrl-Tab */
#ctrlTab-panel {
padding: 10px;
}
@ -1889,25 +1868,6 @@ toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon {
margin-top: 10px;
}
/* All Tabs */
#allTabs-panel {
padding-bottom: 10px;
}
#allTabs-meta {
padding: 5px;
}
#allTabs-filter {
-moz-margin-start: 36px;
-moz-margin-end: 0;
}
.allTabs-preview-label {
transform: translate(0, 2px);
}
/* Application button menu */
.splitmenu-menuitem {

Просмотреть файл

@ -30,7 +30,6 @@ browser.jar:
skin/classic/browser/identity-icons-https-ev.png
skin/classic/browser/identity-icons-https-mixed-active.png
skin/classic/browser/Info.png
skin/classic/browser/KUI-close.png
skin/classic/browser/mixed-content-blocked-16.png
skin/classic/browser/monitor.png
skin/classic/browser/monitor_16-10.png
@ -100,7 +99,6 @@ browser.jar:
skin/classic/browser/preferences/aboutPermissions.css (preferences/aboutPermissions.css)
skin/classic/browser/social/social.png (social/social.png)
skin/classic/browser/social/chat-close.png (social/chat-close.png)
skin/classic/browser/tabbrowser/alltabs.png (tabbrowser/alltabs.png)
skin/classic/browser/tabbrowser/connecting.png (tabbrowser/connecting.png)
skin/classic/browser/tabbrowser/loading.png (tabbrowser/loading.png)
skin/classic/browser/tabbrowser/tab.png (tabbrowser/tab.png)

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 192 B

Двоичные данные
browser/themes/pinstripe/KUI-close.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 393 B

Просмотреть файл

@ -2763,7 +2763,7 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
-moz-image-region: rect(0, 34px, 20px, 17px);
}
#TabsToolbar > #alltabs-button[type="menu"][open="true"]:not([disabled="true"]),
#TabsToolbar > #alltabs-button[open="true"]:not([disabled="true"]),
#TabsToolbar > #alltabs-button:not([disabled="true"]):hover:active {
-moz-image-region: rect(0, 51px, 20px, 34px);
}
@ -2778,7 +2778,7 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
-moz-image-region: rect(0, 68px, 40px, 34px);
}
#TabsToolbar > #alltabs-button[type="menu"][open="true"]:not([disabled="true"]),
#TabsToolbar > #alltabs-button[open="true"]:not([disabled="true"]),
#TabsToolbar > #alltabs-button:not([disabled="true"]):hover:active {
-moz-image-region: rect(0, 102px, 40px, 68px);
}
@ -2788,7 +2788,7 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
}
}
#alltabs-button[type="menu"] > .toolbarbutton-menu-dropmarker {
#alltabs-button > .toolbarbutton-menu-dropmarker {
display: none;
}
@ -3267,25 +3267,6 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
-moz-window-shadow: none;
}
.KUI-panel-closebutton {
list-style-image: url(KUI-close.png);
-moz-appearance: none;
border: none;
padding: 0;
width: 24px;
height: 24px;
}
.KUI-panel-closebutton:not(:hover) {
opacity: .6;
}
.KUI-panel-closebutton > .toolbarbutton-icon {
margin: 0;
}
/* ::::: Ctrl-Tab and All Tabs Panels ::::: */
/* Ctrl-Tab */
#ctrlTab-panel {
@ -3335,65 +3316,6 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
margin-top: .5em;
}
/* All Tabs */
#allTabs-panel {
padding-bottom: 10px;
-moz-appearance: none;
border: none;
background: -moz-dialog;
color: -moz-dialogText;
}
#allTabs-meta {
margin: 10px;
}
#allTabs-filter {
-moz-margin-start: 24px;
-moz-margin-end: 0;
}
#allTabs-tab-close-button > .toolbarbutton-icon {
margin: 0;
}
.allTabs-favicon[src] {
background-color: -moz-dialog;
width: 20px;
height: 20px;
padding-bottom: 4px;
-moz-padding-start: 4px;
border-bottom-left-radius: 4px;
}
.allTabs-favicon[src]:-moz-locale-dir(rtl) {
border-bottom-left-radius: 0;
border-bottom-right-radius: 4px;
}
.allTabs-preview:not(:focus) > * > .allTabs-favicon-container > .allTabs-favicon[src] {
width: 22px;
height: 22px;
padding-top: 2px;
-moz-padding-end: 2px;
margin-top: -2px;
-moz-margin-end: -2px;
}
.allTabs-preview-inner > .tabPreview-canvas {
background-color: rgb(60%,60%,60%);
box-shadow: 0 0 1.5px ThreeDShadow;
}
.allTabs-preview:not(:hover):not([closebuttonhover]) > html|canvas {
opacity: .8;
}
.allTabs-preview:focus > * > .allTabs-preview-inner {
box-shadow: @focusRingShadow@;
}
/* Add-on bar */
#addon-bar {

Просмотреть файл

@ -39,7 +39,6 @@ browser.jar:
skin/classic/browser/Info.png
skin/classic/browser/keyhole-circle.png
skin/classic/browser/KUI-background.png
skin/classic/browser/KUI-close.png
skin/classic/browser/menu-back.png
skin/classic/browser/menu-forward.png
skin/classic/browser/mixed-content-blocked-16.png

Двоичные данные
browser/themes/winstripe/KUI-close.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 393 B

Просмотреть файл

@ -318,7 +318,6 @@
padding-right: 1px;
}
#allTabs-panel,
#ctrlTab-panel {
background: transparent;
-moz-appearance: -moz-win-glass;

Просмотреть файл

@ -2010,28 +2010,22 @@ richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-
}
#alltabs-button {
list-style-image: url("chrome://browser/skin/tabbrowser/alltabs.png");
-moz-image-region: rect(0, 14px, 16px, 0);
}
#alltabs-button[type="menu"] {
list-style-image: url("chrome://browser/skin/toolbarbutton-dropdown-arrow.png");
-moz-image-region: auto;
}
%ifdef WINSTRIPE_AERO
:-moz-any(#TabsToolbar, #nav-bar[tabsontop=false], #toolbar-menubar) > #alltabs-button[type=menu]:-moz-system-metric(windows-compositor):not(:-moz-lwtheme),
:-moz-any(#TabsToolbar, #nav-bar[tabsontop=false], #toolbar-menubar) > toolbarpaletteitem > #alltabs-button[type=menu]:-moz-system-metric(windows-compositor):not(:-moz-lwtheme),
:-moz-any(#TabsToolbar, #nav-bar[tabsontop=false], #toolbar-menubar) > #alltabs-button:-moz-system-metric(windows-compositor):not(:-moz-lwtheme),
:-moz-any(#TabsToolbar, #nav-bar[tabsontop=false], #toolbar-menubar) > toolbarpaletteitem > #alltabs-button:-moz-system-metric(windows-compositor):not(:-moz-lwtheme),
%endif
#alltabs-button[type="menu"]:-moz-lwtheme-brighttext {
#alltabs-button:-moz-lwtheme-brighttext {
list-style-image: url("chrome://browser/skin/toolbarbutton-dropdown-arrow-inverted.png");
}
#alltabs-button[type="menu"] > .toolbarbutton-icon {
#alltabs-button > .toolbarbutton-icon {
margin: 0 2px;
}
#alltabs-button[type="menu"] > .toolbarbutton-menu-dropmarker {
#alltabs-button > .toolbarbutton-menu-dropmarker {
display: none;
}
@ -2426,25 +2420,6 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
background-color: rgba(27%,27%,27%,.65);
}
.KUI-panel-closebutton {
list-style-image: url(KUI-close.png);
-moz-appearance: none;
border: none;
padding: 0;
width: 24px;
height: 24px;
}
.KUI-panel-closebutton:not(:hover) {
opacity: .6;
}
.KUI-panel-closebutton > .toolbarbutton-icon {
margin: 0;
}
/* ::::: Ctrl-Tab and All Tabs Panels ::::: */
/* Ctrl-Tab */
#ctrlTab-panel {
@ -2495,60 +2470,6 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
margin-top: .5em;
}
/* All Tabs */
#allTabs-panel {
padding-bottom: 10px;
-moz-appearance: none;
border: none;
background: -moz-dialog;
color: -moz-dialogText;
}
#allTabs-meta {
margin: 10px;
}
#allTabs-filter {
-moz-margin-start: 24px;
-moz-margin-end: 0;
}
#allTabs-tab-close-button > .toolbarbutton-icon {
margin: 0;
}
.allTabs-favicon[src] {
background-color: -moz-dialog;
width: 22px;
height: 22px;
padding-top: 1px;
padding-bottom: 5px;
-moz-padding-start: 1px;
-moz-padding-end: 5px;
margin-top: -2px;
-moz-margin-start: -2px;
border-bottom-right-radius: 4px;
}
.allTabs-favicon[src]:-moz-locale-dir(rtl) {
border-bottom-right-radius: 0;
border-bottom-left-radius: 4px;
}
.allTabs-preview-inner > .tabPreview-canvas {
background-color: rgb(60%,60%,60%);
box-shadow: 0 0 1.5px ThreeDShadow;
}
.allTabs-preview:not(:hover):not([closebuttonhover]) > html|canvas {
opacity: .8;
}
.allTabs-preview:focus > * > .allTabs-preview-inner {
outline: 1px dotted -moz-dialogText;
}
/* Add-on bar */
#addon-bar {

Просмотреть файл

@ -35,7 +35,6 @@ browser.jar:
skin/classic/browser/identity-icons-https-mixed-active.png
skin/classic/browser/keyhole-forward-mask.svg
skin/classic/browser/KUI-background.png
skin/classic/browser/KUI-close.png
skin/classic/browser/livemark-folder.png
skin/classic/browser/menu-back.png
skin/classic/browser/menu-forward.png
@ -119,7 +118,6 @@ browser.jar:
skin/classic/browser/preferences/aboutPermissions.css (preferences/aboutPermissions.css)
skin/classic/browser/social/social.png (social/social.png)
skin/classic/browser/social/chat-close.png (social/chat-close.png)
skin/classic/browser/tabbrowser/alltabs.png (tabbrowser/alltabs.png)
skin/classic/browser/tabbrowser/newtab.png (tabbrowser/newtab.png)
skin/classic/browser/tabbrowser/newtab-inverted.png (tabbrowser/newtab-inverted.png)
skin/classic/browser/tabbrowser/connecting.png (tabbrowser/connecting.png)
@ -264,7 +262,6 @@ browser.jar:
skin/classic/aero/browser/identity-icons-https-mixed-active.png
skin/classic/aero/browser/keyhole-forward-mask.svg
skin/classic/aero/browser/KUI-background.png
skin/classic/aero/browser/KUI-close.png
skin/classic/aero/browser/livemark-folder.png (livemark-folder-aero.png)
skin/classic/aero/browser/menu-back.png (menu-back-aero.png)
skin/classic/aero/browser/menu-forward.png (menu-forward-aero.png)
@ -348,7 +345,6 @@ browser.jar:
skin/classic/aero/browser/preferences/aboutPermissions.css (preferences/aboutPermissions.css)
skin/classic/aero/browser/social/social.png (social/social.png)
skin/classic/aero/browser/social/chat-close.png (social/chat-close.png)
skin/classic/aero/browser/tabbrowser/alltabs.png (tabbrowser/alltabs.png)
skin/classic/aero/browser/tabbrowser/newtab.png (tabbrowser/newtab.png)
skin/classic/aero/browser/tabbrowser/newtab-inverted.png (tabbrowser/newtab-inverted.png)
skin/classic/aero/browser/tabbrowser/connecting.png (tabbrowser/connecting.png)

Двоичные данные
browser/themes/winstripe/tabbrowser/alltabs.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 584 B