Bug 1499227 - Trigger multiselect on mousedown event instead of on click event. r=jaws

Differential Revision: https://phabricator.services.mozilla.com/D9359

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Abdoulaye O. Ly 2018-10-24 17:26:24 +00:00
parent 4d80cf877a
commit 31d61afe8c
2 changed files with 47 additions and 47 deletions

View File

@ -2314,11 +2314,8 @@
<handler event="mousedown" phase="capturing">
<![CDATA[
if (event.button == 0 && !this.selected && this.multiselected) {
gBrowser.lockClearMultiSelectionOnce();
}
let tabContainer = this.parentNode;
if (tabContainer._closeTabByDblclick &&
event.button == 0 &&
event.detail == 1) {
@ -2327,21 +2324,45 @@
if (this.selected) {
this.style.MozUserFocus = "ignore";
} else {
// When browser.tabs.multiselect config is set to false,
// then we ignore the state of multi-selection keys (Ctrl/Cmd).
const tabSelectionToggled = tabContainer._multiselectEnabled &&
(event.getModifierState("Accel") || event.shiftKey);
if (this.mOverCloseButton || this._overPlayingIcon || tabSelectionToggled) {
} else if (this.mOverCloseButton || this._overPlayingIcon) {
// Prevent tabbox.xml from selecting the tab.
event.stopPropagation();
}
}
if (event.button == 1) {
gBrowser.warmupTab(gBrowser._findTabToBlurTo(this));
}
if (event.button == 0 && tabContainer._multiselectEnabled) {
let shiftKey = event.shiftKey;
let accelKey = event.getModifierState("Accel");
if (shiftKey) {
const lastSelectedTab = gBrowser.lastMultiSelectedTab;
if (!accelKey) {
gBrowser.selectedTab = lastSelectedTab;
// Make sure selection is cleared when tab-switch doesn't happen.
gBrowser.clearMultiSelectedTabs(false);
}
gBrowser.addRangeToMultiSelectedTabs(lastSelectedTab, this);
// Prevent tabbox.xml from selecting the tab.
event.stopPropagation();
} else if (accelKey) {
// Ctrl (Cmd for mac) key is pressed
if (this.multiselected) {
gBrowser.removeFromMultiSelectedTabs(this, true);
} else if (this != gBrowser.selectedTab) {
gBrowser.addToMultiSelectedTabs(this, false);
gBrowser.lastMultiSelectedTab = this;
}
// Prevent tabbox.xml from selecting the tab.
event.stopPropagation();
} else if (!this.selected && this.multiselected) {
gBrowser.lockClearMultiSelectionOnce();
}
}
]]>
</handler>
<handler event="mouseup">
@ -2353,43 +2374,21 @@
</handler>
<handler event="click" button="0"><![CDATA[
let tabContainer = this.parentNode;
if (tabContainer._multiselectEnabled) {
let shiftKey = event.shiftKey;
let accelKey = event.getModifierState("Accel");
if (shiftKey) {
const lastSelectedTab = gBrowser.lastMultiSelectedTab;
if (!accelKey) {
gBrowser.selectedTab = lastSelectedTab;
if (event.getModifierState("Accel") || event.shiftKey) {
return;
}
// Make sure selection is cleared when tab-switch doesn't happen.
gBrowser.clearMultiSelectedTabs(false);
}
gBrowser.addRangeToMultiSelectedTabs(lastSelectedTab, this);
return;
}
if (accelKey) {
// Ctrl (Cmd for mac) key is pressed
if (this.multiselected) {
gBrowser.removeFromMultiSelectedTabs(this, true);
} else if (this != gBrowser.selectedTab) {
gBrowser.addToMultiSelectedTabs(this, false);
gBrowser.lastMultiSelectedTab = this;
}
return;
}
if (gBrowser.multiSelectedTabsCount > 0 &&
!this.mOverCloseButton &&
!this._overPlayingIcon) {
// Tabs were previously multi-selected and user clicks on a tab
// without holding Ctrl/Cmd Key
const overCloseButton = event.originalTarget.getAttribute("anonid") == "close-button";
if (gBrowser.multiSelectedTabsCount > 0 && !overCloseButton && !this._overPlayingIcon) {
// Tabs were previously multi-selected and user clicks on a tab
// without holding Ctrl/Cmd Key
// Force positional attributes to update when the
// target (of the click) is the "active" tab.
let updatePositionalAttr = gBrowser.selectedTab == this;
// Force positional attributes to update when the
// target (of the click) is the "active" tab.
let updatePositionalAttr = gBrowser.selectedTab == this;
gBrowser.clearMultiSelectedTabs(updatePositionalAttr);
}
gBrowser.clearMultiSelectedTabs(updatePositionalAttr);
}
if (this._overPlayingIcon) {

View File

@ -48,7 +48,8 @@ add_task(async function usingTabCloseButton() {
is(gBrowser.multiSelectedTabsCount, 2, "Two multiselected tabs");
// Closing a selected tab
let tab2CloseBtn = document.getAnonymousElementByAttribute(tab1, "anonid", "close-button");
let tab2CloseBtn = document.getAnonymousElementByAttribute(tab2, "anonid", "close-button");
tab2.mOverCloseButton = true;
let tab1Closing = BrowserTestUtils.waitForTabClosing(tab1);
let tab2Closing = BrowserTestUtils.waitForTabClosing(tab2);
tab2CloseBtn.click();