cocoa: Fix error when switching to FS while macOS' FS is active

This commit is contained in:
rdb 2024-09-16 13:29:01 +02:00
parent 9e87af9dd7
commit 82b9a1266c

View File

@ -858,7 +858,7 @@ set_properties_now(WindowProperties &properties) {
[_window setLevel: NSNormalWindowLevel]; [_window setLevel: NSNormalWindowLevel];
} }
if ([_window respondsToSelector:@selector(setStyleMask:)]) { if ([_window respondsToSelector:@selector(setStyleMask:)]) {
[_window setStyleMask:NSBorderlessWindowMask]; [_window setStyleMask:([_window styleMask] & NSFullScreenWindowMask)];
} }
[_window makeFirstResponder:_view]; [_window makeFirstResponder:_view];
[_window setLevel:CGShieldingWindowLevel()]; [_window setLevel:CGShieldingWindowLevel()];
@ -897,7 +897,7 @@ set_properties_now(WindowProperties &properties) {
// For some reason, setting the style mask makes it give up its // For some reason, setting the style mask makes it give up its
// first-responder status. // first-responder status.
if ([_window respondsToSelector:@selector(setStyleMask:)]) { if ([_window respondsToSelector:@selector(setStyleMask:)]) {
[_window setStyleMask:NSBorderlessWindowMask]; [_window setStyleMask:([_window styleMask] & NSFullScreenWindowMask)];
} }
[_window makeFirstResponder:_view]; [_window makeFirstResponder:_view];
[_window setLevel:CGShieldingWindowLevel()]; [_window setLevel:CGShieldingWindowLevel()];
@ -963,13 +963,12 @@ set_properties_now(WindowProperties &properties) {
// here. // here.
if (!properties.has_undecorated() && !_properties.get_undecorated() && if (!properties.has_undecorated() && !_properties.get_undecorated() &&
[_window respondsToSelector:@selector(setStyleMask:)]) { [_window respondsToSelector:@selector(setStyleMask:)]) {
if (properties.get_fixed_size()) { NSUInteger style = ([_window styleMask] & NSFullScreenWindowMask);
[_window setStyleMask:NSTitledWindowMask | NSClosableWindowMask | style |= NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask;
NSMiniaturizableWindowMask ]; if (!properties.get_fixed_size()) {
} else { style |= NSResizableWindowMask;
[_window setStyleMask:NSTitledWindowMask | NSClosableWindowMask |
NSMiniaturizableWindowMask | NSResizableWindowMask ];
} }
[_window setStyleMask:style];
[_window makeFirstResponder:_view]; [_window makeFirstResponder:_view];
} }
} }
@ -981,16 +980,14 @@ set_properties_now(WindowProperties &properties) {
_properties.set_undecorated(properties.get_undecorated()); _properties.set_undecorated(properties.get_undecorated());
if (!_properties.get_fullscreen()) { if (!_properties.get_fullscreen()) {
if (properties.get_undecorated()) { NSUInteger style = ([_window styleMask] & NSFullScreenWindowMask);
[_window setStyleMask: NSBorderlessWindowMask]; if (!properties.get_undecorated()) {
} else if (_properties.get_fixed_size()) { style |= NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask;
// Fixed size windows should not show the resize button. if (!properties.get_fixed_size()) {
[_window setStyleMask: NSTitledWindowMask | NSClosableWindowMask | style |= NSResizableWindowMask;
NSMiniaturizableWindowMask ]; }
} else {
[_window setStyleMask: NSTitledWindowMask | NSClosableWindowMask |
NSMiniaturizableWindowMask | NSResizableWindowMask ];
} }
[_window setStyleMask:style];
[_window makeFirstResponder:_view]; [_window makeFirstResponder:_view];
} }