From 33dd9a2c218f2bb1b007cb7ae0a53a14886c8ed0 Mon Sep 17 00:00:00 2001 From: Thomas Ricouard Date: Mon, 19 Jan 2026 07:44:55 +0100 Subject: [PATCH] Fix Linux menu items --- src-tauri/src/lib.rs | 107 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 92 insertions(+), 15 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 9b6c3f68e..354859e71 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -49,6 +49,19 @@ pub fn run() { ], )?; + #[cfg(target_os = "linux")] + let file_menu = { + let close_window_item = + MenuItemBuilder::with_id("file_close_window", "Close Window").build(handle)?; + let quit_item = MenuItemBuilder::with_id("file_quit", "Quit").build(handle)?; + Submenu::with_items( + handle, + "File", + true, + &[&close_window_item, &quit_item], + )? + }; + #[cfg(not(target_os = "linux"))] let file_menu = Submenu::with_items( handle, "File", @@ -75,6 +88,14 @@ pub fn run() { ], )?; + #[cfg(target_os = "linux")] + let view_menu = { + let fullscreen_item = + MenuItemBuilder::with_id("view_fullscreen", "Toggle Full Screen") + .build(handle)?; + Submenu::with_items(handle, "View", true, &[&fullscreen_item])? + }; + #[cfg(not(target_os = "linux"))] let view_menu = Submenu::with_items( handle, "View", @@ -82,6 +103,27 @@ pub fn run() { &[&PredefinedMenuItem::fullscreen(handle, None)?], )?; + #[cfg(target_os = "linux")] + let window_menu = { + let minimize_item = + MenuItemBuilder::with_id("window_minimize", "Minimize").build(handle)?; + let maximize_item = + MenuItemBuilder::with_id("window_maximize", "Maximize").build(handle)?; + let close_item = + MenuItemBuilder::with_id("window_close", "Close Window").build(handle)?; + Submenu::with_items( + handle, + "Window", + true, + &[ + &minimize_item, + &maximize_item, + &PredefinedMenuItem::separator(handle)?, + &close_item, + ], + )? + }; + #[cfg(not(target_os = "linux"))] let window_menu = Submenu::with_items( handle, "Window", @@ -94,6 +136,14 @@ pub fn run() { ], )?; + #[cfg(target_os = "linux")] + let help_menu = { + let about_item = + MenuItemBuilder::with_id("help_about", format!("About {app_name}")) + .build(handle)?; + Submenu::with_items(handle, "Help", true, &[&about_item])? + }; + #[cfg(not(target_os = "linux"))] let help_menu = Submenu::with_items(handle, "Help", true, &[])?; Menu::with_items( @@ -109,22 +159,49 @@ pub fn run() { ) }) .on_menu_event(|app, event| { - if event.id() == "about" { - if let Some(window) = app.get_webview_window("about") { - let _ = window.show(); - let _ = window.set_focus(); - return; + match event.id().as_ref() { + "about" | "help_about" => { + if let Some(window) = app.get_webview_window("about") { + let _ = window.show(); + let _ = window.set_focus(); + return; + } + let _ = WebviewWindowBuilder::new( + app, + "about", + WebviewUrl::App("index.html".into()), + ) + .title("About Codex Monitor") + .resizable(false) + .inner_size(360.0, 240.0) + .center() + .build(); } - let _ = WebviewWindowBuilder::new( - app, - "about", - WebviewUrl::App("index.html".into()), - ) - .title("About Codex Monitor") - .resizable(false) - .inner_size(360.0, 240.0) - .center() - .build(); + "file_close_window" | "window_close" => { + if let Some(window) = app.get_webview_window("main") { + let _ = window.close(); + } + } + "file_quit" => { + app.exit(0); + } + "view_fullscreen" => { + if let Some(window) = app.get_webview_window("main") { + let is_fullscreen = window.is_fullscreen().unwrap_or(false); + let _ = window.set_fullscreen(!is_fullscreen); + } + } + "window_minimize" => { + if let Some(window) = app.get_webview_window("main") { + let _ = window.minimize(); + } + } + "window_maximize" => { + if let Some(window) = app.get_webview_window("main") { + let _ = window.maximize(); + } + } + _ => {} } }) .setup(|app| {