[Pkg-mozext-commits] [requestpolicy] 18/65: [fix] toolbar button: "toggle" menu rather than "open"

David Prévot taffit at moszumanska.debian.org
Fri Mar 25 22:59:47 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository requestpolicy.

commit 5307885504c64ad117bce84f92aa8da6b1431f12
Author: Martin Kimmerle <dev at 256k.de>
Date:   Wed Jan 13 14:52:14 2016 +0100

    [fix] toolbar button: "toggle" menu rather than "open"
    
    Fixes #648
---
 src/content/controllers/keyboard-shortcuts.jsm    |  2 +-
 src/content/controllers/windows.toolbarbutton.jsm |  2 +-
 src/content/ui/overlay.js                         | 15 ++++++++
 src/content/ui/xul-trees.js                       |  2 +-
 tests/marionette/rp_puppeteer/tests/test_menu.py  | 22 ++++++++----
 tests/marionette/rp_puppeteer/ui/menu.py          | 42 +++++++++++++++--------
 6 files changed, 60 insertions(+), 25 deletions(-)

diff --git a/src/content/controllers/keyboard-shortcuts.jsm b/src/content/controllers/keyboard-shortcuts.jsm
index b656d3f..f03221f 100644
--- a/src/content/controllers/keyboard-shortcuts.jsm
+++ b/src/content/controllers/keyboard-shortcuts.jsm
@@ -42,7 +42,7 @@ var KeyboardShortcuts = (function() {
   self.startup = function() {
     keyboardShortcuts.push(new KeyboardShortcut("openMenu", "alt shift r",
         function(window) {
-          window.rpcontinued.overlay.openMenu();
+          window.rpcontinued.overlay.toggleMenu();
         },
         "keyboardShortcuts.openMenu.enabled",
         "keyboardShortcuts.openMenu.combo"));
diff --git a/src/content/controllers/windows.toolbarbutton.jsm b/src/content/controllers/windows.toolbarbutton.jsm
index b6043a8..b00ac67 100644
--- a/src/content/controllers/windows.toolbarbutton.jsm
+++ b/src/content/controllers/windows.toolbarbutton.jsm
@@ -84,7 +84,7 @@ var ToolbarButtonController = (function() {
         onCommand: function(aEvent) {
           // Bad smell
           let win = aEvent.target.ownerDocument.defaultView;
-          win.rpcontinued.overlay.openMenu();
+          win.rpcontinued.overlay.toggleMenu();
         }
       });
     }
diff --git a/src/content/ui/overlay.js b/src/content/ui/overlay.js
index e595feb..a0c593b 100644
--- a/src/content/ui/overlay.js
+++ b/src/content/ui/overlay.js
@@ -1092,6 +1092,21 @@ window.rpcontinued.overlay = (function() {
     }, 0);
   };
 
+  /**
+   * Close RequestPolicy's menu.
+   */
+  self.closeMenu = function() {
+    rpcontinued.menu.close();
+  };
+
+  self.toggleMenu = function() {
+    if ($id("rpc-popup").state === "closed") {
+      self.openMenu();
+    } else {
+      self.closeMenu();
+    }
+  };
+
   self.isToolbarButtonVisible = function() {
     return DOMUtils.isElementVisible($id("rpcontinuedToolbarButton"));
   };
diff --git a/src/content/ui/xul-trees.js b/src/content/ui/xul-trees.js
index da2b469..c8f5287 100644
--- a/src/content/ui/xul-trees.js
+++ b/src/content/ui/xul-trees.js
@@ -88,7 +88,7 @@ exports.mainTree = [
     tag: "menuitem",
     attributes: {id: "rpcontinuedContextMenuEntry",
                  label: "RequestPolicy Continued"},
-    events: {command: ["overlay", "openMenu"]}
+    events: {command: ["overlay", "toggleMenu"]}
   },
 
   {
diff --git a/tests/marionette/rp_puppeteer/tests/test_menu.py b/tests/marionette/rp_puppeteer/tests/test_menu.py
index fe198de..edc85b1 100644
--- a/tests/marionette/rp_puppeteer/tests/test_menu.py
+++ b/tests/marionette/rp_puppeteer/tests/test_menu.py
@@ -14,16 +14,24 @@ class TestMenu(RequestPolicyTestCase):
             super(RequestPolicyTestCase, self).tearDown()
 
     def test_open_close(self):
-        def test(trigger):
-            self.assertFalse(self.menu.is_open())
-            self.menu.open(trigger=trigger)
-            self.assertTrue(self.menu.is_open())
-            self.menu.close()
-            self.assertFalse(self.menu.is_open())
+        def test(trigger, test_close=True):
+            try:
+                self.assertFalse(self.menu.is_open())
+                self.menu.open(trigger=trigger)
+                self.assertTrue(self.menu.is_open())
+                if test_close:
+                    self.menu.close(trigger=trigger)
+                else:
+                    self.menu.close()
+                self.assertFalse(self.menu.is_open())
+            except:
+                print "trigger: " + trigger
+                raise
 
         test("api")
         test("button")
-        test("shortcut")
+        # The keyboard shortcut is not captured when the menu is open.
+        test("shortcut", test_close=False)
 
     def test_total_num_requests(self):
         with self.marionette.using_context("content"):
diff --git a/tests/marionette/rp_puppeteer/ui/menu.py b/tests/marionette/rp_puppeteer/ui/menu.py
index a0b5c5a..2301608 100644
--- a/tests/marionette/rp_puppeteer/ui/menu.py
+++ b/tests/marionette/rp_puppeteer/ui/menu.py
@@ -22,25 +22,17 @@ class Menu(BaseLib):
         return int(match.group(1))
 
     def open(self, trigger="api"):
-        if callable(trigger):
-            trigger()
-        elif trigger == "button":
-            self._toolbar_button.click()
-        elif trigger == "shortcut":
-            window = Windows(lambda: self.marionette).current
-            window.send_shortcut("r", alt=True, shift=True)
-        elif trigger == "api":
-            self._ensure_popup_state("open")
-        else:
-            raise ValueError("Unknown opening method: \"{}\"".format(trigger))
-
-        Wait(self.marionette, timeout=1).until(lambda _: self.is_open())
+        if self.is_open():
+            return
+        self._toggle(trigger=trigger)
 
     def is_open(self):
         return self._popup_state == "open"
 
-    def close(self):
-        self._ensure_popup_state("closed")
+    def close(self, trigger="api"):
+        if not self.is_open():
+            return
+        self._toggle(trigger=trigger)
 
     ##################################
     # Private Properties and Methods #
@@ -58,6 +50,26 @@ class Menu(BaseLib):
     def _popup_state(self):
         return self._popup.get_attribute("state")
 
+    def _toggle(self, trigger="api"):
+        is_open = self.is_open()
+
+        if callable(trigger):
+            trigger()
+        elif trigger == "button":
+            self._toolbar_button.click()
+        elif trigger == "shortcut":
+            window = Windows(lambda: self.marionette).current
+            window.send_shortcut("r", alt=True, shift=True)
+        elif trigger == "api":
+            self._ensure_popup_state("closed" if is_open else "open")
+        else:
+            raise ValueError("Unknown trigger method: \"{}\"".format(trigger))
+
+        (
+            Wait(self.marionette, timeout=1)
+            .until(lambda _: self.is_open() is not is_open)
+        )
+
     def _ensure_popup_state(self, state):
         assert state in ["open", "closed"]
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/requestpolicy.git



More information about the Pkg-mozext-commits mailing list