diff --git a/paper-menu-button.html b/paper-menu-button.html
index 55f71cb..d914e19 100644
--- a/paper-menu-button.html
+++ b/paper-menu-button.html
@@ -305,7 +305,10 @@
},
listeners: {
- 'iron-select': '_onIronSelect'
+ 'iron-select': '_onIronSelect',
+ 'iron-overlay-opened': '__stopEventPropagation',
+ 'iron-overlay-closed': '__stopEventPropagation',
+ 'iron-overlay-canceled': '__stopEventPropagation'
},
/**
@@ -412,6 +415,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 5652625..9b68c8a 100644
--- a/test/paper-menu-button.html
+++ b/test/paper-menu-button.html
@@ -86,7 +86,7 @@
MockInteractions.tap(trigger);
});
});
-
+
MockInteractions.tap(trigger);
});
@@ -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);
+ });
+
});
suite('when there are two buttons', function() {
@@ -150,7 +187,7 @@
Polymer.Base.async(function() {
MockInteractions.tap(otherTrigger);
});
-
+
Polymer.Base.async(function() {
expect(firstClosed).to.be.equal(true);