From ea77c4609fbc042b27f84adfa442e1839fcf6b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Hedin=20Br=C3=B8nner?= Date: Sun, 1 Jul 2018 17:10:38 +0200 Subject: [PATCH] Disconnect destroyed windows and actors --- tiling.js | 9 +++++++++ utils.js | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/tiling.js b/tiling.js index 18069d9..c1d93fb 100644 --- a/tiling.js +++ b/tiling.js @@ -826,6 +826,12 @@ function registerWindow(metaWindow) { signals.connect(metaWindow, 'notify::fullscreen', fullscreenWrapper); signals.connect(metaWindow, 'size-changed', resizeHandler); signals.connect(actor, 'show', showWrapper); + + signals.connect(actor, 'destroy', destroyHandler); +} + +function destroyHandler(actor) { + signals.disconnect(actor); } function cloneSizeHandler(metaWindow) { @@ -979,6 +985,9 @@ function remove_handler(workspace, meta_window) { return; space.layout(); + if (!meta_window.get_compositor_private()) + signals.disconnect(meta_window); + // (could be an empty workspace) if (space.selectedWindow) { // Force a new ensure, since the focus_handler is run before diff --git a/utils.js b/utils.js index 72bf5e6..6f0d991 100644 --- a/utils.js +++ b/utils.js @@ -169,6 +169,14 @@ class Signals extends Map { signals.push(object.connect(signal, handler)); } + disconnect(object) { + let ids = this.get(object); + if (ids) { + ids.forEach(id => object.disconnect(id)); + this.delete(object); + } + } + destroy() { for (let [object, signals] of this) { signals.forEach(id => object.disconnect(id));