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