From 1a74a7eaef196cb13fb6feb49a7bcc9a7ccb4d85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Hedin=20Br=C3=B8nner?= Date: Fri, 13 Apr 2018 18:07:10 +0200 Subject: [PATCH] tiling: Make signal control a bit easier --- tiling.js | 51 +++++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/tiling.js b/tiling.js index 5b15848..76ec6bb 100644 --- a/tiling.js +++ b/tiling.js @@ -37,27 +37,38 @@ var primary = Main.layoutManager.primaryMonitor; var panelBox = Main.layoutManager.panelBox; // Symbol to retrieve the focus handler id -var focus_signal, minimizeSignal, oldSpaces; +var signals, focus_signal, minimizeSignal, oldSpaces; function init() { focus_signal = Symbol(); minimizeSignal = Symbol(); + signals = Symbol(); oldSpaces = new Map(); + + global.screen[signals] = []; + global.display[signals] = []; } -var nWorkspacesSignal, workspaceRemovedSignal, windowCreatedSignal, - monitorsChangedId; function enable() { - nWorkspacesSignal = - global.screen.connect('notify::n-workspaces', - Lang.bind(spaces, utils.dynamic_function_ref('workspacesChanged', spaces))); + global.screen[signals].push( + global.screen.connect( + 'notify::n-workspaces', + Lang.bind(spaces, + utils.dynamic_function_ref('workspacesChanged', spaces))), - workspaceRemovedSignal = - global.screen.connect('workspace-removed', - utils.dynamic_function_ref('workspaceRemoved', spaces)); + global.screen.connect( + 'workspace-removed', + utils.dynamic_function_ref('workspaceRemoved', spaces)), - windowCreatedSignal = - global.display.connect('window-created', - utils.dynamic_function_ref('window_created', spaces)); + // Reset primary when monitors change + global.screen.connect("monitors-changed", + function(screen) { + primary = Main.layoutManager.primaryMonitor; + })); + + global.display[signals].push( + global.display.connect( + 'window-created', + utils.dynamic_function_ref('window_created', spaces))); // HACK: couldn't find an other way within a reasonable time budget // This state is different from being enabled after startup. Existing @@ -86,13 +97,6 @@ function enable() { } else { initWorkspaces(); } - - // Reset primary when monitors change - monitorsChangedId = global.screen.connect( - "monitors-changed", - function(screen) { - primary = Main.layoutManager.primaryMonitor; - }); } function disable () { @@ -115,14 +119,13 @@ function disable () { oldSpaces = new Map(spaces); // Disable workspace related signals - global.screen.disconnect(nWorkspacesSignal); - global.screen.disconnect(workspaceRemovedSignal); - global.display.disconnect(windowCreatedSignal); + global.screen[signals].forEach(id => global.screen.disconnect(id)); + global.display[signals].forEach(id => global.display.disconnect(id)); + global.screen[signals] = []; + global.display[signals] = []; for (let [workspace, space] of spaces) { spaces.removeSpace(space); } - - global.screen.disconnect(monitorsChangedId); } class Space extends Array {