diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-03 17:23:18 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-03 17:23:18 +0200 |
commit | be6a09b6ec1e9520253b5332fcbd98bb0ce3339c (patch) | |
tree | 0dc1643245df25bdaf45320450e6d8f2458f65f5 | |
parent | 30bc0777564b9c095b76630eaddbcac14d5b435b (diff) | |
parent | b7b5fbe7aa35e5e5d3102ce8c133259916cddfda (diff) | |
download | redot-engine-be6a09b6ec1e9520253b5332fcbd98bb0ce3339c.tar.gz |
Merge pull request #82423 from bruvzg/mac_ex_fs
[macOS] Check all exclusive fullscreen windows before setting presentation mode.
-rw-r--r-- | platform/macos/display_server_macos.h | 1 | ||||
-rw-r--r-- | platform/macos/display_server_macos.mm | 12 | ||||
-rw-r--r-- | platform/macos/godot_window_delegate.mm | 2 |
3 files changed, 13 insertions, 2 deletions
diff --git a/platform/macos/display_server_macos.h b/platform/macos/display_server_macos.h index d89511927e..7dbe6a5970 100644 --- a/platform/macos/display_server_macos.h +++ b/platform/macos/display_server_macos.h @@ -245,6 +245,7 @@ public: WindowID _get_focused_window_or_popup() const; void mouse_enter_window(WindowID p_window); void mouse_exit_window(WindowID p_window); + void update_presentation_mode(); void window_destroy(WindowID p_window); void window_resize(WindowID p_window, int p_width, int p_height); diff --git a/platform/macos/display_server_macos.mm b/platform/macos/display_server_macos.mm index f984fd9dc5..bcd8f5c4e5 100644 --- a/platform/macos/display_server_macos.mm +++ b/platform/macos/display_server_macos.mm @@ -749,6 +749,7 @@ void DisplayServerMacOS::window_destroy(WindowID p_window) { } #endif windows.erase(p_window); + update_presentation_mode(); } void DisplayServerMacOS::window_resize(WindowID p_window, int p_width, int p_height) { @@ -2917,6 +2918,15 @@ Size2i DisplayServerMacOS::window_get_max_size(WindowID p_window) const { return wd.max_size; } +void DisplayServerMacOS::update_presentation_mode() { + for (const KeyValue<WindowID, WindowData> &wd : windows) { + if (wd.value.fullscreen && wd.value.exclusive_fullscreen) { + return; + } + } + [NSApp setPresentationOptions:NSApplicationPresentationDefault]; +} + void DisplayServerMacOS::window_set_min_size(const Size2i p_size, WindowID p_window) { _THREAD_SAFE_METHOD_ @@ -3027,7 +3037,7 @@ void DisplayServerMacOS::window_set_mode(WindowMode p_mode, WindowID p_window) { [wd.window_object toggleFullScreen:nil]; if (old_mode == WINDOW_MODE_EXCLUSIVE_FULLSCREEN) { - [NSApp setPresentationOptions:NSApplicationPresentationDefault]; + update_presentation_mode(); } wd.fullscreen = false; diff --git a/platform/macos/godot_window_delegate.mm b/platform/macos/godot_window_delegate.mm index 46355b4ae8..002ab0155f 100644 --- a/platform/macos/godot_window_delegate.mm +++ b/platform/macos/godot_window_delegate.mm @@ -157,7 +157,7 @@ DisplayServerMacOS::WindowData &wd = ds->get_window(window_id); if (wd.exclusive_fullscreen) { - [NSApp setPresentationOptions:NSApplicationPresentationDefault]; + ds->update_presentation_mode(); } wd.fullscreen = false; |