From 9158f55360d6af87c078d3af3db81f296f3b36b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Mon, 11 Mar 2019 17:09:08 -0400 Subject: [PATCH] magnifier: Track cursor sprite changes only when active There's no point in keeping the cursor sprite texture around all the time, and to listen for its changes, we just need this when the magnifier is active. So, initialize the magnifier texture and monitor for the sprite changes on activation, while disconnect from the signal and nullify the texture when the magnifier is deactivated. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/443 --- js/ui/magnifier.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js index f6b0e9550..b01e8b6b2 100644 --- a/js/ui/magnifier.js +++ b/js/ui/magnifier.js @@ -88,7 +88,7 @@ var MouseSpriteContent = GObject.registerClass({ this._texture = coglTexture; this.invalidate(); - if (!oldTexture || + if (!oldTexture || !coglTexture || oldTexture.get_width() != coglTexture.get_width() || oldTexture.get_height() != coglTexture.get_height()) this.invalidate_size(); @@ -106,7 +106,6 @@ var Magnifier = class Magnifier { this._mouseSprite = new Clutter.Actor({ request_mode: Clutter.RequestMode.CONTENT_SIZE }); this._mouseSprite.content = new MouseSpriteContent(); - this._updateSpriteTexture(); this._cursorRoot = new Clutter.Actor(); this._cursorRoot.add_actor(this._mouseSprite); @@ -122,8 +121,6 @@ var Magnifier = class Magnifier { let showAtLaunch = this._settingsInit(aZoomRegion); aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse); - cursorTracker.connect('cursor-changed', this._updateMouseSprite.bind(this)); - // Export to dbus. magDBusService = new MagnifierDBus.ShellMagnifier(); this.setActive(showAtLaunch); @@ -159,9 +156,15 @@ var Magnifier = class Magnifier { if (isActive != activate) { if (activate) { + this._updateMouseSprite(); + this._cursorSpriteChangedId = + this._cursorTracker.connect('cursor-changed', + this._updateMouseSprite.bind(this)); Meta.disable_unredirect_for_display(global.display); this.startTrackingMouse(); } else { + this._cursorTracker.disconnect(this._cursorSpriteChangedId); + this._mouseSprite.content.texture = null; Meta.enable_unredirect_for_display(global.display); this.stopTrackingMouse(); }