Browse Source

Tweak menubar export

Jonathan Kelley 1 year ago
parent
commit
94949932df

+ 1 - 5
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;

+ 60 - 54
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 = "macos")]
-    menu.init_for_nsapp();
-}
+        #[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));
+        }
 
-/// 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();
+        #[cfg(target_os = "macos")]
+        menu.init_for_nsapp();
+    }
 
-    // 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();
+    /// 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();
 
-    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();
+        // 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();
 
-    menu.append_items(&[&window_menu, &edit_menu]).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
+        menu.append_items(&[&window_menu, &edit_menu]).unwrap();
+
+        menu
+    }
 }

+ 1 - 1
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;