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
)