From 7d3b399a9402516440c981bf48e327352092bab8 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Wed, 4 Apr 2018 10:45:06 +1000 Subject: [PATCH 1/2] fix event leak on reuse of touchbar item --- lib/browser/api/touch-bar.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/browser/api/touch-bar.js b/lib/browser/api/touch-bar.js index e131364921ce1..5f887e69f5e0c 100644 --- a/lib/browser/api/touch-bar.js +++ b/lib/browser/api/touch-bar.js @@ -118,6 +118,9 @@ class TouchBar extends EventEmitter { window.removeListener('closed', removeListeners) window._touchBar = null delete this.windowListeners[id] + for (const item of this.ordereredItems) { + item.removeListener('change', this.changeListener) + } } window.once('closed', removeListeners) this.windowListeners[id] = removeListeners From f29320ca6e3ce0f6312d14f83630c00d7a9feffc Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Thu, 12 Apr 2018 11:48:47 +1000 Subject: [PATCH 2/2] Clean up child touch bar item event listeners and escape item listeners --- lib/browser/api/touch-bar.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/browser/api/touch-bar.js b/lib/browser/api/touch-bar.js index 5f887e69f5e0c..72c50f6ff19d2 100644 --- a/lib/browser/api/touch-bar.js +++ b/lib/browser/api/touch-bar.js @@ -118,8 +118,17 @@ class TouchBar extends EventEmitter { window.removeListener('closed', removeListeners) window._touchBar = null delete this.windowListeners[id] - for (const item of this.ordereredItems) { - item.removeListener('change', this.changeListener) + 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)