From 11a44081df97b82108be63a925d8c479bddfdc4d Mon Sep 17 00:00:00 2001
From: Mads Marquart <mads@marquart.dk>
Date: Wed, 1 Dec 2021 12:20:56 +0100
Subject: [PATCH] macOS move impl details of `platform` into `platform_impl`

---
 src/platform/macos.rs                 |  8 ++------
 src/platform/windows.rs               |  4 +---
 src/platform_impl/macos/event_loop.rs | 14 ++++++++++++++
 src/platform_impl/windows/window.rs   |  5 +++++
 4 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/src/platform/macos.rs b/src/platform/macos.rs
index 6e7d9a59..55a13a0f 100644
--- a/src/platform/macos.rs
+++ b/src/platform/macos.rs
@@ -241,14 +241,10 @@ pub trait EventLoopWindowTargetExtMacOS {
 
 impl<T> EventLoopWindowTargetExtMacOS for EventLoopWindowTarget<T> {
     fn hide_application(&self) {
-        let cls = objc::runtime::Class::get("NSApplication").unwrap();
-        let app: cocoa::base::id = unsafe { msg_send![cls, sharedApplication] };
-        unsafe { msg_send![app, hide: 0] }
+        self.p.hide_application()
     }
 
     fn hide_other_applications(&self) {
-        let cls = objc::runtime::Class::get("NSApplication").unwrap();
-        let app: cocoa::base::id = unsafe { msg_send![cls, sharedApplication] };
-        unsafe { msg_send![app, hideOtherApplications: 0] }
+        self.p.hide_other_applications()
     }
 }
diff --git a/src/platform/windows.rs b/src/platform/windows.rs
index 7df4cced..3499ba77 100644
--- a/src/platform/windows.rs
+++ b/src/platform/windows.rs
@@ -112,9 +112,7 @@ impl WindowExtWindows for Window {
 
     #[inline]
     fn set_enable(&self, enabled: bool) {
-        unsafe {
-            winapi::um::winuser::EnableWindow(self.hwnd() as _, enabled as _);
-        }
+        self.window.set_enable(enabled)
     }
 
     #[inline]
diff --git a/src/platform_impl/macos/event_loop.rs b/src/platform_impl/macos/event_loop.rs
index 7c5ceaeb..5ee8fbcb 100644
--- a/src/platform_impl/macos/event_loop.rs
+++ b/src/platform_impl/macos/event_loop.rs
@@ -85,6 +85,20 @@ impl<T: 'static> EventLoopWindowTarget<T> {
     }
 }
 
+impl<T> EventLoopWindowTarget<T> {
+    pub(crate) fn hide_application(&self) {
+        let cls = objc::runtime::Class::get("NSApplication").unwrap();
+        let app: cocoa::base::id = unsafe { msg_send![cls, sharedApplication] };
+        unsafe { msg_send![app, hide: 0] }
+    }
+
+    pub(crate) fn hide_other_applications(&self) {
+        let cls = objc::runtime::Class::get("NSApplication").unwrap();
+        let app: cocoa::base::id = unsafe { msg_send![cls, sharedApplication] };
+        unsafe { msg_send![app, hideOtherApplications: 0] }
+    }
+}
+
 pub struct EventLoop<T: 'static> {
     pub(crate) delegate: IdRef,
 
diff --git a/src/platform_impl/windows/window.rs b/src/platform_impl/windows/window.rs
index 81af6c4b..7809cf97 100644
--- a/src/platform_impl/windows/window.rs
+++ b/src/platform_impl/windows/window.rs
@@ -564,6 +564,11 @@ impl Window {
         self.window_state.lock().window_icon = window_icon;
     }
 
+    #[inline]
+    pub fn set_enable(&self, enabled: bool) {
+        unsafe { winuser::EnableWindow(self.hwnd() as _, enabled as _) };
+    }
+
     #[inline]
     pub fn set_taskbar_icon(&self, taskbar_icon: Option<Icon>) {
         if let Some(ref taskbar_icon) = taskbar_icon {