diff --git a/shell/plugins/services/media/Service.qml b/shell/plugins/services/media/Service.qml index e22bf236..1cfeb9c9 100644 --- a/shell/plugins/services/media/Service.qml +++ b/shell/plugins/services/media/Service.qml @@ -430,12 +430,20 @@ Item { return handled } - Timer { - interval: 500 - running: true - repeat: true - triggeredOnStart: true - onTriggered: root.syncPlayingOrder() + // Recompute play-order reactively instead of polling every 500ms. + // syncPlayingOrder only depends on the set of players and each player's + // isPlaying state: onPlayersChanged covers players appearing/disappearing, + // and the Instantiator wires isPlayingChanged for each live player. + Component.onCompleted: root.syncPlayingOrder() + onPlayersChanged: root.syncPlayingOrder() + + Instantiator { + model: root.players + delegate: Connections { + required property var modelData + target: modelData + function onIsPlayingChanged() { root.syncPlayingOrder() } + } } Timer {