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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3011>
This commit is contained in:
Florian Müllner 2023-11-08 19:41:18 +01:00 committed by Marge Bot
parent 5b8347f90b
commit 7a04d92bc0

View File

@ -138,7 +138,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);