@@ -85,7 +85,10 @@ use upload::{S3UploadMeta, create_or_get_video, upload_image, upload_video};
8585use web_api:: ManagerExt as WebManagerExt ;
8686use windows:: { CapWindowId , EditorWindowIds , ShowCapWindow , set_window_transparent} ;
8787
88- use crate :: { camera:: CameraPreviewManager , recording_settings:: RecordingSettingsStore } ;
88+ use crate :: {
89+ camera:: CameraPreviewManager ,
90+ recording_settings:: { RecordingSettingsStore , RecordingTargetMode } ,
91+ } ;
8992use crate :: { recording:: start_recording, upload:: build_video_meta} ;
9093
9194#[ allow( clippy:: large_enum_variant) ]
@@ -307,6 +310,11 @@ pub struct RequestStartRecording {
307310#[ derive( Deserialize , specta:: Type , Serialize , tauri_specta:: Event , Debug , Clone ) ]
308311pub struct RequestNewScreenshot ;
309312
313+ #[ derive( Deserialize , specta:: Type , Serialize , tauri_specta:: Event , Debug , Clone ) ]
314+ pub struct RequestOpenRecordingPicker {
315+ pub target_mode : Option < RecordingTargetMode > ,
316+ }
317+
310318#[ derive( Deserialize , specta:: Type , Serialize , tauri_specta:: Event , Debug , Clone ) ]
311319pub struct RequestOpenSettings {
312320 page : String ,
@@ -1902,6 +1910,7 @@ pub async fn run(recording_logging_handle: LoggingHandle) {
19021910 RecordingStarted ,
19031911 RecordingStopped ,
19041912 RequestStartRecording ,
1913+ RequestOpenRecordingPicker ,
19051914 RequestNewScreenshot ,
19061915 RequestOpenSettings ,
19071916 NewNotification ,
@@ -1912,7 +1921,7 @@ pub async fn run(recording_logging_handle: LoggingHandle) {
19121921 recording:: RecordingEvent ,
19131922 RecordingDeleted ,
19141923 target_select_overlay:: TargetUnderCursor ,
1915- hotkeys:: OnEscapePress
1924+ hotkeys:: OnEscapePress ,
19161925 ] )
19171926 . error_handling ( tauri_specta:: ErrorHandlingMode :: Throw )
19181927 . typ :: < ProjectConfiguration > ( )
@@ -1973,7 +1982,13 @@ pub async fn run(recording_logging_handle: LoggingHandle) {
19731982 . map ( PathBuf :: from)
19741983 else {
19751984 let app = app. clone ( ) ;
1976- tokio:: spawn ( async move { ShowCapWindow :: Main . show ( & app) . await } ) ;
1985+ tokio:: spawn ( async move {
1986+ ShowCapWindow :: Main {
1987+ init_target_mode : None ,
1988+ }
1989+ . show ( & app)
1990+ . await
1991+ } ) ;
19771992 return ;
19781993 } ;
19791994
@@ -2112,7 +2127,11 @@ pub async fn run(recording_logging_handle: LoggingHandle) {
21122127 } else {
21132128 println ! ( "Permissions granted, showing main window" ) ;
21142129
2115- let _ = ShowCapWindow :: Main . show ( & app) . await ;
2130+ let _ = ShowCapWindow :: Main {
2131+ init_target_mode : None ,
2132+ }
2133+ . show ( & app)
2134+ . await ;
21162135 }
21172136 }
21182137 } ) ;
@@ -2121,7 +2140,7 @@ pub async fn run(recording_logging_handle: LoggingHandle) {
21212140
21222141 tray:: create_tray ( & app) . unwrap ( ) ;
21232142
2124- RequestStartRecording :: listen_any_spawn ( & app, |event, app| async move {
2143+ RequestStartRecording :: listen_any_spawn ( & app, async |event, app| {
21252144 if CapWindowId :: Main . get ( & app) . is_some ( ) {
21262145 return ;
21272146 } ;
@@ -2150,13 +2169,15 @@ pub async fn run(recording_logging_handle: LoggingHandle) {
21502169 . await ;
21512170 } ) ;
21522171
2153- RequestNewScreenshot :: listen_any_spawn ( & app, |_ , app| async move {
2154- if let Err ( e ) = take_screenshot ( app . clone ( ) , app . state ( ) ) . await {
2155- eprintln ! ( "Failed to take screenshot: {e}" ) ;
2172+ RequestOpenRecordingPicker :: listen_any_spawn ( & app, async |event , app| {
2173+ let _ = ShowCapWindow :: Main {
2174+ init_target_mode : event . target_mode ,
21562175 }
2176+ . show ( & app)
2177+ . await ;
21572178 } ) ;
21582179
2159- RequestOpenSettings :: listen_any_spawn ( & app, |payload, app| async move {
2180+ RequestOpenSettings :: listen_any_spawn ( & app, async |payload, app| {
21602181 let _ = ShowCapWindow :: Settings {
21612182 page : Some ( payload. page ) ,
21622183 }
@@ -2181,6 +2202,15 @@ pub async fn run(recording_logging_handle: LoggingHandle) {
21812202 match window_id {
21822203 CapWindowId :: Main => {
21832204 let app = app. clone ( ) ;
2205+
2206+ for ( id, window) in app. webview_windows ( ) {
2207+ if let Ok ( CapWindowId :: TargetSelectOverlay { .. } ) =
2208+ CapWindowId :: from_str ( & id)
2209+ {
2210+ let _ = window. close ( ) ;
2211+ }
2212+ }
2213+
21842214 tokio:: spawn ( async move {
21852215 let state = app. state :: < ArcLock < App > > ( ) ;
21862216 let app_state = & mut * state. write ( ) . await ;
@@ -2306,7 +2336,11 @@ pub async fn run(recording_logging_handle: LoggingHandle) {
23062336 } else {
23072337 let handle = _handle. clone ( ) ;
23082338 tokio:: spawn ( async move {
2309- let _ = ShowCapWindow :: Main . show ( & handle) . await ;
2339+ let _ = ShowCapWindow :: Main {
2340+ init_target_mode : None ,
2341+ }
2342+ . show ( & handle)
2343+ . await ;
23102344 } ) ;
23112345 }
23122346 }
0 commit comments