From 557d285170a234a93b73862ade5964a8bbc1aa74 Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Thu, 26 Mar 2026 05:49:12 +0100 Subject: [PATCH] Remove symlinking between winit-appkit and winit-uikit (#4530) --- winit-appkit/Cargo.toml | 2 +- winit-appkit/src/event_loop.rs | 2 +- winit-appkit/src/lib.rs | 1 - winit-common/Cargo.toml | 12 +++++++++++- winit-common/src/foundation/mod.rs | 3 +++ .../src/foundation}/notification_center.rs | 3 +-- winit-common/src/lib.rs | 2 ++ winit-uikit/Cargo.toml | 2 +- winit-uikit/src/event_loop.rs | 2 +- winit-uikit/src/lib.rs | 1 - winit-uikit/src/notification_center.rs | 1 - 11 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 winit-common/src/foundation/mod.rs rename {winit-appkit/src => winit-common/src/foundation}/notification_center.rs (88%) delete mode 120000 winit-uikit/src/notification_center.rs diff --git a/winit-appkit/Cargo.toml b/winit-appkit/Cargo.toml index b5e423695..109451062 100644 --- a/winit-appkit/Cargo.toml +++ b/winit-appkit/Cargo.toml @@ -107,7 +107,7 @@ objc2-foundation = { workspace = true, features = [ "NSThread", "NSValue", ] } -winit-common = { workspace = true, features = ["core-foundation", "event-handler"] } +winit-common = { workspace = true, features = ["core-foundation", "event-handler", "foundation"] } [dev-dependencies] winit.workspace = true diff --git a/winit-appkit/src/event_loop.rs b/winit-appkit/src/event_loop.rs index bc2a3fd21..881762075 100644 --- a/winit-appkit/src/event_loop.rs +++ b/winit-appkit/src/event_loop.rs @@ -14,6 +14,7 @@ use objc2_foundation::{NSNotificationCenter, NSObjectProtocol}; use rwh_06::HasDisplayHandle; use tracing::debug_span; use winit_common::core_foundation::{MainRunLoop, MainRunLoopObserver, tracing_observers}; +use winit_common::foundation::create_observer; use winit_core::application::ApplicationHandler; use winit_core::cursor::{CustomCursor as CoreCustomCursor, CustomCursorSource}; use winit_core::error::{EventLoopError, RequestError}; @@ -30,7 +31,6 @@ use super::app_state::AppState; use super::cursor::CustomCursor; use super::event::dummy_event; use super::monitor; -use super::notification_center::create_observer; use crate::ActivationPolicy; use crate::window::Window; diff --git a/winit-appkit/src/lib.rs b/winit-appkit/src/lib.rs index 949e2f799..bcec63f14 100644 --- a/winit-appkit/src/lib.rs +++ b/winit-appkit/src/lib.rs @@ -76,7 +76,6 @@ mod event_loop; mod ffi; mod menu; mod monitor; -mod notification_center; mod observer; mod view; mod window; diff --git a/winit-common/Cargo.toml b/winit-common/Cargo.toml index d4d3a8b96..a1b666697 100644 --- a/winit-common/Cargo.toml +++ b/winit-common/Cargo.toml @@ -20,6 +20,9 @@ xkb = ["dep:xkbcommon-dl", "dep:smol_str"] # CoreFoundation core-foundation = ["dep:block2", "dep:objc2", "dep:objc2-core-foundation"] +# Foundation +foundation = ["dep:block2", "dep:objc2", "dep:objc2-foundation"] + [dependencies] smol_str = { workspace = true, optional = true } tracing.workspace = true @@ -30,7 +33,7 @@ memmap2 = { workspace = true, optional = true } x11-dl = { workspace = true, optional = true } xkbcommon-dl = { workspace = true, optional = true } -# CoreFoundation +# Foundation / CoreFoundation block2 = { workspace = true, optional = true } objc2 = { workspace = true, optional = true } objc2-core-foundation = { workspace = true, optional = true, features = [ @@ -40,6 +43,13 @@ objc2-core-foundation = { workspace = true, optional = true, features = [ "CFRunLoop", "CFString", ] } +objc2-foundation = { workspace = true, optional = true, features = [ + "std", + "block2", + "NSNotification", + "NSString", + "NSOperation", +] } [package.metadata.docs.rs] all-features = true diff --git a/winit-common/src/foundation/mod.rs b/winit-common/src/foundation/mod.rs new file mode 100644 index 000000000..ee9bb94a1 --- /dev/null +++ b/winit-common/src/foundation/mod.rs @@ -0,0 +1,3 @@ +mod notification_center; + +pub use self::notification_center::*; diff --git a/winit-appkit/src/notification_center.rs b/winit-common/src/foundation/notification_center.rs similarity index 88% rename from winit-appkit/src/notification_center.rs rename to winit-common/src/foundation/notification_center.rs index be91efd9e..b240c5340 100644 --- a/winit-appkit/src/notification_center.rs +++ b/winit-common/src/foundation/notification_center.rs @@ -1,4 +1,3 @@ -// NOTE: This is symlinked to be contained in both the AppKit and UIKit implementations. use std::ptr::NonNull; use block2::RcBlock; @@ -12,7 +11,7 @@ use objc2_foundation::{ /// /// This is used in Winit as an alternative to declaring an application delegate, as we want to /// give the user full control over those. -pub(crate) fn create_observer( +pub fn create_observer( center: &NSNotificationCenter, name: &NSNotificationName, handler: impl Fn(&NSNotification) + 'static, diff --git a/winit-common/src/lib.rs b/winit-common/src/lib.rs index b99dcf37b..f1997da16 100644 --- a/winit-common/src/lib.rs +++ b/winit-common/src/lib.rs @@ -4,5 +4,7 @@ pub mod core_foundation; #[cfg(feature = "event-handler")] pub mod event_handler; +#[cfg(feature = "foundation")] +pub mod foundation; #[cfg(feature = "xkb")] pub mod xkb; diff --git a/winit-uikit/Cargo.toml b/winit-uikit/Cargo.toml index 3784bc323..9fdc74bbc 100644 --- a/winit-uikit/Cargo.toml +++ b/winit-uikit/Cargo.toml @@ -69,7 +69,7 @@ objc2-ui-kit = { workspace = true, features = [ "UIViewController", "UIWindow", ] } -winit-common = { workspace = true, features = ["core-foundation", "event-handler"] } +winit-common = { workspace = true, features = ["core-foundation", "event-handler", "foundation"] } [package.metadata.docs.rs] all-features = true diff --git a/winit-uikit/src/event_loop.rs b/winit-uikit/src/event_loop.rs index 9a1258e8e..2d8843c9c 100644 --- a/winit-uikit/src/event_loop.rs +++ b/winit-uikit/src/event_loop.rs @@ -14,6 +14,7 @@ use objc2_ui_kit::{ use rwh_06::HasDisplayHandle; use tracing::debug_span; use winit_common::core_foundation::{MainRunLoop, MainRunLoopObserver, tracing_observers}; +use winit_common::foundation::create_observer; use winit_core::application::ApplicationHandler; use winit_core::cursor::{CustomCursor, CustomCursorSource}; use winit_core::error::{EventLoopError, NotSupportedError, RequestError}; @@ -25,7 +26,6 @@ use winit_core::monitor::MonitorHandle as CoreMonitorHandle; use winit_core::window::{Theme, Window as CoreWindow}; use super::app_state::{AppState, send_occluded_event_for_all_windows}; -use super::notification_center::create_observer; use crate::monitor::MonitorHandle; use crate::window::Window; use crate::{app_state, monitor}; diff --git a/winit-uikit/src/lib.rs b/winit-uikit/src/lib.rs index 7ae806f2e..44c9dc708 100644 --- a/winit-uikit/src/lib.rs +++ b/winit-uikit/src/lib.rs @@ -103,7 +103,6 @@ mod app_state; mod event_loop; mod monitor; -mod notification_center; mod view; mod view_controller; mod window; diff --git a/winit-uikit/src/notification_center.rs b/winit-uikit/src/notification_center.rs deleted file mode 120000 index 53fd2e866..000000000 --- a/winit-uikit/src/notification_center.rs +++ /dev/null @@ -1 +0,0 @@ -../../winit-appkit/src/notification_center.rs \ No newline at end of file