@@ -44,6 +44,7 @@ pub enum TrayItem {
4444 ModeStudio ,
4545 ModeInstant ,
4646 ModeScreenshot ,
47+ RequestPermissions ,
4748}
4849
4950impl From < TrayItem > for MenuId {
@@ -64,6 +65,7 @@ impl From<TrayItem> for MenuId {
6465 TrayItem :: ModeStudio => "mode_studio" ,
6566 TrayItem :: ModeInstant => "mode_instant" ,
6667 TrayItem :: ModeScreenshot => "mode_screenshot" ,
68+ TrayItem :: RequestPermissions => "request_permissions" ,
6769 }
6870 . into ( )
6971 }
@@ -92,6 +94,7 @@ impl TryFrom<MenuId> for TrayItem {
9294 "mode_studio" => Ok ( TrayItem :: ModeStudio ) ,
9395 "mode_instant" => Ok ( TrayItem :: ModeInstant ) ,
9496 "mode_screenshot" => Ok ( TrayItem :: ModeScreenshot ) ,
97+ "request_permissions" => Ok ( TrayItem :: RequestPermissions ) ,
9598 value => Err ( format ! ( "Invalid tray item id {value}" ) ) ,
9699 }
97100 }
@@ -321,6 +324,10 @@ fn get_current_mode(app: &AppHandle) -> RecordingMode {
321324 . unwrap_or_default ( )
322325}
323326
327+ fn is_setup_window_open ( app : & AppHandle ) -> bool {
328+ app. webview_windows ( ) . contains_key ( "setup" )
329+ }
330+
324331fn create_mode_submenu ( app : & AppHandle ) -> tauri:: Result < Submenu < tauri:: Wry > > {
325332 let current_mode = get_current_mode ( app) ;
326333
@@ -352,6 +359,30 @@ fn create_mode_submenu(app: &AppHandle) -> tauri::Result<Submenu<tauri::Wry>> {
352359}
353360
354361fn build_tray_menu ( app : & AppHandle , cache : & PreviousItemsCache ) -> tauri:: Result < Menu < tauri:: Wry > > {
362+ if is_setup_window_open ( app) {
363+ return Menu :: with_items (
364+ app,
365+ & [
366+ & MenuItem :: with_id (
367+ app,
368+ TrayItem :: RequestPermissions ,
369+ "Request Permissions" ,
370+ true ,
371+ None :: < & str > ,
372+ ) ?,
373+ & PredefinedMenuItem :: separator ( app) ?,
374+ & MenuItem :: with_id (
375+ app,
376+ "version" ,
377+ format ! ( "Cap v{}" , env!( "CARGO_PKG_VERSION" ) ) ,
378+ false ,
379+ None :: < & str > ,
380+ ) ?,
381+ & MenuItem :: with_id ( app, TrayItem :: Quit , "Quit Cap" , true , None :: < & str > ) ?,
382+ ] ,
383+ ) ;
384+ }
385+
355386 let previous_submenu = create_previous_submenu ( app, cache) ?;
356387 let mode_submenu = create_mode_submenu ( app) ?;
357388
@@ -628,6 +659,12 @@ pub fn create_tray(app: &AppHandle) -> tauri::Result<()> {
628659 Ok ( TrayItem :: ModeScreenshot ) => {
629660 handle_mode_selection ( app, RecordingMode :: Screenshot , & cache) ;
630661 }
662+ Ok ( TrayItem :: RequestPermissions ) => {
663+ let app = app. clone ( ) ;
664+ tokio:: spawn ( async move {
665+ let _ = ShowCapWindow :: Setup . show ( & app) . await ;
666+ } ) ;
667+ }
631668 _ => { }
632669 }
633670 } )
0 commit comments