[Pkg-mozext-commits] [tabmixplus] 07/147: Keep Undo close tab menu open, close it when user click outside the menu
David Prévot
taffit at moszumanska.debian.org
Sat Aug 5 15:27:31 UTC 2017
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository tabmixplus.
commit 75a0d75450ed68fd08b86208a9cc0d15ff88d737
Author: onemen <tabmix.onemen at gmail.com>
Date: Mon Oct 24 13:21:33 2016 +0300
Keep Undo close tab menu open, close it when user click outside the menu
---
chrome/content/click/click.js | 3 +-
chrome/content/session/sessionStore.js | 75 +++++++++++++++++++++++-----------
chrome/content/tabmix.xul | 17 ++++----
3 files changed, 63 insertions(+), 32 deletions(-)
diff --git a/chrome/content/click/click.js b/chrome/content/click/click.js
index d994e71..e864ba1 100644
--- a/chrome/content/click/click.js
+++ b/chrome/content/click/click.js
@@ -909,7 +909,8 @@ var TabmixAllTabs = {
var menuItem = popup.firstChild;
if (menuItem.id.indexOf("btn_tabslist") != -1)
break;
- menuItem.removeEventListener("click", TMP_ClosedTabs.checkForMiddleClick, false);
+ menuItem.removeEventListener("command", TMP_ClosedTabs, false);
+ menuItem.removeEventListener("click", TMP_ClosedTabs, false);
popup.removeChild(menuItem);
}
diff --git a/chrome/content/session/sessionStore.js b/chrome/content/session/sessionStore.js
index b9e4072..6a1f30b 100644
--- a/chrome/content/session/sessionStore.js
+++ b/chrome/content/session/sessionStore.js
@@ -1,3 +1,4 @@
+/* exported TMP_ClosedTabs */
"use strict";
/*
@@ -330,6 +331,10 @@ var TMP_ClosedTabs = {
/* .......... functions for closedtabs list menu and context menu .......... */
+ get keepMenuOpen() {
+ return true;
+ },
+
populateUndoSubmenu: function ct_populateUndoSubmenu(aPopup) {
/* eslint-disable tabmix/balanced-listeners */
if (TabmixAllTabs.isAfterCtrlClick(aPopup.parentNode))
@@ -376,8 +381,9 @@ var TMP_ClosedTabs = {
}
m.setAttribute("class", "menuitem-iconic bookmark-item menuitem-with-favicon");
m.setAttribute("value", i);
- m.addEventListener("command", TMP_ClosedTabs.restoreCommand, false);
- m.addEventListener("click", TMP_ClosedTabs.checkForMiddleClick, false);
+ m.setAttribute("closemenu", this.keepMenuOpen ? "none" : "auto");
+ m.addEventListener("command", this, false);
+ m.addEventListener("click", this, false);
if (i === 0)
m.setAttribute("key", "key_undoCloseTab");
aPopup.appendChild(m);
@@ -395,9 +401,7 @@ var TMP_ClosedTabs = {
m.setAttribute("label", TabmixSvc.getString("undoclosetab.clear.label"));
m.setAttribute("value", -1);
addKey(m, "clearClosedTabs");
- m.addEventListener("command", function() {
- TMP_ClosedTabs.restoreTab('original', -1);
- });
+ m.addEventListener("command", this);
// "Restore All Tabs"
m = aPopup.appendChild(document.createElement("menuitem"));
@@ -405,36 +409,61 @@ var TMP_ClosedTabs = {
m.setAttribute("label", gNavigatorBundle.getString("menuRestoreAllTabs.label"));
m.setAttribute("value", -2);
addKey(m, "ucatab");
- m.addEventListener("command", function() {
- TMP_ClosedTabs.restoreTab('original', -2);
- });
+ m.addEventListener("command", this);
return true;
/* eslint-enable tabmix/balanced-listeners */
},
- restoreCommand: function(aEvent) {
- let index = aEvent.originalTarget.getAttribute("value");
- if (index < 0) {
- return;
+ handleEvent: function(event) {
+ switch (event.type) {
+ case "click":
+ this.checkForMiddleClick(event);
+ break;
+ case "command":
+ this.restoreCommand(event);
+ break;
}
- TMP_ClosedTabs.restoreTab("original", index);
+ },
+
+ restoreCommand: function(aEvent) {
+ this.doCommand("restoreTab", "original", aEvent.originalTarget);
},
checkForMiddleClick: function ct_checkForMiddleClick(aEvent) {
if (aEvent.button != 1)
return;
- let index = aEvent.originalTarget.getAttribute("value");
- if (index < 0)
- return;
+ const deleteItem = Tabmix.prefs.getBoolPref("middleclickDelete");
+ const where = deleteItem ? "delete" : "tab";
+ this.doCommand("restoreTab", where, aEvent.originalTarget, deleteItem);
+ },
- let deleteItem = Tabmix.prefs.getBoolPref("middleclickDelete");
- TMP_ClosedTabs.restoreTab(deleteItem ? "delete" : "tab", index);
- if (deleteItem && TMP_ClosedTabs.count > 0) {
- aEvent.stopPropagation();
- TMP_ClosedTabs.populateUndoSubmenu(aEvent.originalTarget.parentNode);
- } else {
- closeMenus(aEvent.target);
+ contextMenuOnPopupShowing: function(popup) {
+ const val = this.keepMenuOpen ? "single" : "auto";
+ Array.prototype.forEach.call(popup.childNodes, item => {
+ item.setAttribute("closemenu", val);
+ });
+ return popup.triggerNode.value >= 0;
+ },
+
+ contextMenuOnCommand: function(event) {
+ const menuItem = event.originalTarget;
+ const [command, where] = menuItem.getAttribute("commandData").split(",");
+ const popup = menuItem.parentNode;
+ this.doCommand(command, where, popup.triggerNode);
+ },
+
+ doCommand: function(command, where, item, keepMenuOpen) {
+ const popup = item.parentNode;
+ const index = Number(item.value);
+ this[command](where || index, index);
+ const rePopulate = (keepMenuOpen || this.keepMenuOpen) && this.count > 0;
+ if (rePopulate) {
+ if (command == "restoreTab") {
+ this.populateUndoSubmenu(popup);
+ }
+ } else if (item.getAttribute("closemenu") == "none") {
+ closeMenus(popup);
}
},
diff --git a/chrome/content/tabmix.xul b/chrome/content/tabmix.xul
index 203d369..c006913 100644
--- a/chrome/content/tabmix.xul
+++ b/chrome/content/tabmix.xul
@@ -300,23 +300,24 @@
</menupopup>
<!-- context menu for undoclosetab menupopup -->
<menupopup id="tm_undocloseContextMenu"
- onpopupshowing="return this.triggerNode.value >= 0;">
+ oncommand="TMP_ClosedTabs.contextMenuOnCommand(event);"
+ onpopupshowing="return TMP_ClosedTabs.contextMenuOnPopupShowing(this);">
<menuitem id="tmOpen" label="&restoreincurrent.label;" accesskey="&restoreincurrent.accesskey;"
- oncommand="TMP_ClosedTabs.restoreTab('current', this.parentNode.triggerNode.value);"/>
+ commandData="restoreTab,current"/>
<menuitem id="tmOpenInNewWindow" label="&restoreinwin.label;" accesskey="&restoreinwin.accesskey;"
- oncommand="TMP_ClosedTabs.restoreTab('window', this.parentNode.triggerNode.value);"/>
+ commandData="restoreTab,window"/>
<menuitem id="tmOpenInNewTab" label="&restoreintab.label;" accesskey="&restoreintab.accesskey;"
- oncommand="TMP_ClosedTabs.restoreTab('tab', this.parentNode.triggerNode.value);"/>
+ commandData="restoreTab,tab"/>
<menuitem id="tmRestoreTab" label="&restoretab.label;" accesskey="&restoretab.accesskey;"
- oncommand="TMP_ClosedTabs.restoreTab('original', this.parentNode.triggerNode.value);" default="true"/>
+ commandData="restoreTab,original" default="true"/>
<menuseparator id="tmpre-bookmarks-separator"/>
<menuitem id="tmAddBookmark" label="&bookmark.label;" accesskey="&bookmark.accesskey;"
- oncommand="TMP_ClosedTabs.addBookmarks(this.parentNode.triggerNode.value);"/>
+ commandData="addBookmarks"/>
<menuitem id="tmcopyTabUrl" label="©taburl.label;" accesskey="©taburl.accesskey;"
- oncommand="TMP_ClosedTabs.copyTabUrl(this.parentNode.triggerNode.value);"/>
+ commandData="copyTabUrl"/>
<menuseparator id="tmpost-bookmarks-separator"/>
<menuitem id="tm_delete" label="&deletelist.label;" accesskey="&deletelist.accesskey;"
- oncommand="TMP_ClosedTabs.restoreTab('delete', this.parentNode.triggerNode.value);"/>
+ commandData="restoreTab,delete"/>
</menupopup>
<!-- context menu for undoclosewindow menupopup for use with sessionRestore -->
<menupopup id="tm_undocloseWindowContextMenu"
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/tabmixplus.git
More information about the Pkg-mozext-commits
mailing list