From 33d6938e781aee686abdbb67502306a9bf36dad8 Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Sun, 7 Jun 2026 22:50:56 -0700 Subject: [PATCH] fix the onblur for the import popover --- .../browser-pane/BrowserImportHintButton.tsx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/renderer/src/components/browser-pane/BrowserImportHintButton.tsx b/src/renderer/src/components/browser-pane/BrowserImportHintButton.tsx index 62d34a7eb73..7ac395af835 100644 --- a/src/renderer/src/components/browser-pane/BrowserImportHintButton.tsx +++ b/src/renderer/src/components/browser-pane/BrowserImportHintButton.tsx @@ -1,4 +1,4 @@ -import { useCallback, useMemo, useState } from 'react' +import { useCallback, useEffect, useMemo, useState } from 'react' import { Import } from 'lucide-react' import { toast } from 'sonner' import { Button } from '@/components/ui/button' @@ -122,6 +122,21 @@ export function BrowserImportHintButton({ setOpen(false) }, [setBrowserImportHintHidden]) + // Why: Electron elements run in a separate process, so clicking + // inside one never dispatches pointerdown on the renderer document. Radix + // popovers rely on that event for outside-click detection, so window blur + // catches the moment focus leaves the renderer (including into a webview). + useEffect(() => { + if (!open) { + return + } + const dismiss = (): void => { + handleOpenChange(false) + } + window.addEventListener('blur', dismiss) + return () => window.removeEventListener('blur', dismiss) + }, [handleOpenChange, open]) + if (!shouldShow) { return null }