Bug 1257008 - Don't collapse the tab list when right-clicking on a device in the Synced Tabs sidebar. r?markh draft
authorKit Cambridge <kcambridge@mozilla.com>
Tue, 15 Mar 2016 16:56:52 -0700
changeset 340812 a967d98ab3f9db9afbbefb44e0a24b9c02e9fadb
parent 340764 2b815d83a921d369ede715f9f42ac1df3a0d2ec5
child 516280 a7fb7f8b1551c70c6156d6fea3123405e6993964
push id13074
push userkcambridge@mozilla.com
push dateWed, 16 Mar 2016 01:17:38 +0000
reviewersmarkh
bugs1257008
milestone48.0a1
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
browser/components/syncedtabs/TabListComponent.js
browser/components/syncedtabs/TabListView.js
browser/components/syncedtabs/test/browser/browser_sidebar_syncedtabslist.js
--- 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) {