diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index d1ff0f3cb45f..28cdaad3eb4e 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -135,6 +135,7 @@ class OS_OSX : public OS_Unix { bool resizable; bool window_focused; bool on_top; + bool is_visible; Size2 window_size; Rect2 restore_rect; diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index c540093bbe00..3b19600560ee 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -463,6 +463,10 @@ - (void)windowDidDeminiaturize:(NSNotification *)notification { OS_OSX::singleton->window_focused = true; }; +- (void)windowDidChangeOcclusionState:(NSNotification *)notification { + OS_OSX::singleton->is_visible = ([OS_OSX::singleton->window_object occlusionState] & NSWindowOcclusionStateVisible) && [OS_OSX::singleton->window_object isVisible]; +} + @end @interface GodotContentView : NSOpenGLView { @@ -2410,7 +2414,7 @@ virtual void log_error(const char *p_function, const char *p_file, int p_line, c } bool OS_OSX::can_draw() const { - return true; + return is_visible; } void OS_OSX::set_clipboard(const String &p_text) { @@ -3568,6 +3572,7 @@ void _update_keyboard_layouts() { im_position = Point2(); layered_window = false; autoreleasePool = [[NSAutoreleasePool alloc] init]; + is_visible = true; eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); ERR_FAIL_COND(!eventSource);