TabShow/TabHideイベントに基づいてツリーの整合性を保つように
git-svn-id: http://www.cozmixng.org/repos/piro/treestyletab/trunk@7241 599a83e7-65a4-db11-8015-0010dcdd6dc2
This commit is contained in:
parent
2ef43fcb8e
commit
2e393aa333
@ -195,17 +195,6 @@ var TreeStyleTabService = {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('TabView' in window && TabView._initFrame) {
|
|
||||||
eval('TabView._initFrame = '+
|
|
||||||
TabView._initFrame.toSource().replace(
|
|
||||||
/(iframe.addEventListener\()/,
|
|
||||||
<![CDATA[
|
|
||||||
iframe.addEventListener('load', TreeStyleTabService, true);
|
|
||||||
$1]]>
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.overrideExtensionsPreInit(); // hacks.js
|
this.overrideExtensionsPreInit(); // hacks.js
|
||||||
|
|
||||||
this.registerTabFocusAllowance(this.defaultTabFocusAllowance);
|
this.registerTabFocusAllowance(this.defaultTabFocusAllowance);
|
||||||
@ -1323,31 +1312,6 @@ catch(e) {
|
|||||||
items[aIndex].style.paddingLeft = aTab.getAttribute(this.kNEST)+'em';
|
items[aIndex].style.paddingLeft = aTab.getAttribute(this.kNEST)+'em';
|
||||||
}, this);
|
}, this);
|
||||||
},
|
},
|
||||||
|
|
||||||
initTabView : function TSTService_initTabView()
|
|
||||||
{
|
|
||||||
var iframe = document.getElementById('tab-view');
|
|
||||||
iframe.removeEventListener('load', this, true);
|
|
||||||
|
|
||||||
var frame = iframe.contentWindow;
|
|
||||||
if (
|
|
||||||
!frame.Item ||
|
|
||||||
!frame.Item.prototype ||
|
|
||||||
!frame.Item.prototype.setParent ||
|
|
||||||
frame.Item.prototype.__treestyletab__setParent
|
|
||||||
)
|
|
||||||
return;
|
|
||||||
|
|
||||||
frame.Item.prototype.__treestyletab__setParent = frame.Item.prototype.setParent;
|
|
||||||
frame.Item.prototype.setParent = function(aParent) {
|
|
||||||
if (this.tab && this.parent && this.parent != aParent)
|
|
||||||
frame.parent.TreeStyleTabService
|
|
||||||
.getTabBrowserFromChild(this.tab)
|
|
||||||
.treeStyleTab
|
|
||||||
.onTabGroupModified(this.tab);
|
|
||||||
return this.__treestyletab__setParent.apply(this, arguments);
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
destroy : function TSTService_destroy()
|
destroy : function TSTService_destroy()
|
||||||
{
|
{
|
||||||
@ -1402,11 +1366,7 @@ catch(e) {
|
|||||||
return this.preInit();
|
return this.preInit();
|
||||||
|
|
||||||
case 'load':
|
case 'load':
|
||||||
if (aEvent.currentTarget == window || aEvent.currentTarget == document)
|
return this.init();
|
||||||
this.init();
|
|
||||||
else
|
|
||||||
this.initTabView();
|
|
||||||
return
|
|
||||||
|
|
||||||
case 'unload':
|
case 'unload':
|
||||||
return this.destroy();
|
return this.destroy();
|
||||||
|
@ -239,6 +239,8 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
this.tabsHash = {};
|
this.tabsHash = {};
|
||||||
this.tabStripPlaceHolder = null;
|
this.tabStripPlaceHolder = null;
|
||||||
|
|
||||||
|
this.tabVisibilityChangedTabs = [];
|
||||||
|
|
||||||
this.internallyTabMovingCount = 0;
|
this.internallyTabMovingCount = 0;
|
||||||
this.subTreeMovingCount = 0;
|
this.subTreeMovingCount = 0;
|
||||||
this.subTreeChildrenMovingCount = 0;
|
this.subTreeChildrenMovingCount = 0;
|
||||||
@ -277,6 +279,8 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
b.mTabContainer.addEventListener('TabOpen', this, true);
|
b.mTabContainer.addEventListener('TabOpen', this, true);
|
||||||
b.mTabContainer.addEventListener('TabClose', this, true);
|
b.mTabContainer.addEventListener('TabClose', this, true);
|
||||||
b.mTabContainer.addEventListener('TabMove', this, true);
|
b.mTabContainer.addEventListener('TabMove', this, true);
|
||||||
|
b.mTabContainer.addEventListener('TabShow', this, true);
|
||||||
|
b.mTabContainer.addEventListener('TabHide', this, true);
|
||||||
b.mTabContainer.addEventListener('SSTabRestoring', this, true);
|
b.mTabContainer.addEventListener('SSTabRestoring', this, true);
|
||||||
b.mTabContainer.addEventListener('SSTabRestored', this, true);
|
b.mTabContainer.addEventListener('SSTabRestored', this, true);
|
||||||
b.mTabContainer.addEventListener('TabPinned', this, true);
|
b.mTabContainer.addEventListener('TabPinned', this, true);
|
||||||
@ -1577,6 +1581,8 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
b.mTabContainer.removeEventListener('TabOpen', this, true);
|
b.mTabContainer.removeEventListener('TabOpen', this, true);
|
||||||
b.mTabContainer.removeEventListener('TabClose', this, true);
|
b.mTabContainer.removeEventListener('TabClose', this, true);
|
||||||
b.mTabContainer.removeEventListener('TabMove', this, true);
|
b.mTabContainer.removeEventListener('TabMove', this, true);
|
||||||
|
b.mTabContainer.removeEventListener('TabShow', this, true);
|
||||||
|
b.mTabContainer.removeEventListener('TabHide', this, true);
|
||||||
b.mTabContainer.removeEventListener('SSTabRestoring', this, true);
|
b.mTabContainer.removeEventListener('SSTabRestoring', this, true);
|
||||||
b.mTabContainer.removeEventListener('SSTabRestored', this, true);
|
b.mTabContainer.removeEventListener('SSTabRestored', this, true);
|
||||||
b.mTabContainer.removeEventListener('TabPinned', this, true);
|
b.mTabContainer.removeEventListener('TabPinned', this, true);
|
||||||
@ -1927,6 +1933,10 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
case 'TabMove':
|
case 'TabMove':
|
||||||
return this.onTabMove(aEvent);
|
return this.onTabMove(aEvent);
|
||||||
|
|
||||||
|
case 'TabShow':
|
||||||
|
case 'TabHide':
|
||||||
|
return this.onTabVisibilityChanged(aEvent);
|
||||||
|
|
||||||
case 'SSTabRestoring':
|
case 'SSTabRestoring':
|
||||||
return this.onTabRestoring(aEvent);
|
return this.onTabRestoring(aEvent);
|
||||||
|
|
||||||
@ -2494,10 +2504,13 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (newParent != parent) {
|
if (newParent != parent) {
|
||||||
if (newParent)
|
if (newParent) {
|
||||||
this.attachTabTo(aTab, newParent, { insertBefore : nextTab });
|
if (newParent.hidden == aTab.hidden)
|
||||||
else
|
this.attachTabTo(aTab, newParent, { insertBefore : nextTab });
|
||||||
|
}
|
||||||
|
else {
|
||||||
this.partTab(aTab);
|
this.partTab(aTab);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -2516,6 +2529,45 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onTabVisibilityChanged : function TSTBrowser_onTabVisibilityChanged(aEvent)
|
||||||
|
{
|
||||||
|
if (this.tabVisibilityChangedTimer) {
|
||||||
|
window.clearTimeout(this.tabVisibilityChangedTimer);
|
||||||
|
this.tabVisibilityChangedTimer = null;
|
||||||
|
}
|
||||||
|
this.tabVisibilityChangedTabs.push(aEvent.originalTarget);
|
||||||
|
this.tabVisibilityChangedTimer = window.setTimeout(function(aSelf) {
|
||||||
|
aSelf.tabVisibilityChangedTimer = null;
|
||||||
|
var tabs = aSelf.tabVisibilityChangedTabs;
|
||||||
|
aSelf.tabVisibilityChangedTabs = [];
|
||||||
|
aSelf.updateTreeByTabVisibility(tabs);
|
||||||
|
}, 0, this);
|
||||||
|
},
|
||||||
|
tabVisibilityChangedTimer : null,
|
||||||
|
tabVisibilityChangedTabs : [],
|
||||||
|
updateTreeByTabVisibility : function TSTBrowser_updateTreeByTabVisibility(aChangedTabs)
|
||||||
|
{
|
||||||
|
aChangedTabs = aChangedTabs || [];
|
||||||
|
|
||||||
|
var tabs = this.getAllTabsArray(this.mTabBrowser);
|
||||||
|
tabs.reverse().forEach(function(aTab) {
|
||||||
|
var parent = this.getParentTab(aTab);
|
||||||
|
if (parent && aTab.hidden != parent.hidden) {
|
||||||
|
this.collapseExpandTab(aTab, false, true);
|
||||||
|
let target = parent.hidden && aChangedTabs.indexOf(parent) > -1 ?
|
||||||
|
parent : aTab ;
|
||||||
|
this.partAllChildren(target, {
|
||||||
|
behavior : parent ?
|
||||||
|
this.getTreePref('closeParentBehavior') :
|
||||||
|
this.getTreePref('closeRootBehavior')
|
||||||
|
});
|
||||||
|
this.partTab(target);
|
||||||
|
}
|
||||||
|
if (!aTab.hidden && aChangedTabs.indexOf(aTab) > -1)
|
||||||
|
this.attachTabFromPosition(aTab, tabs.length-1);
|
||||||
|
}, this);
|
||||||
|
},
|
||||||
|
|
||||||
onTabRestoring : function TSTBrowser_onTabRestoring(aEvent)
|
onTabRestoring : function TSTBrowser_onTabRestoring(aEvent)
|
||||||
{
|
{
|
||||||
this.restoreStructure(aEvent.originalTarget);
|
this.restoreStructure(aEvent.originalTarget);
|
||||||
@ -3226,21 +3278,6 @@ TreeStyleTabBrowser.prototype = {
|
|||||||
{
|
{
|
||||||
this.removeTabbrowserAttribute(this.kPRINT_PREVIEW);
|
this.removeTabbrowserAttribute(this.kPRINT_PREVIEW);
|
||||||
},
|
},
|
||||||
|
|
||||||
onTabGroupModified : function TSTBrowser_onTabGroupModified(aTab)
|
|
||||||
{
|
|
||||||
window.setTimeout(function(aSelf) {
|
|
||||||
if (aTab.hasAttribute(aSelf.kREMOVED))
|
|
||||||
return;
|
|
||||||
aSelf.collapseExpandTab(aTab, false, true);
|
|
||||||
aSelf.partAllChildren(aTab, {
|
|
||||||
behavior : aSelf.getParentTab(aTab) ?
|
|
||||||
aSelf.getTreePref('closeParentBehavior') :
|
|
||||||
aSelf.getTreePref('closeRootBehavior')
|
|
||||||
});
|
|
||||||
aSelf.partTab(aTab);
|
|
||||||
}, 0, this);
|
|
||||||
},
|
|
||||||
|
|
||||||
/* drag and drop */
|
/* drag and drop */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user