From 7f7ec2a8667cb0fd17fa407c249e2bc242910e17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Thu, 2 Feb 2023 15:36:49 +0100 Subject: [PATCH] layout: Disconnect 'monitors-changed' handler on shutdown Doing it ourselves in the shutdown handler in layout.js means we won't risk reacting to monitor changes that happen after gnome-shell prepares to shutdown and the signal handler would disconnect itself in case we used `connectObject(..)`. This will currently never happen, but in the future perf tests will be able to create virtual monitors for testing purposes, and they might get destroyed during the shutdown procedures, causing us to react to them when we shouldn't. Part-of: --- js/ui/layout.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/js/ui/layout.js b/js/ui/layout.js index 6b9deeaa3..090295f0f 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -222,6 +222,9 @@ var LayoutManager = GObject.registerClass({ global.stage.remove_actor(global.window_group); this.uiGroup.add_actor(global.window_group); global.connect('shutdown', () => { + const monitorManager = global.backend.get_monitor_manager(); + monitorManager.disconnectObject(this); + const adoptedUiGroupActors = [ global.window_group, global.top_window_group, @@ -330,8 +333,9 @@ var LayoutManager = GObject.registerClass({ this._updateFullscreen.bind(this)); const monitorManager = global.backend.get_monitor_manager(); - monitorManager.connect('monitors-changed', - this._monitorsChanged.bind(this)); + monitorManager.connectObject( + 'monitors-changed', this._monitorsChanged.bind(this), + this); this._monitorsChanged(); this.screenTransition = new ScreenTransition();