From 016697395d192c5548ee7a178468bfcbdf278112 Mon Sep 17 00:00:00 2001 From: amrbashir Date: Mon, 7 Nov 2022 17:53:34 +0200 Subject: [PATCH 1/3] On macOS, add documentEdited APIs Port of https://github.com/tauri-apps/tao/commit/33fdeab6291d4aef8ea9facb58fe9583f6c1aaf3 --- CHANGELOG.md | 1 + src/platform/macos.rs | 16 ++++++++++++++++ src/platform_impl/macos/appkit/window.rs | 6 ++++++ src/platform_impl/macos/window.rs | 8 ++++++++ 4 files changed, 31 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3e90880b9..f17b5e7d73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ And please only add new entries to the top of this list, right below the `# Unre # Unreleased +- On macOS, add `WindowExtMacOS::is_document_edited` and `WindowExtMacOS::set_document_edited` APIs. - On Windows, fix icons specified on `WindowBuilder` not taking effect for windows created after the first one. - On Windows and macOS, add `Window::title` to query the current window title. - On Windows, fix focusing menubar when pressing `Alt`. diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 88269150da..504d4b50f1 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -36,6 +36,12 @@ pub trait WindowExtMacOS { /// Sets whether or not the window has shadow. fn set_has_shadow(&self, has_shadow: bool); + + /// Get the window's edit state. + fn is_document_edited(&self) -> bool; + + /// Put the window in a state which indicates a file save is required. + fn set_decoument_edited(&self, edited: bool); } impl WindowExtMacOS for Window { @@ -68,6 +74,16 @@ impl WindowExtMacOS for Window { fn set_has_shadow(&self, has_shadow: bool) { self.window.set_has_shadow(has_shadow) } + + #[inline] + fn is_document_edited(&self) -> bool { + self.window.is_document_edited() + } + + #[inline] + fn set_decoument_edited(&self, edited: bool) { + self.window.set_decoument_edited(edited) + } } /// Corresponds to `NSApplicationActivationPolicy`. diff --git a/src/platform_impl/macos/appkit/window.rs b/src/platform_impl/macos/appkit/window.rs index 2c9b5d99ba..18e200eca0 100644 --- a/src/platform_impl/macos/appkit/window.rs +++ b/src/platform_impl/macos/appkit/window.rs @@ -165,6 +165,9 @@ extern_methods!( #[sel(setLevel:)] pub fn setLevel(&self, level: NSWindowLevel); + #[sel(setDocumentEdited:)] + pub fn setDocumentEdited(&self, val: bool); + #[sel(occlusionState)] pub fn occlusionState(&self) -> NSWindowOcclusionState; @@ -183,6 +186,9 @@ extern_methods!( #[sel(isZoomed)] pub fn isZoomed(&self) -> bool; + #[sel(isDocumentEdited)] + pub fn isDocumentEdited(&self) -> bool; + #[sel(close)] pub fn close(&self); diff --git a/src/platform_impl/macos/window.rs b/src/platform_impl/macos/window.rs index 5e96fbac7b..9bac50752d 100644 --- a/src/platform_impl/macos/window.rs +++ b/src/platform_impl/macos/window.rs @@ -1216,6 +1216,14 @@ impl WindowExtMacOS for WinitWindow { fn set_has_shadow(&self, has_shadow: bool) { self.setHasShadow(has_shadow) } + + fn is_document_edited(&self) -> bool { + self.isDocumentEdited() + } + + fn set_decoument_edited(&self, edited: bool) { + self.setDocumentEdited(edited) + } } pub(super) fn get_ns_theme() -> Theme { From dc49a103f87f1babf3df69e765bac2433c77e45c Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Wed, 23 Nov 2022 14:33:04 +0200 Subject: [PATCH 2/3] Update src/platform/macos.rs Co-authored-by: Mads Marquart --- src/platform/macos.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 504d4b50f1..466d1c75df 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -38,6 +38,19 @@ pub trait WindowExtMacOS { fn set_has_shadow(&self, has_shadow: bool); /// Get the window's edit state. + /// + /// # Examples + /// + /// ```ignore + /// WindowEvent::CloseRequested => { + /// if window.is_document_edited() { + /// // Show the user a save pop-up or similar + /// } else { + /// // Close the window + /// drop(window); + /// } + /// } + /// ``` fn is_document_edited(&self) -> bool; /// Put the window in a state which indicates a file save is required. From 2c90e134a376203b30df130c4edace240d7baffd Mon Sep 17 00:00:00 2001 From: amrbashir Date: Wed, 23 Nov 2022 14:34:11 +0200 Subject: [PATCH 3/3] typo --- src/platform/macos.rs | 6 +++--- src/platform_impl/macos/window.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 466d1c75df..d92540b1bd 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -54,7 +54,7 @@ pub trait WindowExtMacOS { fn is_document_edited(&self) -> bool; /// Put the window in a state which indicates a file save is required. - fn set_decoument_edited(&self, edited: bool); + fn set_document_edited(&self, edited: bool); } impl WindowExtMacOS for Window { @@ -94,8 +94,8 @@ impl WindowExtMacOS for Window { } #[inline] - fn set_decoument_edited(&self, edited: bool) { - self.window.set_decoument_edited(edited) + fn set_document_edited(&self, edited: bool) { + self.window.set_document_edited(edited) } } diff --git a/src/platform_impl/macos/window.rs b/src/platform_impl/macos/window.rs index 9bac50752d..e82843359e 100644 --- a/src/platform_impl/macos/window.rs +++ b/src/platform_impl/macos/window.rs @@ -1221,7 +1221,7 @@ impl WindowExtMacOS for WinitWindow { self.isDocumentEdited() } - fn set_decoument_edited(&self, edited: bool) { + fn set_document_edited(&self, edited: bool) { self.setDocumentEdited(edited) } }