[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="&copytaburl.label;" accesskey="&copytaburl.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