From 06fb0896331e919f2d1479ef1b0b60ec3f07960e Mon Sep 17 00:00:00 2001 From: Sam <30577766+Samasaur1@users.noreply.github.com> Date: Thu, 13 Jul 2023 21:14:04 -0700 Subject: [PATCH] On macOS, set that we prefer tabbing Winit now supports tabbing identifiers, thus set that we prefer tabbing, in particular it'll make windows tab when using the same tabbing identifiers, which is desirable for the end users. --- src/platform_impl/macos/appkit/mod.rs | 3 ++- src/platform_impl/macos/appkit/window.rs | 16 ++++++++++++++++ src/platform_impl/macos/window.rs | 3 ++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/platform_impl/macos/appkit/mod.rs b/src/platform_impl/macos/appkit/mod.rs index cb7363c8..faebaa30 100644 --- a/src/platform_impl/macos/appkit/mod.rs +++ b/src/platform_impl/macos/appkit/mod.rs @@ -56,7 +56,8 @@ pub(crate) use self::version::NSAppKitVersion; pub(crate) use self::view::{NSTrackingRectTag, NSView}; pub(crate) use self::window::{ NSBackingStoreType, NSWindow, NSWindowButton, NSWindowLevel, NSWindowOcclusionState, - NSWindowOrderingMode, NSWindowSharingType, NSWindowStyleMask, NSWindowTitleVisibility, + NSWindowOrderingMode, NSWindowSharingType, NSWindowStyleMask, NSWindowTabbingMode, + NSWindowTitleVisibility, }; #[link(name = "AppKit", kind = "framework")] diff --git a/src/platform_impl/macos/appkit/window.rs b/src/platform_impl/macos/appkit/window.rs index 4c4fed02..139197a5 100644 --- a/src/platform_impl/macos/appkit/window.rs +++ b/src/platform_impl/macos/appkit/window.rs @@ -89,6 +89,9 @@ extern_methods!( #[sel(setSharingType:)] pub fn setSharingType(&self, sharingType: NSWindowSharingType); + #[sel(setTabbingMode:)] + pub fn setTabbingMode(&self, tabbingMode: NSWindowTabbingMode); + #[sel(setOpaque:)] pub fn setOpaque(&self, opaque: bool); @@ -425,3 +428,16 @@ pub enum NSWindowOrderingMode { unsafe impl Encode for NSWindowOrderingMode { const ENCODING: Encoding = NSInteger::ENCODING; } + +#[allow(dead_code)] +#[repr(isize)] // NSInteger +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum NSWindowTabbingMode { + NSWindowTabbingModeAutomatic = 0, + NSWindowTabbingModeDisallowed = 2, + NSWindowTabbingModePreferred = 1, +} + +unsafe impl Encode for NSWindowTabbingMode { + const ENCODING: Encoding = NSInteger::ENCODING; +} diff --git a/src/platform_impl/macos/window.rs b/src/platform_impl/macos/window.rs index 53ea2395..4e8303bb 100644 --- a/src/platform_impl/macos/window.rs +++ b/src/platform_impl/macos/window.rs @@ -48,7 +48,7 @@ use super::appkit::{ NSApp, NSAppKitVersion, NSAppearance, NSApplicationPresentationOptions, NSBackingStoreType, NSColor, NSCursor, NSFilenamesPboardType, NSRequestUserAttentionType, NSResponder, NSScreen, NSView, NSWindow, NSWindowButton, NSWindowLevel, NSWindowSharingType, NSWindowStyleMask, - NSWindowTitleVisibility, + NSWindowTabbingMode, NSWindowTitleVisibility, }; #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] @@ -362,6 +362,7 @@ impl WinitWindow { if let Some(identifier) = pl_attrs.tabbing_identifier { this.setTabbingIdentifier(&NSString::from_str(&identifier)); + this.setTabbingMode(NSWindowTabbingMode::NSWindowTabbingModePreferred); } if attrs.content_protected {