[gnome-shell] workspaceThumbnail: Update monitor index on 'monitors-changed'



commit 1f0ef7fb4692f8ad6a040567f29097e0c3688e52
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Wed Apr 14 17:12:12 2021 +0200

    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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1810>

 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 10b97c7ac0..3b5ec583f9 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 cf03756a55..6c5a2bee4a 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();
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]