Skip to content

Commit

Permalink
Added #217 Middle-click on a tab options
Browse files Browse the repository at this point in the history
  • Loading branch information
traxium committed Aug 13, 2017
1 parent 8ce0b21 commit 6edca05
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 13 deletions.
47 changes: 34 additions & 13 deletions bootstrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,8 @@ function startup(data, reason)
Services.prefs.getDefaultBranch(null).setBoolPref('extensions.tabtree.auto-hide-when-normal', false); // #40 #80
Services.prefs.getDefaultBranch(null).setBoolPref('extensions.tabtree.auto-hide-when-only-one-tab', true); // #31
Services.prefs.getDefaultBranch(null).setBoolPref('extensions.tabtree.tab-numbers', false); // #90 (Show tab numbers in tab titles)
// 0 - close tab, 1 - do nothing, 2 - close tab and all children, 3 - close all children
Services.prefs.getDefaultBranch(null).setIntPref('extensions.tabtree.middle-click-tab', false); // #217 Close Tree of Tabs on Middle-Click

// migration code :
try {
Expand Down Expand Up @@ -573,6 +575,23 @@ var windowListener = {
aDOMWindow.focusAndSelectUrlBar();
};

const closeTabAndAllChildren = function (tab) {
const tPos = tab._tPos;
const lvl = ss.getTabValue(tab, 'ttLevel');
while (ss.getTabValue(g.tabs[tPos+1], 'ttLevel') > lvl) {
g.removeTab(g.tabs[tPos+1]);
}
g.removeTab(g.tabs[tPos]);
};

const closeAllChildren = function (tab) {
const tPos = tab._tPos;
const lvl = ss.getTabValue(tab, 'ttLevel');
while (ss.getTabValue(g.tabs[tPos+1], 'ttLevel') > lvl) {
g.removeTab(g.tabs[tPos+1]);
}
};

//////////////////// TITLE BAR STANDARD BUTTONS (Minimize, Restore/Maximize, Close) ////////////////////////////
// We can't use 'window.load' event here, because it always shows windowState==='STATE_NORMAL' even when the actual state is 'STATE_MAXIMIZED'

Expand Down Expand Up @@ -2951,8 +2970,19 @@ var windowListener = {
aDOMWindow.openUILinkIn(aDOMWindow.BROWSER_NEW_TAB_URL, event.shiftKey ? "window" : "tab");
}
} else { // on a tab
let tPos = idx + tt.nPinned;
g.removeTab(g.tabs[tPos]);
const tab = g.tabs[idx + tt.nPinned];
switch (Services.prefs.getIntPref("extensions.tabtree.middle-click-tab")) {
case 1: // do nothing
break;
case 2: // close tab + subtree
closeTabAndAllChildren(tab);
break;
case 3: // close subtree
closeAllChildren(tab);
break;
default: // close tab
g.removeTab(tab);
}
}
}
}, false);
Expand Down Expand Up @@ -3007,24 +3037,15 @@ var windowListener = {
//menuItemCloseTree.setAttribute('label', stringBundle.GetStringFromName('close_this_tree'));
menuItemCloseTree.addEventListener('command', function (event) {
let tab = aDOMWindow.TabContextMenu.contextTab;
let tPos = tab._tPos;
let lvl = ss.getTabValue(tab, 'ttLevel');
while (ss.getTabValue(g.tabs[tPos+1], 'ttLevel') > lvl) {
g.removeTab(g.tabs[tPos+1]);
}
g.removeTab(g.tabs[tPos]);
closeTabAndAllChildren(tab);
}, false);

let menuItemCloseChildren = aDOMWindow.document.createElement('menuitem'); // removed in unloadFromWindow()
menuItemCloseChildren.id = 'tt-context-close-children';
//menuItemCloseChildren.setAttribute('label', stringBundle.GetStringFromName('close_children'));
menuItemCloseChildren.addEventListener('command', function (event) {
let tab = aDOMWindow.TabContextMenu.contextTab;
let tPos = tab._tPos;
let lvl = ss.getTabValue(tab, 'ttLevel');
while (ss.getTabValue(g.tabs[tPos+1], 'ttLevel') > lvl) {
g.removeTab(g.tabs[tPos+1]);
}
closeAllChildren(tab);
}, false);

let menuItemReloadTree = aDOMWindow.document.createElement('menuitem'); // removed in unloadFromWindow()
Expand Down
6 changes: 6 additions & 0 deletions locale/en-US/options.dtd
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,9 @@
<!ENTITY flatten.desc "Reset all the tabs to level 0">
<!ENTITY flatten.label "Your tree structure will be lost">
<!ENTITY flatten.confirm "You can\'t undo this operation. Continue anyway?">
<!ENTITY middle-click-tab.title "Middle-click on tab:">
<!ENTITY middle-click-tab.desc "(the first choice by default)">
<!ENTITY middle-click-tab.0 "close tab">
<!ENTITY middle-click-tab.1 "do nothing">
<!ENTITY middle-click-tab.2 "close tab and all children">
<!ENTITY middle-click-tab.3 "close all children">
6 changes: 6 additions & 0 deletions locale/fr-FR/options.dtd
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,9 @@
<!ENTITY flatten.desc "Réinitialise tous les onglets au niveau 0">
<!ENTITY flatten.label "Votre structure d'arbre sera perdue">
<!ENTITY flatten.confirm "Vous ne pourrez pas annuler cette opération. Continuer malgré tout?">
<!ENTITY middle-click-tab.title "Middle-click on tab:">
<!ENTITY middle-click-tab.desc "(the first choice by default)">
<!ENTITY middle-click-tab.0 "close tab">
<!ENTITY middle-click-tab.1 "do nothing">
<!ENTITY middle-click-tab.2 "close tab and all children">
<!ENTITY middle-click-tab.3 "close all children">
6 changes: 6 additions & 0 deletions locale/pl-PL/options.dtd
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,9 @@
<!ENTITY flatten.desc "Reset all the tabs to level 0">
<!ENTITY flatten.label "Your tree structure will be lost">
<!ENTITY flatten.confirm "You can\'t undo this operation. Continue anyway?">
<!ENTITY middle-click-tab.title "Middle-click on tab:">
<!ENTITY middle-click-tab.desc "(the first choice by default)">
<!ENTITY middle-click-tab.0 "close tab">
<!ENTITY middle-click-tab.1 "do nothing">
<!ENTITY middle-click-tab.2 "close tab and all children">
<!ENTITY middle-click-tab.3 "close all children">
6 changes: 6 additions & 0 deletions locale/ru-RU/options.dtd
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,9 @@
<!ENTITY flatten.desc "Установить нулевой отступ для всех вкладок">
<!ENTITY flatten.label "Структура дерева вкладок будет утрачена">
<!ENTITY flatten.confirm "Эту операцию нельзя отменить. Всё равно продолжить?">
<!ENTITY middle-click-tab.title "Middle-click по вкладке:">
<!ENTITY middle-click-tab.desc "(первый вариант по умолчанию)">
<!ENTITY middle-click-tab.0 "закрыть вкладку">
<!ENTITY middle-click-tab.1 "ничего не делать">
<!ENTITY middle-click-tab.2 "закрыть вкладку и все её дочерние вкладки">
<!ENTITY middle-click-tab.3 "закрыть только все дочерние вкладки">
10 changes: 10 additions & 0 deletions options.xul
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,16 @@
<radio value="2" label="&dblclick.pin;"/>
</radiogroup>
</setting>
<setting type="menulist" pref="extensions.tabtree.middle-click-tab" title="&middle-click-tab.title;" desc="&middle-click-tab.desc;">
<menulist>
<menupopup>
<menuitem value="0" label="&middle-click-tab.0;"/>
<menuitem value="1" label="&middle-click-tab.1;"/>
<menuitem value="2" label="&middle-click-tab.2;"/>
<menuitem value="3" label="&middle-click-tab.3;"/>
</menupopup>
</menulist>
</setting>
<setting type="integer" pref="extensions.tabtree.delay" title="&delay.title;" desc="&delay.desc;" />
<setting type="menulist" pref="extensions.tabtree.middle-click-tabbar" title="&middle-click-tabbar.title;" desc="&middle-click-tabbar.desc;">
<menulist>
Expand Down

0 comments on commit 6edca05

Please sign in to comment.