diff --git a/core/misc/matchmedia.js b/core/misc/matchmedia.js
index bd18fe8..208a80a 100644
--- a/core/misc/matchmedia.js
+++ b/core/misc/matchmedia.js
@@ -72,8 +72,12 @@ window.matchMedia = window.matchMedia || (function (doc, window) {
     addListener: function (callback) {
       var handler = (function (mql, debounced) {
         return function () {
+          // Only execute the callback if the state has changed.
+          var oldstate = mql.matches;
           mql.check();
-          debounced.call(mql, mql);
+          if (oldstate != mql.matches) {
+            debounced.call(mql, mql);
+          }
         };
       }(this, debounce(callback, 250)));
       this.listeners.push({
