From 3df4b5ec7ca40f9e57d4b3316bca8f6b42f7a964 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 28 Jun 2021 14:19:15 +0200 Subject: [PATCH] magnifier: Add method to enable/disable crosshairs These do some some signals connection and monitor layout tracking that we forget to disconnect when the magnifier is disconnected. This causes warnings if enabling the magnifier, disabling it, switching to another tty, and back. (Presumably also happens for monitor hotplugs). This signal should just stay connected as long as it's needed, so add a setEnabled() method on the CrossHairs actor that we can hook on the magnifier. Part-of: --- js/ui/magnifier.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js index 22c11766b..c8f695e2b 100644 --- a/js/ui/magnifier.js +++ b/js/ui/magnifier.js @@ -172,6 +172,9 @@ var Magnifier = class Magnifier { this.stopTrackingMouse(); } + if (this._crossHairs) + this._crossHairs.setEnabled(activate); + // Make sure system mouse pointer is shown when all zoom regions are // invisible. if (!activate) @@ -1677,9 +1680,7 @@ class Crosshairs extends Clutter.Actor { this._clipSize = [0, 0]; this._clones = []; this.reCenter(); - - Main.layoutManager.connect('monitors-changed', - this._monitorsChanged.bind(this)); + this._monitorsChangedId = 0; } _monitorsChanged() { @@ -1687,6 +1688,16 @@ class Crosshairs extends Clutter.Actor { this.reCenter(); } + setEnabled(enabled) { + if (enabled && this._monitorsChangedId === 0) { + this._monitorsChangedId = Main.layoutManager.connect( + 'monitors-changed', this._monitorsChanged.bind(this)); + } else if (!enabled && this._monitorsChangedId !== 0) { + Main.layoutManager.disconnect(this._monitorsChangedId); + this._monitorsChangedId = 0; + } + } + /** * addToZoomRegion * Either add the crosshairs actor to the given ZoomRegion, or, if it is