From d4e5ec0bacaabee441be0de469b4f61d37d70e3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 8 Nov 2023 19:41:18 +0100 Subject: [PATCH] status/volume: Always look up device objects Gvc may clean its device cache after we set up the device menu, which can lead to failed assertions when using the "old" object to later switch the device from a callback. Make sure this doesn't happen by looking up the ID again from the callback. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7173 Part-of: (cherry picked from commit 7a04d92bc04e8add1b46b5da53239e53398ae958) --- js/ui/status/volume.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js index 91706343a..fb530a472 100644 --- a/js/ui/status/volume.js +++ b/js/ui/status/volume.js @@ -134,7 +134,13 @@ const StreamSlider = GObject.registerClass({ ? `${description} – ${origin}` : description; const item = new PopupMenu.PopupImageMenuItem(name, device.get_gicon()); - item.connect('activate', () => this._activateDevice(device)); + item.connect('activate', () => { + const dev = this._lookupDevice(id); + if (dev) + this._activateDevice(dev); + else + console.warn(`Trying to activate invalid device ${id}`); + }); this._deviceSection.addMenuItem(item); this._deviceItems.set(id, item);