すべてのタブを一度に閉じようとしていた時などの特別な場合の処理について、Tab Panoramaによってタブがグループ分けされている場合の「他のグループも含めたすべてのタブ」と「現在のグループのすべてのタブ」とで処理を分けるようにした

git-svn-id: http://www.cozmixng.org/repos/piro/treestyletab/trunk@7200 599a83e7-65a4-db11-8015-0010dcdd6dc2
This commit is contained in:
piro 2010-09-14 07:39:17 +00:00
parent 8427b2f595
commit b4d59e9614
4 changed files with 91 additions and 18 deletions

View File

@ -558,7 +558,7 @@ var TreeStyleTabService = {
if ('_onDragEnd' in aObserver) { // Firefox 3.5 - 3.6 if ('_onDragEnd' in aObserver) { // Firefox 3.5 - 3.6
eval('aObserver._onDragEnd = '+aObserver._onDragEnd.toSource().replace( eval('aObserver._onDragEnd = '+aObserver._onDragEnd.toSource().replace(
/([^\{\}\(\);]*this\.replaceTabWithWindow\()/, /([^\{\}\(\);]*this\.replaceTabWithWindow\()/,
'if (this.treeStyleTab.isDraggingAllTabs(draggedTab) || this.treeStyleTab.tabbarDNDObserver.canDragTabbar(arguments[0])) return; $1' 'if (this.treeStyleTab.isDraggingAllCurrentTabs(draggedTab) || this.treeStyleTab.tabbarDNDObserver.canDragTabbar(arguments[0])) return; $1'
).replace( ).replace(
'{', '{',
'{ var treeStyleTab = this.treeStyleTab;' '{ var treeStyleTab = this.treeStyleTab;'
@ -941,7 +941,7 @@ catch(e) {
return; return;
var draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0); var draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
if (sv.isDraggingAllTabs(draggedTab) || if (sv.isDraggingAllCurrentTabs(draggedTab) ||
sv.tabbarDNDObserver.canDragTabbar(aEvent)) sv.tabbarDNDObserver.canDragTabbar(aEvent))
return; return;
@ -2237,7 +2237,7 @@ catch(e) {
restoringTree : false, restoringTree : false,
getRestoringTabsCount : function TSTService_getRestoringTabsCount() getRestoringTabsCount : function TSTService_getRestoringTabsCount()
{ {
return this.getTabsArray(this.browser) return this.getAllTabsArray(this.browser)
.filter(function(aTab) { .filter(function(aTab) {
var owner = aTab.linkedBrowser; var owner = aTab.linkedBrowser;
var data = owner.__SS_data || // Firefox 3.6- var data = owner.__SS_data || // Firefox 3.6-

View File

@ -661,7 +661,7 @@ TreeStyleTabBrowser.prototype = {
'{ if (!this.treeStyleTab.warnAboutClosingTabSubtreeOf(this.selectedTab)) return;' '{ if (!this.treeStyleTab.warnAboutClosingTabSubtreeOf(this.selectedTab)) return;'
)); ));
let (tabs = this.getTabsArray(b)) { let (tabs = this.getAllTabsArray(b)) {
for each (let tab in tabs) for each (let tab in tabs)
{ {
this.initTab(tab); this.initTab(tab);
@ -908,7 +908,7 @@ TreeStyleTabBrowser.prototype = {
if (!this.getTreePref('tabbar.invertTabContents')) return; if (!this.getTreePref('tabbar.invertTabContents')) return;
window.setTimeout(function(aSelf) { window.setTimeout(function(aSelf) {
var b = aSelf.mTabBrowser; var b = aSelf.mTabBrowser;
var tabs = aAll ? aSelf.getTabsArray(b) : [b.selectedTab] ; var tabs = aAll ? aSelf.getAllTabsArray(b) : [b.selectedTab] ;
tabs.forEach(function(aTab) { tabs.forEach(function(aTab) {
aSelf.initTabContentsOrder(aTab); aSelf.initTabContentsOrder(aTab);
}); });
@ -1105,7 +1105,7 @@ TreeStyleTabBrowser.prototype = {
} }
} }
var tabs = this.getTabsArray(b); var tabs = this.getAllTabsArray(b);
tabs.forEach(function(aTab) { tabs.forEach(function(aTab) {
aTab.style.removeProperty(this.indentCSSProp); aTab.style.removeProperty(this.indentCSSProp);
aTab.style.removeProperty(this.collapseCSSProp); aTab.style.removeProperty(this.collapseCSSProp);
@ -1553,7 +1553,7 @@ TreeStyleTabBrowser.prototype = {
var b = this.mTabBrowser; var b = this.mTabBrowser;
delete b.tabContainer.treeStyleTab; delete b.tabContainer.treeStyleTab;
this.getTabsArray(b).forEach(function(aTab) { this.getAllTabsArray(b).forEach(function(aTab) {
this.stopTabIndentAnimation(aTab); this.stopTabIndentAnimation(aTab);
this.stopTabCollapseAnimation(aTab); this.stopTabCollapseAnimation(aTab);
this.destroyTab(aTab); this.destroyTab(aTab);
@ -1705,7 +1705,7 @@ TreeStyleTabBrowser.prototype = {
var b = this.mTabBrowser; var b = this.mTabBrowser;
var value = this.getPref(aPrefName); var value = this.getPref(aPrefName);
var tabContainer = b.mTabContainer; var tabContainer = b.mTabContainer;
var tabs = this.getTabsArray(b); var tabs = this.getAllTabsArray(b);
switch (aPrefName) switch (aPrefName)
{ {
case 'extensions.treestyletab.tabbar.position': case 'extensions.treestyletab.tabbar.position':
@ -2386,7 +2386,7 @@ TreeStyleTabBrowser.prototype = {
var old = aEvent.detail; var old = aEvent.detail;
if (old > tab._tPos) old--; if (old > tab._tPos) old--;
old = this.getTabsArray(b)[old]; old = this.getAllTabsArray(b)[old];
prev = this.getPreviousSiblingTab(old); prev = this.getPreviousSiblingTab(old);
next = this.getNextSiblingTab(old); next = this.getNextSiblingTab(old);
@ -2424,7 +2424,7 @@ TreeStyleTabBrowser.prototype = {
if (aOldPosition === void(0)) aOldPosition = aTab._tPos; if (aOldPosition === void(0)) aOldPosition = aTab._tPos;
var pos = this.getChildIndex(aTab, parent); var pos = this.getChildIndex(aTab, parent);
var oldPos = this.getChildIndex(this.getTabsArray(this.mTabBrowser)[aOldPosition], parent); var oldPos = this.getChildIndex(this.getAllTabsArray(this.mTabBrowser)[aOldPosition], parent);
var delta; var delta;
if (pos == oldPos) { // no move? if (pos == oldPos) { // no move?
return; return;
@ -3509,7 +3509,7 @@ TreeStyleTabBrowser.prototype = {
var newRoots = []; var newRoots = [];
var shouldClose = ( var shouldClose = (
aInfo.action & this.kACTION_IMPORT && aInfo.action & this.kACTION_IMPORT &&
this.getTabsArray(sourceBrowser).length == draggedTabs.length this.getAllTabsArray(sourceBrowser).length == draggedTabs.length
); );
var oldTabs = []; var oldTabs = [];
var newTabs = []; var newTabs = [];
@ -3716,13 +3716,18 @@ TreeStyleTabBrowser.prototype = {
} }
}, },
isDraggingAllTabs : function TSTBrowser_isDraggingAllTabs(aTab) isDraggingAllTabs : function TSTBrowser_isDraggingAllTabs(aTab, aTabs)
{ {
var actionInfo = { var actionInfo = {
action : this.kACTIONS_FOR_DESTINATION | this.kACTION_IMPORT action : this.kACTIONS_FOR_DESTINATION | this.kACTION_IMPORT
}; };
var tabsInfo = this.getDraggedTabsInfoFromOneTab(actionInfo, aTab); var tabsInfo = this.getDraggedTabsInfoFromOneTab(actionInfo, aTab);
return tabsInfo.draggedTabs.length == this.getTabsArray(this.mTabBrowser).length; return tabsInfo.draggedTabs.length == (aTabs || this.getAllTabsArray(this.mTabBrowser)).length;
},
isDraggingAllCurrentTabs : function TSTBrowser_isDraggingAllCurrentTabs(aTab)
{
return this.isDraggingAllTabs(aTab, this.getTabsArray(this.mTabBrowser));
}, },
/* commands */ /* commands */
@ -3755,7 +3760,7 @@ TreeStyleTabBrowser.prototype = {
resetAllTabs : function TSTBrowser_resetAllTabs(aPartChildren) resetAllTabs : function TSTBrowser_resetAllTabs(aPartChildren)
{ {
this.getTabsArray(this.mTabBrowser).forEach(function(aTab) { this.getAllTabsArray(this.mTabBrowser).forEach(function(aTab) {
this.resetTab(aTab, aPartChildren); this.resetTab(aTab, aPartChildren);
}, this); }, this);
}, },
@ -3775,7 +3780,7 @@ TreeStyleTabBrowser.prototype = {
} }
else { else {
this.removeTabbrowserAttribute(this.kALLOW_COLLAPSE); this.removeTabbrowserAttribute(this.kALLOW_COLLAPSE);
this.getTabsArray(this.browser).forEach(function(aTab) { this.getAllTabsArray(this.browser).forEach(function(aTab) {
this.updateTabIndent(aTab, 0, true); this.updateTabIndent(aTab, 0, true);
}, this); }, this);
} }

View File

@ -1222,7 +1222,7 @@ TreeStyleTabBrowserAutoHide.prototype = {
this.cancelDelayedShowForShortcut(); this.cancelDelayedShowForShortcut();
if ( if (
sv.getTabs(b).snapshotLength > 1 && sv.getTabsArray(b).length > 1 &&
!aEvent.altKey && !aEvent.altKey &&
TreeStyleTabService.accelKeyPressed TreeStyleTabService.accelKeyPressed
) { ) {

View File

@ -836,7 +836,7 @@ var TreeStyleTabUtils = {
.QueryInterface(Ci.nsIInterfaceRequestor) .QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation) .getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShell); .QueryInterface(Ci.nsIDocShell);
var tabs = this.getTabsArray(b); var tabs = this.getAllTabsArray(b);
for each (var tab in tabs) for each (var tab in tabs)
{ {
if (tab.linkedBrowser.docShell == docShell) if (tab.linkedBrowser.docShell == docShell)
@ -1016,6 +1016,23 @@ var TreeStyleTabUtils = {
).booleanValue; ).booleanValue;
}, },
/**
* Returns all tabs in the current group as a XPathResult.
* It includes tabs hidden by Tab Panorama.
*/
getAllTabs : function TSTUtils_getTabs(aTabBrowserChild) /* OBSOLETE */
{
var b = this.getTabBrowserFromChild(aTabBrowserChild);
return this.evaluateXPath(
'descendant::xul:tab',
b.mTabContainer
);
},
/**
* Returns all tabs in the current group as a XPathResult.
* It excludes tabs hidden by Tab Panorama.
*/
getTabs : function TSTUtils_getTabs(aTabBrowserChild) /* OBSOLETE */ getTabs : function TSTUtils_getTabs(aTabBrowserChild) /* OBSOLETE */
{ {
var b = this.getTabBrowserFromChild(aTabBrowserChild); var b = this.getTabBrowserFromChild(aTabBrowserChild);
@ -1025,12 +1042,29 @@ var TreeStyleTabUtils = {
); );
}, },
/**
* Returns all tabs in the current group as an array.
* It includes tabs hidden by Tab Panorama.
*/
getAllTabsArray : function TSTUtils_getAllTabsArray(aTabBrowserChild)
{
var b = this.getTabBrowserFromChild(aTabBrowserChild);
return Array.slice(b.mTabContainer.childNodes) ;
},
/**
* Returns all tabs in the current group as an array.
* It excludes tabs hidden by Tab Panorama.
*/
getTabsArray : function TSTUtils_getTabsArray(aTabBrowserChild) getTabsArray : function TSTUtils_getTabsArray(aTabBrowserChild)
{ {
var b = this.getTabBrowserFromChild(aTabBrowserChild); var b = this.getTabBrowserFromChild(aTabBrowserChild);
return b.visibleTabs || Array.slice(b.mTabContainer.childNodes) ; return b.visibleTabs || Array.slice(b.mTabContainer.childNodes) ;
}, },
/**
* Returns the first tab in the current group.
*/
getFirstTab : function TSTUtils_getFirstTab(aTabBrowserChild) getFirstTab : function TSTUtils_getFirstTab(aTabBrowserChild)
{ {
var b = this.getTabBrowserFromChild(aTabBrowserChild); var b = this.getTabBrowserFromChild(aTabBrowserChild);
@ -1038,6 +1072,9 @@ var TreeStyleTabUtils = {
return tabs ? tabs[0] : b.mTabContainer.firstChild; return tabs ? tabs[0] : b.mTabContainer.firstChild;
}, },
/**
* Returns the first visible, not collapsed, and not pinned tab.
*/
getFirstNormalTab : function TSTUtils_getFirstNormalTab(aTabBrowserChild) getFirstNormalTab : function TSTUtils_getFirstNormalTab(aTabBrowserChild)
{ {
var b = this.getTabBrowserFromChild(aTabBrowserChild); var b = this.getTabBrowserFromChild(aTabBrowserChild);
@ -1048,6 +1085,9 @@ var TreeStyleTabUtils = {
).singleNodeValue; ).singleNodeValue;
}, },
/**
* Returns the last tab in the current group.
*/
getLastTab : function TSTUtils_getLastTab(aTabBrowserChild) getLastTab : function TSTUtils_getLastTab(aTabBrowserChild)
{ {
var b = this.getTabBrowserFromChild(aTabBrowserChild); var b = this.getTabBrowserFromChild(aTabBrowserChild);
@ -1055,6 +1095,9 @@ var TreeStyleTabUtils = {
return tabs ? tabs[tabs.length-1] : b.mTabContainer.lastChild ; return tabs ? tabs[tabs.length-1] : b.mTabContainer.lastChild ;
}, },
/**
* Returns the next tab in the current group.
*/
getNextTab : function TSTUtils_getNextTab(aTab) getNextTab : function TSTUtils_getNextTab(aTab)
{ {
if (!aTab) return null; if (!aTab) return null;
@ -1069,6 +1112,9 @@ var TreeStyleTabUtils = {
return (tab && tab.localName == 'tab') ? tab : null ; return (tab && tab.localName == 'tab') ? tab : null ;
}, },
/**
* Returns the previous tab in the current group.
*/
getPreviousTab : function TSTUtils_getPreviousTab(aTab) getPreviousTab : function TSTUtils_getPreviousTab(aTab)
{ {
if (!aTab) return null; if (!aTab) return null;
@ -1083,6 +1129,9 @@ var TreeStyleTabUtils = {
return (tab && tab.localName == 'tab') ? tab : null ; return (tab && tab.localName == 'tab') ? tab : null ;
}, },
/**
* Returns the index of the specified tab, in the current group.
*/
getTabIndex : function TSTUtils_getTabIndex(aTab) getTabIndex : function TSTUtils_getTabIndex(aTab)
{ {
if (!aTab) return -1; if (!aTab) return -1;
@ -1090,6 +1139,9 @@ var TreeStyleTabUtils = {
return this.getTabsArray(b).indexOf(aTab); return this.getTabsArray(b).indexOf(aTab);
}, },
/**
* Returns the next not collapsed tab in the current group.
*/
getNextVisibleTab : function TSTUtils_getNextVisibleTab(aTab) getNextVisibleTab : function TSTUtils_getNextVisibleTab(aTab)
{ {
if (!aTab) return null; if (!aTab) return null;
@ -1106,6 +1158,9 @@ var TreeStyleTabUtils = {
return (index < tabs.length-1) ? tabs[index+1] : null ; return (index < tabs.length-1) ? tabs[index+1] : null ;
}, },
/**
* Returns the previous not collapsed tab in the current group.
*/
getPreviousVisibleTab : function TSTUtils_getPreviousVisibleTab(aTab) getPreviousVisibleTab : function TSTUtils_getPreviousVisibleTab(aTab)
{ {
if (!aTab) return null; if (!aTab) return null;
@ -1122,6 +1177,9 @@ var TreeStyleTabUtils = {
return (index > 0) ? tabs[index-1] : null ; return (index > 0) ? tabs[index-1] : null ;
}, },
/**
* Returns the last not collapsed tab in the current group.
*/
getLastVisibleTab : function TSTUtils_getLastVisibleTab(aTabBrowserChild) getLastVisibleTab : function TSTUtils_getLastVisibleTab(aTabBrowserChild)
{ {
var b = this.getTabBrowserFromChild(aTabBrowserChild); var b = this.getTabBrowserFromChild(aTabBrowserChild);
@ -1130,6 +1188,9 @@ var TreeStyleTabUtils = {
return tabs.length ? tabs[tabs.length-1] : null ; return tabs.length ? tabs[tabs.length-1] : null ;
}, },
/**
* Returns a XPathResult of not collapsed tabs in the current group.
*/
getVisibleTabs : function TSTUtils_getVisibleTabs(aTabBrowserChild) /* OBSOLETE */ getVisibleTabs : function TSTUtils_getVisibleTabs(aTabBrowserChild) /* OBSOLETE */
{ {
var b = this.getTabBrowserFromChild(aTabBrowserChild); var b = this.getTabBrowserFromChild(aTabBrowserChild);
@ -1143,6 +1204,9 @@ var TreeStyleTabUtils = {
return XPathResult; return XPathResult;
}, },
/**
* Returns an array of not collapsed tabs in the current group.
*/
getVisibleTabsArray : function TSTUtils_getVisibleTabsArray(aTabBrowserChild) getVisibleTabsArray : function TSTUtils_getVisibleTabsArray(aTabBrowserChild)
{ {
var b = this.getTabBrowserFromChild(aTabBrowserChild); var b = this.getTabBrowserFromChild(aTabBrowserChild);
@ -1154,6 +1218,10 @@ var TreeStyleTabUtils = {
tabs ; tabs ;
}, },
/**
* Returns the index of the specified tab, in the array of not collapsed
* tabs in the current group.
*/
getVisibleIndex : function TSTUtils_getVisibleIndex(aTab) getVisibleIndex : function TSTUtils_getVisibleIndex(aTab)
{ {
if (!aTab) return -1; if (!aTab) return -1;
@ -1459,7 +1527,7 @@ var TreeStyleTabUtils = {
var b = this.getTabBrowserFromChild(aTab); var b = this.getTabBrowserFromChild(aTab);
return ( return (
this.shouldCloseTabSubtreeOf(aTab) && this.shouldCloseTabSubtreeOf(aTab) &&
this.getDescendantTabs(aTab).length + 1 == this.getTabsArray(b).length this.getDescendantTabs(aTab).length + 1 == this.getAllTabsArray(b).length
); );
}, },
shouldCloseLastTabSubTreeOf : function() { return this.shouldCloseLastTabSubtreeOf.apply(this, arguments); }, // obsolete, for backward compatibility shouldCloseLastTabSubTreeOf : function() { return this.shouldCloseLastTabSubtreeOf.apply(this, arguments); }, // obsolete, for backward compatibility