From 35e88217a864209a33d3f4930b3c71c5f735c0f3 Mon Sep 17 00:00:00 2001 From: retrozinndev Date: Wed, 23 Jul 2025 21:37:38 -0300 Subject: [PATCH] :boom: fix(bar/media): unexistent player keeps selected instead of jumping to the next available player --- ags/widget/bar/Media.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/ags/widget/bar/Media.tsx b/ags/widget/bar/Media.tsx index 2b01c51..230c793 100644 --- a/ags/widget/bar/Media.tsx +++ b/ags/widget/bar/Media.tsx @@ -1,4 +1,4 @@ -import { createBinding, createState, With } from "ags"; +import { createBinding, createState, onCleanup, With } from "ags"; import { execAsync } from "ags/process"; import { Gtk } from "ags/gtk4"; import { getSymbolicIcon } from "../../scripts/apps"; @@ -12,7 +12,6 @@ import Pango from "gi://Pango?version=1.0"; export const dummyPlayer = AstalMpris.Player.new("colorshellDummy"); - export let [player, setPlayer] = createState(dummyPlayer); export const Media = () => { @@ -21,17 +20,26 @@ export const Media = () => { if(AstalMpris.get_default().players[0]) setPlayer(AstalMpris.get_default().players[0]); + onCleanup(() => connections.forEach((id, obj) => + Array.isArray(id) ? + id.forEach(id => obj.disconnect(id)) + : obj.disconnect(id) + )); + connections.set(AstalMpris.get_default(), [ AstalMpris.get_default().connect("player-added", (_, player) => player.available && setPlayer(player)), AstalMpris.get_default().connect("player-closed", (_, closedPlayer) => { - const players = AstalMpris.get_default().players.filter(pl => pl?.available); + const players = AstalMpris.get_default().players.filter(pl => pl?.available && + pl.busName !== closedPlayer.busName); if(players.length > 0) { setPlayer(players[0]); return; - } else setPlayer(dummyPlayer); + } + + setPlayer(dummyPlayer); }) ]);