diff --git a/paper-menu-button.html b/paper-menu-button.html index b841d97..5d29eae 100644 --- a/paper-menu-button.html +++ b/paper-menu-button.html @@ -304,7 +304,13 @@ hostAttributes: {role: 'group', 'aria-haspopup': 'true'}, listeners: - {'iron-activate': '_onIronActivate', 'iron-select': '_onIronSelect'}, + { + 'iron-activate': '_onIronActivate', + 'iron-select': '_onIronSelect', + 'iron-overlay-opened': '__stopEventPropagation', + 'iron-overlay-closed': '__stopEventPropagation', + 'iron-overlay-canceled': '__stopEventPropagation' + }, /** * The content element that is contained by the menu button, if any. @@ -416,6 +422,10 @@ if (path.indexOf(trigger) > -1) { event.preventDefault(); } + }, + + __stopEventPropagation: function(event) { + event.stopPropagation(); } }); diff --git a/test/paper-menu-button.html b/test/paper-menu-button.html index 505a318..6763ba0 100644 --- a/test/paper-menu-button.html +++ b/test/paper-menu-button.html @@ -107,6 +107,43 @@ expect(menuButton.hasAttribute('aria-haspopup')).to.be.equal(true); }); + test('iron-overlay-opened event propagation is stopped', function(done) { + var spy = sinon.stub(); + Polymer.dom(menuButton).parentNode.addEventListener('iron-overlay-opened', spy); + menuButton.opened = true; + Polymer.Base.async(function() { + expect(spy.called).to.be.false; + done(); + }, 10); + }); + + test('iron-overlay-closed event propagation is stopped', function(done) { + var spy = sinon.stub(); + Polymer.dom(menuButton).parentNode.addEventListener('iron-overlay-closed', spy); + menuButton.opened = true; + Polymer.Base.async(function() { + menuButton.opened = false; + Polymer.Base.async(function() { + expect(spy.called).to.be.false; + done(); + }, 10); + }, 10); + }); + + test('iron-overlay-canceled event propagation is stopped', function(done) { + var spy = sinon.stub(); + Polymer.dom(menuButton).parentNode.addEventListener('iron-overlay-canceled', spy); + menuButton.opened = true; + Polymer.Base.async(function() { + // Will cause cancel to happen + MockInteractions.tap(menuButton); + Polymer.Base.async(function() { + expect(spy.called).to.be.false; + done(); + }, 10); + }, 10); + }); + test('closes on iron-activate if close-on-activate is true', function(done) { menuButton.closeOnActivate = true;