[macOS, 3.x] Use occlusionState to determine when window is drawable.

This commit is contained in:
bruvzg 2023-10-11 11:49:38 +03:00
parent fe7ed984b5
commit d4c2e7ec2e
No known key found for this signature in database
GPG Key ID: 7960FCF39844EC38
2 changed files with 7 additions and 1 deletions

View File

@ -135,6 +135,7 @@ public:
bool resizable; bool resizable;
bool window_focused; bool window_focused;
bool on_top; bool on_top;
bool is_visible;
Size2 window_size; Size2 window_size;
Rect2 restore_rect; Rect2 restore_rect;

View File

@ -463,6 +463,10 @@ static NSCursor *cursorFromSelector(SEL selector, SEL fallback = nil) {
OS_OSX::singleton->window_focused = true; 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 @end
@interface GodotContentView : NSOpenGLView <NSTextInputClient> { @interface GodotContentView : NSOpenGLView <NSTextInputClient> {
@ -2410,7 +2414,7 @@ String OS_OSX::get_system_dir(SystemDir p_dir, bool p_shared_storage) const {
} }
bool OS_OSX::can_draw() const { bool OS_OSX::can_draw() const {
return true; return is_visible;
} }
void OS_OSX::set_clipboard(const String &p_text) { void OS_OSX::set_clipboard(const String &p_text) {
@ -3568,6 +3572,7 @@ OS_OSX::OS_OSX() {
im_position = Point2(); im_position = Point2();
layered_window = false; layered_window = false;
autoreleasePool = [[NSAutoreleasePool alloc] init]; autoreleasePool = [[NSAutoreleasePool alloc] init];
is_visible = true;
eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
ERR_FAIL_COND(!eventSource); ERR_FAIL_COND(!eventSource);