Browse Source

Merge pull request #49017 from bruvzg/macos_on_top_32

[macOS] Allow "on top" windows to enter full-screen mode.
Rémi Verschelde 4 years ago
parent
commit
0b136a8066
1 changed files with 14 additions and 3 deletions
  1. 14 3
      platform/osx/os_osx.mm

+ 14 - 3
platform/osx/os_osx.mm

@@ -322,6 +322,9 @@ static NSCursor *cursorFromSelector(SEL selector, SEL fallback = nil) {
 
 	if (!OS_OSX::singleton->resizable)
 		[OS_OSX::singleton->window_object setStyleMask:[OS_OSX::singleton->window_object styleMask] & ~NSWindowStyleMaskResizable];
+
+	if (OS_OSX::singleton->on_top)
+		[OS_OSX::singleton->window_object setLevel:NSFloatingWindowLevel];
 }
 
 - (void)windowDidChangeBackingProperties:(NSNotification *)notification {
@@ -1688,7 +1691,7 @@ Error OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_a
 	}
 
 	on_top = p_desired.always_on_top;
-	if (p_desired.always_on_top) {
+	if (p_desired.always_on_top && !p_desired.fullscreen) {
 		[window_object setLevel:NSFloatingWindowLevel];
 	}
 
@@ -2553,7 +2556,7 @@ void OS_OSX::_update_window() {
 		[window_object setHidesOnDeactivate:YES];
 	} else {
 		// Reset these when our window is not a borderless window that covers up the screen
-		if (on_top) {
+		if (on_top & !zoomed) {
 			[window_object setLevel:NSFloatingWindowLevel];
 		} else {
 			[window_object setLevel:NSNormalWindowLevel];
@@ -2725,6 +2728,7 @@ void OS_OSX::set_window_fullscreen(bool p_enabled) {
 	}
 
 	if (zoomed != p_enabled) {
+		[window_object setLevel:NSNormalWindowLevel];
 		if (layered_window)
 			set_window_per_pixel_transparency_enabled(false);
 		if (!resizable)
@@ -2822,6 +2826,9 @@ void OS_OSX::set_window_always_on_top(bool p_enabled) {
 
 	on_top = p_enabled;
 
+	if (zoomed)
+		return;
+
 	if (is_window_always_on_top() == p_enabled)
 		return;
 
@@ -2832,7 +2839,11 @@ void OS_OSX::set_window_always_on_top(bool p_enabled) {
 }
 
 bool OS_OSX::is_window_always_on_top() const {
-	return [window_object level] == NSFloatingWindowLevel;
+	if (zoomed) {
+		return on_top;
+	} else {
+		return [window_object level] == NSFloatingWindowLevel;
+	}
 }
 
 bool OS_OSX::is_window_focused() const {