From 1fc8f0d46989802ac1895b6585852572fc6097e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mats=20T=C3=B6rnberg?= Date: Tue, 22 Sep 2026 17:05:04 +0200 Subject: [PATCH] manage screen share preview lifecycle --- public/app.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/public/app.js b/public/app.js index 6d87f48..fd339cd 100644 --- a/public/app.js +++ b/public/app.js @@ -869,9 +869,26 @@ function onRemoteTrack(peer, ev) { track.addEventListener('ended', () => { if (peer.screenStreams.get(stream.id) === stream) { peer.screenStreams.delete(stream.id); + if (!peer.screenStreams.size) { + peer.state = { ...peer.state, sharing: false }; + captureRumIssue('Remote screen share ended', 'INFO', { + peerId: peer.id, + peerName: peer.name, + streamId: stream.id, + }); + } renderScreens(); + renderTiles(); } }); + stream.addEventListener('inactive', () => { + if (peer.screenStreams.get(stream.id) === stream) { + peer.screenStreams.delete(stream.id); + peer.state = { ...peer.state, sharing: false }; + renderScreens(); + renderTiles(); + } + }, { once: true }); renderScreens(); if (isNewScreenShare) playRetroCue('share'); console.log('remote screen share from', peer.name); @@ -993,6 +1010,10 @@ async function startScreenShare() { videoTrack.addEventListener('ended', () => stopScreenShare(stream)); } renderScreens(); + // Open a desktop preview automatically; mobile keeps the in-page preview. + if (window.matchMedia('(min-width: 700px)').matches) { + popOutShare({ key: `me:${stream.id}`, name: `${S.name} (you)`, stream, local: true }); + } renderTiles(); for (const btn of shareButtons) btn.classList.add('active'); toast('You are sharing your screen', 'ok');