From 3fa4c79b12acb61a2f53f7c1d7838ecb9b15a129 Mon Sep 17 00:00:00 2001 From: ManthanNimodiya Date: Wed, 1 Jul 2026 22:37:07 +0530 Subject: [PATCH 1/5] fix(windows): remove Cap Target Select from default excluded windows to prevent ghost overlay after recording --- apps/desktop/src-tauri/src/general_settings.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/desktop/src-tauri/src/general_settings.rs b/apps/desktop/src-tauri/src/general_settings.rs index 3bc84592394..e33dc1db854 100644 --- a/apps/desktop/src-tauri/src/general_settings.rs +++ b/apps/desktop/src-tauri/src/general_settings.rs @@ -96,7 +96,6 @@ const DEFAULT_EXCLUDED_WINDOW_TITLES: &[&str] = &[ "Cap Settings", "Cap Recording Controls", "Cap Camera", - "Cap Target Select", "Cap Window Capture Occluder", "Cap Capture Area", "Cap Mode Selection", From e4e55aedf5541ab93b83b97bf43eab92ebc9532b Mon Sep 17 00:00:00 2001 From: ManthanNimodiya Date: Wed, 1 Jul 2026 23:34:45 +0530 Subject: [PATCH 2/5] fix(cli): remove unused Duration import and prefix unused checks param --- apps/cli/src/doctor.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/cli/src/doctor.rs b/apps/cli/src/doctor.rs index 4b36b0ed99b..787861c99a6 100644 --- a/apps/cli/src/doctor.rs +++ b/apps/cli/src/doctor.rs @@ -1,8 +1,5 @@ use serde::Serialize; -use std::{ - path::{Path, PathBuf}, - time::Duration, -}; +use std::path::{Path, PathBuf}; use crate::{OutputFormat, write_json}; @@ -456,7 +453,7 @@ fn install_check(install: &Result) -> } } -fn capture_ready(permissions: &Permissions, checks: &[Check]) -> bool { +fn capture_ready(permissions: &Permissions, _checks: &[Check]) -> bool { let permission_ready = match permissions.screen_recording { #[cfg(target_os = "macos")] PermissionStatus::Granted => true, From 7f3ec98c5c4fbd863009a2bf7dc45009ea17bf9b Mon Sep 17 00:00:00 2001 From: ManthanNimodiya Date: Wed, 1 Jul 2026 23:39:35 +0530 Subject: [PATCH 3/5] fix(cli): use cfg_attr allow instead of underscore prefix for checks param --- apps/cli/src/doctor.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/cli/src/doctor.rs b/apps/cli/src/doctor.rs index 787861c99a6..fe05a09ce4a 100644 --- a/apps/cli/src/doctor.rs +++ b/apps/cli/src/doctor.rs @@ -453,7 +453,8 @@ fn install_check(install: &Result) -> } } -fn capture_ready(permissions: &Permissions, _checks: &[Check]) -> bool { +#[cfg_attr(not(target_os = "macos"), allow(unused_variables))] +fn capture_ready(permissions: &Permissions, checks: &[Check]) -> bool { let permission_ready = match permissions.screen_recording { #[cfg(target_os = "macos")] PermissionStatus::Granted => true, From 6b9ec5acbfb19c44460a23dcb3bc2c426a595b02 Mon Sep 17 00:00:00 2001 From: ManthanNimodiya Date: Thu, 2 Jul 2026 08:26:34 +0530 Subject: [PATCH 4/5] fix: migrate existing users by stripping Cap Target Select from excluded_windows on startup --- apps/desktop/src-tauri/src/general_settings.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/apps/desktop/src-tauri/src/general_settings.rs b/apps/desktop/src-tauri/src/general_settings.rs index e33dc1db854..a8ccbe4af04 100644 --- a/apps/desktop/src-tauri/src/general_settings.rs +++ b/apps/desktop/src-tauri/src/general_settings.rs @@ -416,6 +416,17 @@ pub fn init(app: &AppHandle) { }; append_missing_default_excluded_windows(&mut store.excluded_windows); + + const REMOVE_TARGET_SELECT_MIGRATION_KEY: &str = "remove_cap_target_select_exclusion_v1"; + if let Ok(raw_store) = app.store("store") + && raw_store.get(REMOVE_TARGET_SELECT_MIGRATION_KEY).is_none() + { + store.excluded_windows.retain(|w| { + w.window_title.as_deref() != Some("Cap Target Select") + }); + raw_store.set(REMOVE_TARGET_SELECT_MIGRATION_KEY, json!(true)); + } + crate::posthog::set_telemetry_enabled(store.enable_telemetry); register_bundled_muxer_binary(app); From 740b46335745fddaddd2bb81ed8a62930255acfb Mon Sep 17 00:00:00 2001 From: ManthanNimodiya Date: Thu, 2 Jul 2026 08:32:51 +0530 Subject: [PATCH 5/5] fix(cli): restore Duration import as cfg(macos) and add comment on excluded windows --- apps/cli/src/doctor.rs | 2 ++ apps/desktop/src-tauri/src/general_settings.rs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/apps/cli/src/doctor.rs b/apps/cli/src/doctor.rs index fe05a09ce4a..7af92616571 100644 --- a/apps/cli/src/doctor.rs +++ b/apps/cli/src/doctor.rs @@ -1,5 +1,7 @@ use serde::Serialize; use std::path::{Path, PathBuf}; +#[cfg(target_os = "macos")] +use std::time::Duration; use crate::{OutputFormat, write_json}; diff --git a/apps/desktop/src-tauri/src/general_settings.rs b/apps/desktop/src-tauri/src/general_settings.rs index a8ccbe4af04..a8003c4a807 100644 --- a/apps/desktop/src-tauri/src/general_settings.rs +++ b/apps/desktop/src-tauri/src/general_settings.rs @@ -91,6 +91,8 @@ impl MainWindowRecordingStartBehaviour { } } +// NOTE: Do not add "Cap Target Select" here — on Windows, WDA_EXCLUDEFROMCAPTURE applied to that +// hidden window causes it to reappear as a ghost overlay after recording ends. const DEFAULT_EXCLUDED_WINDOW_TITLES: &[&str] = &[ "Cap", "Cap Settings",