mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 06:45:42 +00:00
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:
parent
4d80cf877a
commit
31d61afe8c
@ -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) {
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user