diff --git a/src/frontend/src/features/rooms/livekit/components/FullScreenShareWarning.tsx b/src/frontend/src/features/rooms/livekit/components/FullScreenShareWarning.tsx index f82d070b..decdb784 100644 --- a/src/frontend/src/features/rooms/livekit/components/FullScreenShareWarning.tsx +++ b/src/frontend/src/features/rooms/livekit/components/FullScreenShareWarning.tsx @@ -20,14 +20,41 @@ export const FullScreenShareWarning = ({ const { localParticipant } = useLocalParticipant() const screenSharePreferences = useSnapshot(ScreenSharePreferenceStore) - const isFullScreenCapture = useMemo(() => { - const trackLabel = - trackReference.publication?.track?.mediaStreamTrack?.label - return trackLabel?.includes('screen') + const isFullScreenSharing = useMemo(() => { + if (trackReference?.source !== 'screen_share') return false + + const mediaStreamTrack = trackReference.publication?.track?.mediaStreamTrack + + if (!mediaStreamTrack) return false + + // Method 1: Display Surface Check (Chrome & Edge) + const trackSettings = mediaStreamTrack.getSettings() + if (trackSettings?.displaySurface) { + return trackSettings.displaySurface === 'monitor' + } + + // Method 2: Track Constraints Check + const constraints = mediaStreamTrack.getConstraints() + if (constraints?.displaySurface) { + return constraints.displaySurface === 'monitor' + } + + // Method 3: Label Analysis (Firefox, Safari) + const trackLabel = mediaStreamTrack.label.toLowerCase() + const fullScreenIndicators = [ + 'monitor', + 'screen', + 'display', + 'entire screen', + 'full screen', + ] + return fullScreenIndicators.some((indicator) => + trackLabel.includes(indicator) + ) }, [trackReference]) const shouldShowWarning = - screenSharePreferences.enabled && isFullScreenCapture + screenSharePreferences.enabled && isFullScreenSharing const handleStopScreenShare = async () => { if (!localParticipant.isScreenShareEnabled) return diff --git a/src/frontend/src/locales/en/rooms.json b/src/frontend/src/locales/en/rooms.json index de50372a..0a7663f2 100644 --- a/src/frontend/src/locales/en/rooms.json +++ b/src/frontend/src/locales/en/rooms.json @@ -200,7 +200,7 @@ "fullScreen": "Full screen" }, "fullScreenWarning": { - "message": "To avoid infinite loop display, do not share your entire screen or browser window. Instead, share a tab or another window.", + "message": "To avoid infinite loop display, do not share your entire screen. Instead, share a tab or another window.", "stop": "Stop presenting", "ignore": "Ignore" } diff --git a/src/frontend/src/locales/fr/rooms.json b/src/frontend/src/locales/fr/rooms.json index a56bd267..eeb316cc 100644 --- a/src/frontend/src/locales/fr/rooms.json +++ b/src/frontend/src/locales/fr/rooms.json @@ -200,7 +200,7 @@ "fullScreen": "Plein écran" }, "fullScreenWarning": { - "message": "Pour éviter l'affichage en boucle infinie, ne partagez pas l'intégralité de votre écran ni de votre fenêtre de navigateur. Partagez plutôt un onglet ou une autre fenêtre.", + "message": "Pour éviter l'affichage en boucle infinie, ne partagez pas l'intégralité de votre écran. Partagez plutôt un onglet ou une autre fenêtre.", "stop": "Arrêter la présentation", "ignore": "Ignorer" }