Bug 1257008 - Don't collapse the tab list when right-clicking on a device in the Synced Tabs sidebar. r?markh
MozReview-Commit-ID: JsaWLfMOYyC
--- a/browser/components/syncedtabs/TabListComponent.js
+++ b/browser/components/syncedtabs/TabListComponent.js
@@ -34,16 +34,17 @@ TabListComponent.prototype = {
get container() {
return this._view.container;
},
init() {
log.debug("Initializing TabListComponent");
this._view = new this._View(this._window, {
+ onToggleRow: (...args) => this.onToggleRow(...args),
onSelectRow: (...args) => this.onSelectRow(...args),
onOpenTab: (...args) => this.onOpenTab(...args),
onMoveSelectionDown: (...args) => this.onMoveSelectionDown(...args),
onMoveSelectionUp: (...args) => this.onMoveSelectionUp(...args),
onToggleBranch: (...args) => this.onToggleBranch(...args),
onBookmarkTab: (...args) => this.onBookmarkTab(...args),
onSyncRefresh: (...args) => this.onSyncRefresh(...args),
onFilter: (...args) => this.onFilter(...args),
@@ -74,21 +75,23 @@ TabListComponent.prototype = {
onFilterFocus() {
this._store.focusInput();
},
onFilterBlur() {
this._store.blurInput();
},
- onSelectRow(position, id) {
+ onToggleRow(position, id) {
+ this.onSelectRow(position);
+ this._store.toggleBranch(id);
+ },
+
+ onSelectRow(position) {
this._store.selectRow(position[0], position[1]);
- if (id) {
- this._store.toggleBranch(id);
- }
},
onMoveSelectionDown() {
this._store.moveSelectionDown();
},
onMoveSelectionUp() {
this._store.moveSelectionUp();
--- a/browser/components/syncedtabs/TabListView.js
+++ b/browser/components/syncedtabs/TabListView.js
@@ -260,21 +260,18 @@ TabListView.prototype = {
}
}
if (event.target.classList.contains("item-twisty-container")) {
this.props.onToggleBranch(itemNode.dataset.id);
return;
}
- this._selectRow(itemNode);
- },
-
- _selectRow(itemNode) {
- this.props.onSelectRow(this._getSelectionPosition(itemNode), itemNode.dataset.id);
+ let position = this._getSelectionPosition(itemNode);
+ this.props.onToggleRow(position, itemNode.dataset.id);
},
/**
* Handle a keydown event on the list box.
* @param {Event} event - Triggering event.
*/
onKeyDown(event) {
if (event.keyCode == this._window.KeyEvent.DOM_VK_DOWN) {
@@ -423,17 +420,18 @@ TabListView.prototype = {
handleContextMenu(event) {
let menu;
if (event.target == this.tabsFilter) {
menu = getTabsFilterContextMenu(this._window);
} else {
let itemNode = this._findParentItemNode(event.target);
if (itemNode) {
- this._selectRow(itemNode);
+ let position = this._getSelectionPosition(itemNode);
+ this.props.onSelectRow(position);
}
menu = getContextMenu(this._window);
this.adjustContextMenu(menu);
}
menu.openPopupAtScreen(event.screenX, event.screenY, true, event);
},
--- a/browser/components/syncedtabs/test/browser/browser_sidebar_syncedtabslist.js
+++ b/browser/components/syncedtabs/test/browser/browser_sidebar_syncedtabslist.js
@@ -330,23 +330,26 @@ function checkItem(node, item) {
Assert.equal(node.dataset.id, item.id,
"Node's ID should match item ID");
}
}
function* testContextMenu(syncedTabsDeckComponent, contextSelector, triggerSelector, menuSelectors) {
let contextMenu = document.querySelector(contextSelector);
let triggerElement = syncedTabsDeckComponent.container.querySelector(triggerSelector);
+ let isClosed = triggerElement.classList.contains("closed");
let promisePopupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
yield EventUtils.synthesizeMouse(triggerElement, /* offsetX */ 0, /* offsetY */ 0, {
type: "contextmenu",
button: 2,
}, triggerElement.ownerDocument.defaultView);
yield promisePopupShown;
+ is(triggerElement.classList.contains("closed"), isClosed,
+ "Showing the context menu shouldn't toggle the tab list");
checkChildren(contextMenu, menuSelectors);
let promisePopupHidden = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden");
contextMenu.hidePopup();
yield promisePopupHidden;
}
function checkChildren(node, selectors) {