|
@@ -29,6 +29,8 @@ use webview2_com::FocusChangedEventHandler;
|
|
|
#[cfg(windows)]
|
|
|
use windows::Win32::{Foundation::HWND, System::WinRT::EventRegistrationToken};
|
|
|
#[cfg(target_os = "macos")]
|
|
|
+use wry::application::platform::macos::EventLoopWindowTargetExtMacOS;
|
|
|
+#[cfg(target_os = "macos")]
|
|
|
use wry::application::platform::macos::WindowBuilderExtMacOS;
|
|
|
#[cfg(target_os = "linux")]
|
|
|
use wry::application::platform::unix::{WindowBuilderExtUnix, WindowExtUnix};
|
|
@@ -1021,6 +1023,13 @@ unsafe impl Send for GtkWindow {}
|
|
|
pub struct RawWindowHandle(pub raw_window_handle::RawWindowHandle);
|
|
|
unsafe impl Send for RawWindowHandle {}
|
|
|
|
|
|
+#[cfg(target_os = "macos")]
|
|
|
+#[derive(Debug, Clone)]
|
|
|
+pub enum ApplicationMessage {
|
|
|
+ Show,
|
|
|
+ Hide,
|
|
|
+}
|
|
|
+
|
|
|
pub enum WindowMessage {
|
|
|
#[cfg(desktop)]
|
|
|
WithWebview(Box<dyn FnOnce(Webview) + Send>),
|
|
@@ -1126,6 +1135,8 @@ pub type CreateWebviewClosure<T> = Box<
|
|
|
|
|
|
pub enum Message<T: 'static> {
|
|
|
Task(Box<dyn FnOnce() + Send>),
|
|
|
+ #[cfg(target_os = "macos")]
|
|
|
+ Application(ApplicationMessage),
|
|
|
Window(WebviewId, WindowMessage),
|
|
|
Webview(WebviewId, WebviewMessage),
|
|
|
#[cfg(all(desktop, feature = "system-tray"))]
|
|
@@ -1786,6 +1797,22 @@ impl<T: UserEvent> RuntimeHandle<T> for WryHandle<T> {
|
|
|
fn raw_display_handle(&self) -> RawDisplayHandle {
|
|
|
self.context.main_thread.window_target.raw_display_handle()
|
|
|
}
|
|
|
+
|
|
|
+ #[cfg(target_os = "macos")]
|
|
|
+ fn show(&self) -> tauri_runtime::Result<()> {
|
|
|
+ send_user_message(
|
|
|
+ &self.context,
|
|
|
+ Message::Application(ApplicationMessage::Show),
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ #[cfg(target_os = "macos")]
|
|
|
+ fn hide(&self) -> tauri_runtime::Result<()> {
|
|
|
+ send_user_message(
|
|
|
+ &self.context,
|
|
|
+ Message::Application(ApplicationMessage::Hide),
|
|
|
+ )
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
impl<T: UserEvent> Wry<T> {
|
|
@@ -1995,6 +2022,16 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ #[cfg(target_os = "macos")]
|
|
|
+ fn show(&self) {
|
|
|
+ self.event_loop.show_application();
|
|
|
+ }
|
|
|
+
|
|
|
+ #[cfg(target_os = "macos")]
|
|
|
+ fn hide(&self) {
|
|
|
+ self.event_loop.hide_application();
|
|
|
+ }
|
|
|
+
|
|
|
#[cfg(desktop)]
|
|
|
fn run_iteration<F: FnMut(RunEvent<T>) + 'static>(&mut self, mut callback: F) -> RunIteration {
|
|
|
use wry::application::platform::run_return::EventLoopExtRunReturn;
|
|
@@ -2185,6 +2222,15 @@ fn handle_user_message<T: UserEvent>(
|
|
|
} = context;
|
|
|
match message {
|
|
|
Message::Task(task) => task(),
|
|
|
+ #[cfg(target_os = "macos")]
|
|
|
+ Message::Application(application_message) => match application_message {
|
|
|
+ ApplicationMessage::Show => {
|
|
|
+ event_loop.show_application();
|
|
|
+ }
|
|
|
+ ApplicationMessage::Hide => {
|
|
|
+ event_loop.hide_application();
|
|
|
+ }
|
|
|
+ },
|
|
|
Message::Window(id, window_message) => {
|
|
|
if let WindowMessage::UpdateMenuItem(item_id, update) = window_message {
|
|
|
if let Some(menu_items) = windows.borrow_mut().get_mut(&id).map(|w| &mut w.menu_items) {
|