diff --git a/src/frontend/src/features/rooms/livekit/components/controls/Device/VideoDeviceControl.tsx b/src/frontend/src/features/rooms/livekit/components/controls/Device/VideoDeviceControl.tsx index 800fa89f..2c214265 100644 --- a/src/frontend/src/features/rooms/livekit/components/controls/Device/VideoDeviceControl.tsx +++ b/src/frontend/src/features/rooms/livekit/components/controls/Device/VideoDeviceControl.tsx @@ -152,6 +152,7 @@ export const VideoDeviceControl = ({ {({ close }) => (
{ if (activeEl?.tagName === 'DIV') { return getTrigger('options') ?? activeEl } + if (activeEl?.closest('[data-attr="camera-menu-popover"]')) { + return getTrigger('cameraMenu') ?? activeEl + } // For direct button clicks, use the active element as is return activeEl }, diff --git a/src/frontend/src/features/rooms/livekit/hooks/useSidePanel.ts b/src/frontend/src/features/rooms/livekit/hooks/useSidePanel.ts index 831a7049..2cd63c49 100644 --- a/src/frontend/src/features/rooms/livekit/hooks/useSidePanel.ts +++ b/src/frontend/src/features/rooms/livekit/hooks/useSidePanel.ts @@ -30,6 +30,12 @@ export const useSidePanel = () => { return layoutStore.sidePanelTriggers.options ?? activeEl } } + if ( + panelId === PanelId.EFFECTS && + activeEl?.closest('[data-attr="camera-menu-popover"]') + ) { + return layoutStore.sidePanelTriggers.cameraMenu ?? activeEl + } const triggerKeyByPanel: Partial> = { [PanelId.PARTICIPANTS]: 'participants', [PanelId.TOOLS]: 'tools', diff --git a/src/frontend/src/primitives/Popover.tsx b/src/frontend/src/primitives/Popover.tsx index ebea9459..8ed755c9 100644 --- a/src/frontend/src/primitives/Popover.tsx +++ b/src/frontend/src/primitives/Popover.tsx @@ -138,7 +138,8 @@ export const Popover = ({ } useEffect(() => { - if (!effectiveOpen || !focusOnOpen) return + const wasOpen = prevOpenRef.current + if (wasOpen || !effectiveOpen || !focusOnOpen) return const first = popoverContentRef.current?.querySelector( focusOnOpen.selector )