From 1f0ef7fb4692f8ad6a040567f29097e0c3688e52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Wed, 14 Apr 2021 17:12:12 +0200 Subject: [PATCH] workspaceThumbnail: Update monitor index on 'monitors-changed' For the primary monitor workspace thumbnail, we must keep the monitor index in sync with what is currently the primary monitor index, otherwise we might end up trying to move windows to non-existing monitors. For example, if the primary monitor index was 1 when the thumbnail box was created, but later, the primary monitor index changed to 0, with the other monitor being turned off, moving a window to one of the workspaces on the workspace thumbnail, gnome-shell would attempt to move it to the monitor with the index the primary monitor had in the past, with the problem being that that monitor no longer exists. Fix this by listening on the 'monitors-changed' signal on the layout manager, and update the monitor index of the primary workspace thumbnails box. Make sure to connect to the signal before creating the thumbnails box, as the thumbnails box itself will listen to the signal and recreate its actual thumbnails, and it must do this with the up to date monitor index. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4075 Part-of: --- js/ui/overviewControls.js | 3 +++ js/ui/workspaceThumbnail.js | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js index 10b97c7ac..3b5ec583f 100644 --- a/js/ui/overviewControls.js +++ b/js/ui/overviewControls.js @@ -341,6 +341,9 @@ class ControlsManager extends St.Widget { this.dash.showAppsButton); this._searchController.connect('notify::search-active', this._onSearchChanged.bind(this)); + Main.layoutManager.connect('monitors-changed', () => { + this._thumbnailsBox.setMonitorIndex(Main.layoutManager.primaryIndex); + }); this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox( this._workspaceAdjustment, Main.layoutManager.primaryIndex); this._thumbnailsBox.connect('notify::should-show', () => { diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index cf03756a5..6c5a2bee4 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -715,6 +715,10 @@ var ThumbnailsBox = GObject.registerClass({ () => this._updateIndicator()); } + setMonitorIndex(monitorIndex) { + this._monitorIndex = monitorIndex; + } + _onDestroy() { this._unqueueUpdateStates();