From 94949932df9e8f0f2f0045d06149b9189ed85773 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 5 Jan 2024 23:52:37 -0800 Subject: [PATCH] Tweak menubar export --- packages/desktop/src/lib.rs | 6 +- packages/desktop/src/menubar.rs | 114 +++++++++++++----------- packages/desktop/src/mobile_shortcut.rs | 2 +- 3 files changed, 62 insertions(+), 60 deletions(-) diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index eb5fb0cfe..9cd94d128 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -15,6 +15,7 @@ mod events; mod file_upload; mod hooks; mod ipc; +mod menubar; mod protocol; mod query; mod shortcut; @@ -28,10 +29,6 @@ mod collect_assets; #[cfg(any(target_os = "ios", target_os = "android"))] mod mobile_shortcut; -// menu bar is only supported on desktop platforms -#[cfg(not(any(target_os = "android", target_os = "ios")))] -mod menubar; - // The main entrypoint for this crate pub use launch::*; mod launch; @@ -50,6 +47,5 @@ pub use desktop_context::{ window, DesktopContext, DesktopService, WryEventHandler, WryEventHandlerId, }; pub use hooks::{use_asset_handler, use_global_shortcut, use_window, use_wry_event_handler}; -pub use menubar::build_default_menu_bar; pub use shortcut::{ShortcutHandle, ShortcutId, ShortcutRegistryError}; pub use wry::RequestAsyncResponder; diff --git a/packages/desktop/src/menubar.rs b/packages/desktop/src/menubar.rs index 8c60799bb..d6a99313b 100644 --- a/packages/desktop/src/menubar.rs +++ b/packages/desktop/src/menubar.rs @@ -1,69 +1,75 @@ -use muda::{Menu, PredefinedMenuItem, Submenu}; use tao::window::Window; pub fn build_menu(window: &Window, default_menu_bar: bool) { if default_menu_bar { - build_menu_bar(build_default_menu_bar(), window) + #[cfg(not(any(target_os = "ios", target_os = "android")))] + impl_::build_menu_bar(impl_::build_default_menu_bar(), window) } } -#[allow(unused)] -pub fn build_menu_bar(menu: Menu, window: &Window) { - #[cfg(target_os = "windows")] - menu.init_for_hwnd(window); +#[cfg(not(any(target_os = "ios", target_os = "android")))] +mod impl_ { + use super::*; + use muda::{Menu, PredefinedMenuItem, Submenu}; - #[cfg(target_os = "linux")] - { - use tao::platform::unix::WindowExtUnix; - menu.init_for_gtk_window(window, None); - // menu.init_for_gtk_window(window, Some(&ertical_gtk_box)); + #[allow(unused)] + pub fn build_menu_bar(menu: Menu, window: &Window) { + #[cfg(target_os = "windows")] + menu.init_for_hwnd(window); + + #[cfg(target_os = "linux")] + { + use tao::platform::unix::WindowExtUnix; + menu.init_for_gtk_window(window, None); + // menu.init_for_gtk_window(window, Some(&ertical_gtk_box)); + } + + #[cfg(target_os = "macos")] + menu.init_for_nsapp(); } - #[cfg(target_os = "macos")] - menu.init_for_nsapp(); -} + /// Builds a standard menu bar depending on the users platform. It may be used as a starting point + /// to further customize the menu bar and pass it to a [`WindowBuilder`](tao::window::WindowBuilder). + /// > Note: The default menu bar enables macOS shortcuts like cut/copy/paste. + /// > The menu bar differs per platform because of constraints introduced + /// > by [`MenuItem`](tao::menu::MenuItem). + pub fn build_default_menu_bar() -> Menu { + let menu = Menu::new(); -/// Builds a standard menu bar depending on the users platform. It may be used as a starting point -/// to further customize the menu bar and pass it to a [`WindowBuilder`](tao::window::WindowBuilder). -/// > Note: The default menu bar enables macOS shortcuts like cut/copy/paste. -/// > The menu bar differs per platform because of constraints introduced -/// > by [`MenuItem`](tao::menu::MenuItem). -pub fn build_default_menu_bar() -> Menu { - let menu = Menu::new(); + // since it is uncommon on windows to have an "application menu" + // we add a "window" menu to be more consistent across platforms with the standard menu + let window_menu = Submenu::new("Window", true); + window_menu + .append_items(&[ + &PredefinedMenuItem::fullscreen(None), + &PredefinedMenuItem::separator(), + &PredefinedMenuItem::hide(None), + &PredefinedMenuItem::hide_others(None), + &PredefinedMenuItem::show_all(None), + &PredefinedMenuItem::maximize(None), + &PredefinedMenuItem::minimize(None), + &PredefinedMenuItem::close_window(None), + &PredefinedMenuItem::separator(), + &PredefinedMenuItem::quit(None), + ]) + .unwrap(); - // since it is uncommon on windows to have an "application menu" - // we add a "window" menu to be more consistent across platforms with the standard menu - let window_menu = Submenu::new("Window", true); - window_menu - .append_items(&[ - &PredefinedMenuItem::fullscreen(None), - &PredefinedMenuItem::separator(), - &PredefinedMenuItem::hide(None), - &PredefinedMenuItem::hide_others(None), - &PredefinedMenuItem::show_all(None), - &PredefinedMenuItem::maximize(None), - &PredefinedMenuItem::minimize(None), - &PredefinedMenuItem::close_window(None), - &PredefinedMenuItem::separator(), - &PredefinedMenuItem::quit(None), - ]) - .unwrap(); + let edit_menu = Submenu::new("Window", true); + edit_menu + .append_items(&[ + &PredefinedMenuItem::undo(None), + &PredefinedMenuItem::redo(None), + &PredefinedMenuItem::separator(), + &PredefinedMenuItem::cut(None), + &PredefinedMenuItem::copy(None), + &PredefinedMenuItem::paste(None), + &PredefinedMenuItem::separator(), + &PredefinedMenuItem::select_all(None), + ]) + .unwrap(); - let edit_menu = Submenu::new("Window", true); - edit_menu - .append_items(&[ - &PredefinedMenuItem::undo(None), - &PredefinedMenuItem::redo(None), - &PredefinedMenuItem::separator(), - &PredefinedMenuItem::cut(None), - &PredefinedMenuItem::copy(None), - &PredefinedMenuItem::paste(None), - &PredefinedMenuItem::separator(), - &PredefinedMenuItem::select_all(None), - ]) - .unwrap(); + menu.append_items(&[&window_menu, &edit_menu]).unwrap(); - menu.append_items(&[&window_menu, &edit_menu]).unwrap(); - - menu + menu + } } diff --git a/packages/desktop/src/mobile_shortcut.rs b/packages/desktop/src/mobile_shortcut.rs index c6144344b..dbd619b11 100644 --- a/packages/desktop/src/mobile_shortcut.rs +++ b/packages/desktop/src/mobile_shortcut.rs @@ -2,7 +2,7 @@ use super::*; use std::str::FromStr; -use wry::application::event_loop::EventLoopWindowTarget; +use tao::event_loop::EventLoopWindowTarget; use dioxus_html::input_data::keyboard_types::Modifiers;