diff --git a/crates/gpui/src/platform/mac/window.rs b/crates/gpui/src/platform/mac/window.rs index ad8275f0ac..670a994d5f 100644 --- a/crates/gpui/src/platform/mac/window.rs +++ b/crates/gpui/src/platform/mac/window.rs @@ -82,6 +82,7 @@ const NSWindowAnimationBehaviorUtilityWindow: NSInteger = 4; #[ctor] unsafe fn build_classes() { + ::util::gpui1_loaded(); WINDOW_CLASS = build_window_class("GPUIWindow", class!(NSWindow)); PANEL_CLASS = build_window_class("GPUIPanel", class!(NSPanel)); VIEW_CLASS = { diff --git a/crates/gpui2/src/platform/mac/window.rs b/crates/gpui2/src/platform/mac/window.rs index babf8aece3..a5b0223c90 100644 --- a/crates/gpui2/src/platform/mac/window.rs +++ b/crates/gpui2/src/platform/mac/window.rs @@ -81,6 +81,8 @@ const NSDragOperationCopy: NSDragOperation = 1; #[ctor] unsafe fn build_classes() { + ::util::gpui2_loaded(); + WINDOW_CLASS = build_window_class("GPUIWindow", class!(NSWindow)); PANEL_CLASS = build_window_class("GPUIPanel", class!(NSPanel)); VIEW_CLASS = { diff --git a/crates/util/src/util.rs b/crates/util/src/util.rs index 629f950014..77d9e3b4cb 100644 --- a/crates/util/src/util.rs +++ b/crates/util/src/util.rs @@ -13,6 +13,7 @@ use std::{ ops::{AddAssign, Range, RangeInclusive}, panic::Location, pin::Pin, + sync::atomic::AtomicU32, task::{Context, Poll}, }; @@ -410,6 +411,20 @@ impl RangeExt for RangeInclusive { } } +static GPUI_LOADED: AtomicU32 = AtomicU32::new(0); + +pub fn gpui2_loaded() { + if GPUI_LOADED.fetch_add(2, std::sync::atomic::Ordering::SeqCst) != 0 { + panic!("=========\nYou are loading both GPUI1 and GPUI2 in the same build!\nFix Your Dependencies with cargo tree!\n=========") + } +} + +pub fn gpui1_loaded() { + if GPUI_LOADED.fetch_add(1, std::sync::atomic::Ordering::SeqCst) != 0 { + panic!("=========\nYou are loading both GPUI1 and GPUI2 in the same build!\nFix Your Dependencies with cargo tree!\n=========") + } +} + #[cfg(test)] mod tests { use super::*;