Browse Source

Backport (2-0-x) - Fix event leak on reuse of touchbar item (#12624)

* fix event leak on reuse of touchbar item

* Clean up child touch bar item event listeners and escape item listeners
trop[bot] 7 years ago
parent
commit
652f83fc88
1 changed files with 12 additions and 0 deletions
  1. 12 0
      lib/browser/api/touch-bar.js

+ 12 - 0
lib/browser/api/touch-bar.js

@@ -118,6 +118,18 @@ class TouchBar extends EventEmitter {
       window.removeListener('closed', removeListeners)
       window._touchBar = null
       delete this.windowListeners[id]
+      const unregisterItems = (items) => {
+        for (const item of items) {
+          item.removeListener('change', this.changeListener)
+          if (item.child instanceof TouchBar) {
+            unregisterItems(item.child.ordereredItems)
+          }
+        }
+      }
+      unregisterItems(this.ordereredItems)
+      if (this.escapeItem) {
+        this.escapeItem.removeListener('change', this.changeListener)
+      }
     }
     window.once('closed', removeListeners)
     this.windowListeners[id] = removeListeners