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;