diff --git a/public/app.js b/public/app.js index b8533ac..e336670 100644 --- a/public/app.js +++ b/public/app.js @@ -96,6 +96,7 @@ async function joinVoice(room) { } els.mic.disabled = !S.micStream; S.muted = false; + updateMicButton(); $('#btn-share').disabled = false; try { @@ -640,6 +641,7 @@ setInterval(() => { if (speaking !== peer.speaking) { peer.speaking = speaking; changed = true; } } if (changed) renderTiles(); + updateScreenTileIndicators(); }, 150); // --------------------------------------------------------------------------- @@ -825,6 +827,7 @@ function renderScreens() { } const card = document.createElement('div'); card.className = 'screen-card'; + card.dataset.shareKey = share.key; const video = document.createElement('video'); video.autoplay = true; video.playsInline = true; @@ -835,6 +838,9 @@ function renderScreens() { label.className = 'label'; label.innerHTML = '●'; label.appendChild(document.createTextNode(share.name)); + const micBadge = document.createElement('span'); + micBadge.className = 'tile-mic-badge'; + label.appendChild(micBadge); const pop = document.createElement('button'); pop.className = 'pop-btn'; pop.title = 'Pop out in new window'; @@ -843,6 +849,26 @@ function renderScreens() { card.append(video, label, pop); els.screens.appendChild(card); } + updateScreenTileIndicators(); +} + +// Cheap per-tick refresh of speaking/muted state on screen-share tiles — +// avoids renderScreens()'s full teardown, which would restart