use winit::window::{Window, WindowAttributes};
#[cfg_attr(not(target_os = "windows"), expect(unused_variables))]
pub fn own(attrs: WindowAttributes, owner: &Window) -> WindowAttributes {
#[cfg(target_os = "windows")]
{
use winit::platform::windows::WindowAttributesExtWindows;
use winit::raw_window_handle::{HasWindowHandle, RawWindowHandle};
if let Ok(handle) = owner.window_handle()
&& let RawWindowHandle::Win32(handle) = handle.as_raw()
{
return attrs.with_owner_window(handle.hwnd.get());
}
}
attrs
}
#[cfg_attr(not(target_os = "macos"), expect(unused_variables))]
pub fn adopt(owner: &Window, child: &Window) {
#[cfg(target_os = "macos")]
{
use objc2_app_kit::NSWindowOrderingMode;
if let (Some(owner), Some(child)) = (ns_window(owner), ns_window(child)) {
unsafe { owner.addChildWindow_ordered(&child, NSWindowOrderingMode::Above) };
}
}
}
#[cfg_attr(not(target_os = "windows"), expect(unused_variables))]
pub fn set_enabled(window: &Window, enabled: bool) {
#[cfg(target_os = "windows")]
{
use winit::platform::windows::WindowExtWindows;
window.set_enable(enabled);
}
}
#[cfg(target_os = "macos")]
fn ns_window(window: &Window) -> Option<objc2::rc::Retained<objc2_app_kit::NSWindow>> {
use objc2_app_kit::NSView;
use winit::raw_window_handle::{HasWindowHandle, RawWindowHandle};
let handle = window.window_handle().ok()?;
let RawWindowHandle::AppKit(handle) = handle.as_raw() else {
return None;
};
let view: &NSView = unsafe { &*handle.ns_view.as_ptr().cast::<NSView>() };
view.window()
}