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>
(cherry picked from commit 7a04d92bc0)
This commit is contained in:
Florian Müllner 2023-11-08 19:41:18 +01:00
parent d967fedea3
commit 3361e03cc7

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);