Treat any same-app window as popup risk for window capture

Owned popups composite their parent even when the windows do not
overlap, so the intersection test missed DBeaver-style floating dialogs.
Any other window from the same app now routes the pick to the screen
crop.

💘 Generated with Crush

Assisted-by: Crush:deepseek-v4-flash-0731
This commit is contained in:
2026-09-09 15:09:09 +08:00
parent 3078713f8f
commit ae054d70b9
2 changed files with 6 additions and 3 deletions
+4 -1
View File
@@ -329,8 +329,11 @@ final class CaptureController: NSObject {
// An overlapping window from the same app means this is an // An overlapping window from the same app means this is an
// owned popup — desktopIndependentWindow would composite the // owned popup — desktopIndependentWindow would composite the
// parent too, so capture the screen crop instead. // parent too, so capture the screen crop instead.
// Owned popups composite their parent even when the windows
// don't overlap, so ANY other same-app window on screen means
// crop (correct region) instead of the group composite.
let ownedRisk = trackedWindows.contains { let ownedRisk = trackedWindows.contains {
$0.id != hover.id && $0.pid == hover.pid && $0.frame.intersects(hover.frame) $0.id != hover.id && $0.pid == hover.pid
} }
CaptureController.log("tap: window pick id=\(hover.id) pid=\(hover.pid) ownedRisk=\(ownedRisk) \(hover.frame)") CaptureController.log("tap: window pick id=\(hover.id) pid=\(hover.pid) ownedRisk=\(ownedRisk) \(hover.frame)")
finishWindowPick(hover.id, hover.frame, ownedRisk: ownedRisk) finishWindowPick(hover.id, hover.frame, ownedRisk: ownedRisk)
+2 -2
View File
@@ -108,9 +108,9 @@ cat > "$APP/Contents/Info.plist" <<'PLIST'
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string>Icon</string> <string>Icon</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.8.2</string> <string>1.8.3</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>82</string> <string>83</string>
<key>LSUIElement</key> <key>LSUIElement</key>
<true/> <true/>
<key>NSHighResolutionCapable</key> <key>NSHighResolutionCapable</key>