Skip to content

Commit

Permalink
Bug 2555: dblclick to close selected tab?
Browse files Browse the repository at this point in the history
  • Loading branch information
Hector Zhao committed Jan 5, 2018
1 parent 2d163e9 commit cf36301
Showing 1 changed file with 48 additions and 3 deletions.
51 changes: 48 additions & 3 deletions extension/bootstrap.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
const Cu = Components.utils;
const { classes: Cc, utils: Cu } = Components;

Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
"resource:///modules/CustomizableUI.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");

XPCOMUtils.defineLazyGetter(this, "CETracking", () => {
try {
return Cc["@mozilla.com.cn/tracking;1"].getService().wrappedJSObject;
} catch (ex) {
console.error(ex);
return null;
}
});

this.tabTweak = {
_debug: false,

Expand All @@ -21,6 +30,8 @@ this.tabTweak = {
]
},

_mousedownSinceSelect: new WeakMap(),

_matchStack(aType, aStack) {
return this._expectedStacks[aType].some(aExpected => {
let expected = aExpected.slice();
Expand All @@ -44,18 +55,48 @@ this.tabTweak = {
},

handleEvent(evt) {
let count;
let tab;
let win = evt.target.ownerGlobal;

switch (evt.type) {
case "dblclick":
if (evt.button !== 0 || evt.target.localName !== "tab") {
return;
break;
}

let tab = evt.target;
tab = evt.target;
if (tab) {
let status = "unknown";
// get mousedown count before it is reset by "select" from removeTab
count = this._mousedownSinceSelect.get(win);

tab.ownerGlobal.gBrowser.removeTab(tab);

if (isNaN(count)) {
status = "nan";
} else {
status = count > 1 ? `selected` : "other";
}

if (CETracking && CETracking.track) {
CETracking.track(`ttk-dblclick-${status}`);
}
}
break;
case "mousedown":
if (evt.button !== 0 || evt.target.localName !== "tab") {
break;
}

tab = evt.target;
if (tab && tab.selected) {
count = this._mousedownSinceSelect.get(win) || 0;
this._mousedownSinceSelect.set(win, count + 1);
}
break;
case "select":
this._mousedownSinceSelect.set(win, 0);
break;
case "MozAfterPaint":
win.removeEventListener(evt.type, this);
Expand Down Expand Up @@ -93,6 +134,8 @@ this.tabTweak = {

if (win.gBrowser && win.gBrowser.tabContainer) {
win.gBrowser.tabContainer.removeEventListener("dblclick", this);
win.gBrowser.tabContainer.removeEventListener("mousedown", this, true);
win.gBrowser.tabContainer.removeEventListener("select", this);
}

if (win.SidebarUI) {
Expand Down Expand Up @@ -130,6 +173,8 @@ this.tabTweak = {

if (win.gBrowser && win.gBrowser.tabContainer) {
win.gBrowser.tabContainer.addEventListener("dblclick", this);
win.gBrowser.tabContainer.addEventListener("mousedown", this, true);
win.gBrowser.tabContainer.addEventListener("select", this);
}

if (win.SidebarUI) {
Expand Down

0 comments on commit cf36301

Please sign in to comment.